手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2009年09月的文章

從快打旋風談格鬥遊戲

这篇文章的来源有点怪,是在看云风的BLOG时,从文中的一个链接发现的。
格斗游戏玩的不算 早,但总也算沉迷于其中的(某段时间),直至现在,电脑中、PSP中还是有模拟器,经常玩的还是SF2和KOF98等。

这篇文章讲精髓,其实讲的是格斗意识吧。有点意思。就转换了。。。看样子好象是台湾同胞,因为他的BLOG分类里有:程式设计,一般只有台湾同胞才会这么叫程序为程式。

原文如下,来自于從快打旋風談格鬥遊戲

已經想寫一篇文章討論「遊戲」很久了,遊戲對我影響很深,但玩遊戲在社會上一直是個不入流的娛樂,在爸媽眼裡是個會讓小孩墮落的萬惡淵藪。就像如果 有人問平常的休閒娛樂是什麼,回答打高爾夫球人家就會覺得你是上流社會的公子,但回答打電動就會被貼上宅男的標籤。小時候如果愛打電動(尤其去外面的電玩 店),還會被當成開始變壞的前兆,彷彿玩快打旋風就會真的去跟人家打架一樣。

根據我爸的說法,我打電動的歷史可能比我的年紀還長。因為我媽在懷我的時候,我爸買了一台Apple II給我媽玩遊戲,所以.. 我應該是在我媽肚子裡就開始學著打電動了吧XD

玩遊戲這件事被污名化很久,好像玩遊戲都是百害而無一利,好像每個遊戲都是打發時間的娛樂而已。所以我決定還是要寫點東西,說說玩遊戲的深度和價值在哪,幫廣大遊戲玩家吶喊一下,也希望能讓沒接觸過的人少點刻板印象甚至產生興趣。

我最早接觸且著迷的遊戲是格鬥遊戲,從快打旋風1代 (Street Fighter, 1987)我就玩過了,但那時還不太會玩,而且格鬥遊戲的基本系統也還未發展成熟,所以快打旋風1代比較像是純粹的拳打腳踢遊戲。接下來就是引起全世界格 鬥旋風的經典之作:快打旋風2系列 (Street Fighter 2, 1991-1994)。之所以稱快打旋風2為經典,是因為它訂定了現代格鬥遊戲的基礎系統,這個我稍後再詳細說明。除了CAPCOM的SF2外,當時我比 較愛的其實是SNK的餓狼傳說(Fatal Fury, 1991)、龍虎拳(Art of Fighting, 1992)、侍魂(Samurai Spirits, 1993)這三個作品,這三個作品其實各有特色,但大體上已經脫離不了SF2訂下的基礎,只是加上了一些延伸變化(例如超必殺技或是加上武器)。

當時2D格鬥遊戲的世界說起來只有兩大陣營,一是製作快打旋風系列的CAPCOM,另一個就是SNK。CAPCOM在SF2時期非常風光,但很可惜 過了幾年,就被SNK的另一經典: 格鬥天王 (The King of Fighters, 1994) 打得慘兮兮。KOF的特色在3人一組取代1對1的格鬥,還有華麗的招式及連續技。只可惜SNK太注重於華麗連續技的技巧,導致格鬥被扭曲為能輸入強力的連 續技的人即佔有極大優勢,而喪失了原始對戰的精隨。

那格鬥遊戲的精隨到底是什麼?

簡單來說,就是即時互動的心理戰:根據對手的行動即時應對,需要敏銳的觀察力看破對手的行動、瞬間的反應力以見招拆招、準確和穩定的執行力趁對手露出破綻給予強力打擊。

這也是人類競爭的精隨與本質,只要能早一步洞悉對手的行動,就能克敵制勝。無論在球場上,商場上,或是戰場上都是一樣。格鬥遊戲只是把這個兩人賽局的過程濃縮到一個三戰兩勝的60秒戰鬥裡。所以說,格鬥並不是比誰的力氣大或招式比較華麗,而是一場即時鬥智加上鬥技的競賽。

先前提到過快打旋風2建立起了格鬥的基礎系統,這系統包括了幾個最重要的基本元素:輕、重攻擊,上、中、下段的拳腳攻擊與防禦,以及無法防禦的摔技。所有的格鬥遊戲都脫不出這些基本要素,除了這些基本元素外,剩下的連續技或是超必殺技都只是看起來很華麗的包裝而已。

這些格鬥的基本元素就像剪刀石頭布一樣,兩兩相剋,沒有一個無敵的妙招。上段攻擊可以站著防禦,蹲下則可以閃開;中段攻擊可以站著防禦,蹲下卻擋不 住;下段攻擊不能站著防禦,只能蹲著防。也就是說,站著防可以防上中段攻擊,卻防不了下段攻擊;而蹲著防可以防上下段攻擊,卻防不了中段攻擊。所以當你想 採取防禦姿態時,就要猜測對手的可能攻擊,是中段?還是下段?

一般來說,中段的攻擊招式或拳腳比較少,所以初學者大多會一直蹲防。如果我是攻擊的人,就會試探對手是不是偏好蹲防,或是故意一直用下段攻擊讓他以為我偏好打他的下盤,等到關鍵時刻,就可以用中段攻擊起頭再接上連續技打得他措手不及。

格鬥遊戲至少會有3戰2勝,也就是說第一場的輸家只要有學乖,還是有機會反敗為勝。但正如我所說的,格鬥其實是心戰,一切的關鍵就在能不能看透對手 的想法和策略。聰明的對手如果在第一場學到不能一直蹲防時,突然的中段攻擊可能就不是那麼有用,這時我就會找其他的弱點來突破他。前面有提到,除了上中下 段的攻擊與防禦外,還有一個重要元素是摔技。摔技是近身時才能使用的招式,摔技的特點是無法防禦,所以很適合拿來對付很愛防禦的人。以上一場學乖的那個對 手來說,他如果反應力很好能看穿我要打中段還是下段,他就會很專心看我的動作,這樣我可能絕大多數的攻擊都會被擋下來。這時,要突破他最好的方法就是接近 他,用輕拳攻擊誘使他專心防守,再突然用摔技來突破他的防禦。

這麼說來,摔技就是無敵的囉?當然不是,最簡單的反擊方法就是跳開,然後對手就會因為摔技失敗而露出大破綻,接下來就可以趁隙反擊。

選擇攻擊的輕重也是另一種tradeoff。輕攻擊威力較小,但即使揮空後的硬直時間(任何攻擊和招式使出後都會有一小段無法行動的時間,即稱為硬 直時間)也很短;相反地,重攻擊威力大,但是萬一揮空的破綻也大。所以在攻擊時,不該以破綻大的攻擊起頭,而應該盡量以破綻較小的攻擊開始,如果命中再接 著輸入連續技給予大打擊。

快打旋風除了建立起這些基本攻擊系統外,還引入兩個每個2D格鬥都看得到的標準招式:波動拳和昇龍拳。波動拳是遠距離的牽制武器,即使不在對手身邊 也能照樣攻擊他。昇龍拳是對空武器,只要對手傻傻的跳過來,就可以用昇龍拳把他打下來。這兩種招式帶給格鬥遊戲更多變化,也把戰鬥從近距離的拳腳纏鬥提升 到更寬廣的層次。

和2D格鬥比起來,3D格鬥遊戲就少著墨於飛行武器和跳躍攻擊,例如VR快打系列(Virtua Fighter, 1993)講求的是真實的格鬥技,沒有誇張的氣功和必殺技,所有招式都只是拳腳攻擊的組合和變化。相較之下我一直都比較愛VR快打系列,勝於其他所有的 2D格鬥,因為VR快打裡沒有華麗的包裝(呃,畫面很真實其實是它的賣點之一啦),只有純粹的格鬥。

最近為了快打旋風4買了Xbox 360,能在網路上和無數高手對戰真是喚醒我體內格鬥的熱血。面對真人和電腦是完全不同的感受,像是上面所說的引誘對手只防守下盤基本上只對人有用,對電 腦來說是沒什麼意義的。人容易被騙,但人也學得很快。我在網路上常遇到各種不同打法的人,有的善於不斷混用摔技和打擊技(這叫投打二擇。投擲和打擊二選一 的意思)讓你不知道該防還是該躲,有的不斷利用近身跳躍到你背後踢背(直接跳過你踢你的背,所以要反過來往另一邊防禦才行),有的一直龜在地上不動等你跳 過來就昇龍拳…。

世界上玩家眾多,可以說有多少人就有多少種打法。我最喜歡在第一局觀察對手的攻擊模式,並加以試探他可能的弱點。即使第一局輸了,也要在二三局利用 他的弱點和模式反將他一軍。有時對手比我還高干,就可以明顯感受到兩個人透過畫面上的角色互動揣摩對方的戰略和弱點,一來一往之間都會不斷迸出激戰的火 花,實在非常過癮。

其實格鬥遊戲就像許多雙人對打的運動一樣(例如桌球、網球),除了講求準確的肌肉控制技巧外,也需要即時的觀察與反應力,更重要的藉由對手的動作和反應看穿對手的內心,並從這種互動過程中學習和成長。

Tags: 游戏

IT出路(转帖)

转载啦。。。原文没有排版,所以我做了点排版,当然不是全人工的,替换替换再替换就成了如今这样了。
我转载的网址也没有标明它的来源,所以只能标一下我的来源了:http://www.cnblogs.com/xiaosuo/archive/2009/09/08/1562345.html

       恭喜,你选择开发工程师做为自已的职业
       悲哀,你选择开发工程师做为自已的职业
       本文所指的开发工程师,仅指程序开发人员和以数字电路开发为主的电子工程师。
       当你选择计算机或者电子、自控等专业进入大学时,你本来还是有机会从事其它行业的,可你毕业时执迷不悟,仍然选择了开发做为你的职业,真是自做孽不可活。不过,欢迎你和我一样加入这个被其它人认为是风光无限的“白领”吧。
       如果你不是特别的与人世隔绝,我想你一定看过金老先生的名著《笑傲江湖》吧,里面有一门十分奇特的武功叫做"辟邪剑法",你看这个小说第一次看到这种功夫的练法时,我想你当时一定笑歪了牙“呵呵,真好玩!”,可是现在我很痛心的告诉你:你选择的开发工作就是你人生路上的"辟邪剑法",而你现在已经练了,并且无法再回头。
       相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心。在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人。第二句最常说的话是对公司的领导:“不行我就走人!”,实际上你也真的走过几回。对了,在这几年中,因为你的经济条件不错,你开始买房、开始谈恋爱、结婚、开始有了自已的小孩。有时候你会对自已说再过两年就去买车。当然其中可能有许多大件是需要分期付款的,但你对前途充满了信心,你确信认为这种日子会永远的持续下去,即使不是变得更好的话。
       日子总是在这种平淡中一天天的过去,就在那么不经意间,你突然发现自已已经快30岁了,或者已经30了,莫名的,你心里会漫延着一种说不清楚的不安情绪,你好像觉得前途并非像前几年那样变得越来越好,你也忽然发现你以前所瞧不起的同学里好像已经有不少开着车的了,也有几个人住着比你还大的房子,好像房款还是一次付清的,你突然明白你现在的生活比起你的同学来最多是中游偏上了。工作中最让你感到心里不舒服的是,你越来越不敢对你的领导说不了,即使比你来的晚的同事升职或提薪,你也只是在私下与朋友们一起喝酒时才敢发发牢骚,在头的面前你的声间越来越小、笑脸是越来越温柔。
       你终于开始迷茫“再过几年我会是在干什么呢?”,这句话常常出现在你的心里。
       计算机开发工作,是一种以年轻为资本的工作,说句通俗点的话是“吃青春饭的”,嗯,这句话好像在一种特别的行业也听到过。
       其标志就是一:工作的时间性非常强,一个开发项目被定的时限通常是很紧张的,更有甚者,有些号称开发管理的书里面还非常卑鄙的号召将一个项目切成多个小片,每个小片都定一个叫“里程碑”的东东来严格跟踪开发进度,加班加点在其它行业是需要加班工资的,而在开发行业,加班工资好像还没见到几个公司发过,是啊,反正有时间限制着,你干不完我再找你算账.所以开发工作通常有着其它工作所没有的精神上的压力。
       一旦一个人步入而立之年,因为家庭和孩子的负担,加上精力上面的衰退,加班工作时间变得越来越少,这点让很多老板们感到:这些人已经老了,不好用了。指示人事部门:“以后招开发人员限制在30岁以下!”,相对而言硬件开发会年龄方面限制会稍好一点点,但也是五十步笑百步。还有一个很重要的一点就是:计算机这个烂东东实在是进步的太快了,前两年买的顶级配置电脑,现在怎么看怎么像废品,这还是小事,更可气的是好像每天都需要学习新的知识,刚毕业时只会书本上的PASCAL,学会了用腐蚀的办法来做电路板,一上班就开始学习TURBOC和TANGER2.0,刚刚学会,还没来得及高兴,马上开始学Borland C++和Protel3.0,好不容易学会了,却发现需要学习VC和Protel98了。单片机也是啊:Z80的指令背的很熟,工作中没来得及用就要学8031,好好学吧,本来想着这辈子就吃它了,又发现又出来什么PIC、DSP、CPLD、FPGA、ARM等等....这还不包括中间要学一大堆74系列、4000系列、XX系列...IC卡居然里面还有CPU卡..如果学习的知识里每个字都能变成一分钱,我想所有的开发工程师都是腰缠万贯的富翁。
       一眼看去,这种日子好像见不到头,年轻时乐此不彼,但现在你一定对自已能坚持到什么时候感到怀疑了。我们都玩过像仙剑奇侠传这样的RPG游戏,刚开始时你只是一个一名不文的少年,随着你去打怪物、捡宝贝、学秘芨,最后终于有一天你会变成一个大英雄!那么你在实际生活中过得比那些小侠们还辛苦,为什么成不了一个生活中的大侠呢?呵呵,原因在这里:因为开发工作是邪门功夫,它虽然可以让你速成的变成小资,但它最大的特点是经验不积累!日新月异的知识更新,让你总是感到自已在退步,你就像在RPG中的主人公,开始时就给了你一把好剑和好盔甲,而且让你的级别很高,但让你的经验不累积,虽然刚开始打小怪物时你觉得自已很爽,但越到后来,你会发现你会死的很惨!比较一下你与其它非开发行业的同学你就可以知道了,例如和你学医的同学比起来。套用岳不群他老人家说华山剑宗和气宗的区别那段话:前十年你比你那些学医的同学收入和地位要好的多,但十年以后你和他基本上各方面都会持平,而二十年以后你的各方面远远不能与你学医的同学相提并论!嗯,你已经开始不笑辟邪剑法了吧。
       “敢问路在何方?路在脚下...”,不过猴兄和八戒兄这么认为是可以的,你呢?总结了许多开发朋友在30岁以后的生活之路,让我们一起看看开发人员“路在何方?”那么开发人员在30岁以后都干些什么呢?

其路一:继续做你这个很有“前途”的职业吧!

       偶掰着脚指头仔细数了数,发现还真的有很多朋友在30岁以后还在从事开发工作,我这里说的从事,是指你还需要天天在电脑边上编程序和画电路板,与你手下是否有几个小兵无关,也与你是否头上顶着什么项目经理、主任工程师的帽子无关,只要你还需要亲自开发,你就属于这一类。
其中有个年龄最大的朋友是63年的,从事医疗仪器的开发工作,35岁左右还在从事软硬件开发工作的仍有一大堆,分析这些仍然从事开发的朋友,基本上都有以下特点:

  1. 痴迷工作或者痴迷电脑,晚上八点到十二点的这段时间,基本上是在电脑桌或工作台前渡过的。
  2. 不喜欢与人交住,朋友很少,常联系的人不超过五个。
  3. 与朋友交往时谈工作多,但一般不主动谈钱。
  4. 体型偏胖或偏廋,不在正常区间。
  5. 无未来计划,对五年后自已生活怎么样、从事什么工作说不清楚。
  6. 俭省,从不乱花钱。

       即使你是还不到30岁的开发人员,你也可以看看自己对以上几条是否符合,是否会在30岁后还从事开发职业,四条疑似,五条以上基本确诊你也是这类型的人。
这些朋友们通常报着过一天是一天的态度生活,到了这个年龄,也不敢再轻易的换工作了,年轻时的锐气慢慢的也消退了。唯一不变的希望是有一天从天上掉下来一大堆钱把自己砸伤。说实在话因为他们的性格所限,基本上可以确定他们以后不可能在职场上获得更好的发展,当个小头头,带几个人开发已经是他们发展的顶点。至于以后的人生之路,不仅他们自己迷茫,可能上帝也正在头痛。   不过像这类朋友,偶很奇怪的发现:他们的小孩都是儿子!不知是偶然还是有什么其它说法。简单建议:要改变命运,先改变性格:坚持半年晚上不从事工作、游戏及电视,用此时间与人交往,你的人生会有改变。

其路二:转行从事技术支持、行政或生产等工作

       还有一些朋友,从事了几年的开发工作,因为自已并非特别的爱好,或者领导上面的强制工作安排,他们转到了技术支持、服务或行政等工作,至少当时从表面上看起来,他们的薪水较开发要少一些,但真正的统计这些人,发现他们之中有半数的人获得了更好的发展,升职为服务部经理或行政经理等职,最历害的一个朋友已升职为总经理助理,进入高层。
       这类朋友当时转行通常并非自已志愿,属被逼无奈或者其它原因,但显然,拥有专业知识技术的他们显然在非技术部门中鹤立鸡群,遇到什么事情他们均可从专业的角度提出建言,久而久之,他们获得更多的升职和加薪机会也就不足为奇。
       因为不从事开发,所以经验开始积累,这类的职业通常会给你一个很安定的感觉,你到30多岁后会发现这类职业反而比开发工作更容易获得新的工作机会。
简单建议:你如果确定在开发部无法获得很好的发展机会,不妨转到其它几个部门试试,换个活法,钱少点就少点吧,机会多。

其路三:开发管理

       如果你现在已经是总工或开发部经理,或者你眼看就有机会被提升为这类职务,那么恭喜你,你走的是从“弼马温”到“斗战胜佛”这条金光大路,你不仅拥有很高的专业技能,而且很显然,你也有着很强的人际交往能力,你这类人根本不需要对未来有着任何的担心,你在即使一无所有的时候也很容易白手起家。
       你这种人算是练辟邪剑法练成了仙,嗯,我无话可说。
       你是不是这类人也很容易区别,就像围棋二十岁不称国手终身无望一样,你应该在工作三、四年以后,也就是说二十七岁左右就会发现自已工作中指手划脚的时间比亲自开发的时间要多了,而且大多数这类人在这个年龄手下应该有“兵”了,相反的,如果你快30岁了还天天埋头于电脑前编程序和画板子,或者30多岁了你还没升到部门经理(虽然你总是觉得自已很有希望),基本上可以确定你不是这类人。好了,如果你确定你是这类人,那么你唯一的想法就是尽快爬上中层和高层,因为有时候人生偶然性太大,不占住坑的萝卜很有可能被人拔出来!
       简单建议:天天去你的老板家里面拖地和擦桌子!

其路四:出国或考研

       有两个搞开发后出国的朋友,其中一个甚至打工打到了一个小公司总工的位置,数据库和软件方面水平巨牛,但仍感觉心里不踏实,于是将自己工作多年的钱忍痛掏出来,出国费加上机票大概将自已辛苦所攒的银子花完,然后又借了一些钱,在02年身上揣着一万美元跑去了加拿大,在加拿大不停的重复找工作,换工作,然后再找工作的循环,找的工作基本上与计算机无关,不过工资总是在1500加元左右,呵呵,折成人民币与他在国内打工拿的基本上差不多,不过租个地下室就花了300加元,然后吃吃喝喝,再买个电脑上上网这类的,基本每月平均还要倒贴一点。前段时间给我的邮件里说,现在身上花的差不多只有5、6000美元了,准备开个小公司,看看能不能往国内倒腾点东东,做最后一搏。另外一个朋友去澳州,时间稍早一些,先是大概摘了一年多的葡萄,后来总算找了个技术工作,每天的工作是画机械图纸,收入还算不错
       将近3000澳元,买了个旧车,也算是过上了资本主义生活。不过前年回来一趟,唯一的感叹就是:在国外拿2000美元的生活,绝对不如在国内拿5000人民币的生活舒服。
       也有两个考研的朋友,不过其中一个严格的说不是做开发的出身,偏重于市场方面的工作性质,不过我的朋友里面考研的不多,只好凑两个人说说,一个考研后在北京找了个工作,每个月5、6000元钱,但还是做开发,生活仍然与没考研之前没有任何的改变,前途仍然没见到什么大亮的光,还是搞不清楚以后再干些什么,标准的过一天算一天了。另外一个考研后在大学里面找了个工作,工资虽然比他原来打工少了不少,但毕竟终身有靠,稳定了下来,也算修成了正果,这位哥们心情一放松下来,也开始有时间琢磨着业余时间自已做点什么,好像现在慢慢的也开始有了点眉目。
       简单建议:这两条路,对开发人员来说都不算是很好,出国十年前是好事,现在难说,考研能成功转行的概率恐怕也不是很大,多半仍然去搞开发,只不过研究生可以多干几年罢了。

其路五:转行到市场

       绞尽脑汁的想想,我所知道的人之中只有两个开发人员去了市场,这两个人都不能说是朋友,认识而已。他们都是主动要求去了市场,结果是这两个人均在市场都是干到一年左右,然后都自已开公司了。呵呵,很奇怪,极高的转行成功率!不过仔细想想,我对这两个人的思路佩服的五体投地。能下决心仍掉每月5、6000元的开发职位,从事一个自已并不熟悉的岗位,每月拿个2000多元+提成,但提成那是说不清楚的事情,这个决定,只能让人感觉到他们对自已前途清晰的把握和老谋深算的心机。而且他们不去服务不去生产,挖空心思说服领导去市场(市场部门与开发部门通常是一个公司的核心部门,进入其实并不容易),可以说是有着长远的考虑的。有技术了,再与客户交成朋友,马上就会产生很大的机遇应该是正常的事情。
       有实力,有心机,也有着很强的决心力,这种人恐怕早在大学毕业时或更早的时候就已经决定了自已的人生之路,他们的每一步路在若干年前早就计划周全,现在看起来:学会技术->进入市场->寻找商机->开公司,一条多么清楚的人生之路。但就像我们上小学中学时,所有人都知道上大学是我们最清楚的人生路一样,最后只有少数人才能真正达到目标(当然,现在扩招的历害是另外一回事,我是说我们那个时候,也就是:“很久很久以前,当我像你那么大的时候”)。
       简单建议:你若是这类人,我的建议是:...嗯?....那个你.你,你别走啊,我还有个事想请你赞助一下啊.....

其路六:开公司自已干

       呵呵,看到这一条,发现你的眼睛已经圆了,你肯定千百次的想过这个事情吧,咳咳,其实我从事开发的时候也是天天梦想着这种事情。总想着过两年找个机会就自已干,这个梦想一年又一年的折磨着你也给着你希望。看看吧,开发后来开公司的还真的不少,里面有成功的也有很多失败的,通常开公司都是几个人合伙开始的,有做技术的,有做市场的,几个人一拍即合、狼狈为奸,共同策划了这一个大活动。一般说来能让这几个人下决心走出这一步,产品肯定是先进的,甚至是国内独一无二的,市场也是很大的,负责市场的那个哥们通常会拍着胸保证可以卖出去,并悄悄地告诉你他在某主管领导是他小舅子的同学的二叔,肯定没问题。于是你们几个人找地点、注册执照、买了几个破桌子,再攒了两台电脑,每个人又凑了几万银子,公司开张了!
       产品很快出来了,市场的哥们也不负重望,有几个客户表示要试用了,一切看起来都是如此的正常,“.......你坐在老板桌前,不停的有人来汇报工作或者找你签字...人进人出中...你又想起公司再穷也不能只有一把椅子的故事.....”你在梦中笑出声来。
       是如此的顺利,你们很快就有单子了,很快的单子让你们凑的那点钱不够了,你们很高兴的每个人又增加了投入,拿出钱时你眼泪汪汪的数着钱说:“这就是我那生蛋的母鸡啊”。你们的产品确实不错,市场也经营的很好,客户慢慢的多了起来,单子来的时候一笔接着一笔,你每天都处于兴奋之中,唯一美中不足的是好像客户回款总是会拖一些日子,不过客户给你保证说:过几天,过几天就付给你们,因为回款总是在计划外,所以你们为了资金的流畅运行又凑了一些钱,这个时候你有一些心事了,因为你的存款折上面的数字已经快趋向于零了。“没事,过两个月等回款了一切都OK了,谁干事业不吃点苦呢?”你这么安慰着自已又投入到工作中去,资金总是在回款和生产经营费用之间走着一个窄窄的小木桥,你的账上总是没有太多的钱,扩大了的公司规模和许多意外情况,使你又一次、二次、三次的与合作者们再次投入了自已的资金,当然,后来的钱你可能已经是借的了.....
       终于有一天,你的会计再一次告诉你,老板啊,账上又没现金了,吃过多次苦头的你终于下决心开始重视资金的运行了,你裁掉了一些不必要的人手,减少了开发的投入,要求市场人员签单的时候必须予付XX%的款,回扣也必须等收过款后再付,同时也开始对产品的生产成本开始进行控制。
时间一天一天的过去,因为竟争对手的产品也对你的产品进行了仿造,你的产品慢慢变得不再先进,市场人员开始埋怨公司的合同资金方面规定太严格,不好签单,生产成本的下降通常也导至产品毛病的增多,客户也开始埋怨你的服务人员不能及时进行服务。
       终于有一天,你重新走进了人才交流中心,以前你是来招人的,现在你拿着自已的简历开始寻找一个工作......
       公司的成功与否,与产品有关,与市场有关,但更重要的是与资金有关,产品与市场都可以通过资金来弥补,而却没有任何东西可以代替
       资金,凡是倒下的公司,99%与资金链的断裂有关。在你决定要开公司以前,先估计一下你公司支持一年所需要的资金数额,包括人工费,生产,场地,广告宣传、市场费用、甚至电、水费等等等等,把你所想到的一切加在一起,得出的值就是..慢..如果你没有实际的开过公司的经验,你需要将此数字乘3,然后就是你开公司一年最少需要的费用,呵呵,公司的实际运营所需要的钱是你想像的3倍以上,你要是不信我也没办法。
       简单建议:开公司前最重要的是先确立你后续的资金来源!也就是说钱不够了怎么办?---因为你投入的钱肯定会不够的。

其路七:第二职业

       这类的朋友有不少,他们没有脱离开发工作,但是在业余时间又不停的接项目或者在卖产品,在单位里面他们显得并不出众,比起其它人来说他们属于最不愿意加班的一类.为此他们白天通常工作很勤奋.这类人也许不一定可以挣很多钱,但平均下来他们一年之中通常都可以比同事们多挣个几万元.有时候比上班拿得还多.但令人疑惑的是,这类人在生活中更加注重稳定,基本上没见到他们跳过蹧,即使私下里面已经开了个小公司,他们通常也不会辞职.
       你的旁边有没有这类人呢?分辨他们很容易:--电话很多,而且更愿意来电话时离开办公室找个没人的旮旯通话.神秘兮兮给人一种"这家伙是不是有二奶啊?"的感觉的人,通常是这类人。这类人是女性最佳的选择对象:很顾家,不象那些富人容易花心,而比起一般人来说,他们收入相对要高得多。但总结了一下几位这类的开发朋友:也得出了一个令人沮丧的结论:这种人通常个子不高,体形类似桶状.....
       简单建议:这好像是开发人员最佳的出路了,但比较丰厚的收入通常让这类人不愿意去冒风险....到现在为止我所认识的这类人还没有一个真正算是成功的。
      

       好了,虽然偶的经历远远说不上丰富,也没有什么成功之处可以自满的,但或许因为比其它朋友痴长了几岁,见过的人可能会稍多一些,所以斗胆写出了以上的一些文字,让您掉牙了。
       下面是偶走过开发这条路上总结出来的一点心得,你可以不看,但看了就千万别把嘴咧的太大:
        一、不管是给别人打工还是自已干,都要全心全意的工作,因为你所做的任何一点工作都会让自已的人生多一点筹码,这一点最最重要!这样的例子我至少可以举出两起,优秀的开发人员被其它新公司挖走,并给一定的股份,成为新公司的股东的例子。当时与这样的开发人员一个部门同时工作或更早工作的有许多人,他们平时经常偷点懒,能少干点工作就少干点,有时候还笑话那个平时努力工作的人傻,几年过去了,究竟谁比谁傻?
       二、多与市场人员交朋友,你接触他们时可能总会觉得他们知识比你少,甚至素质比你低,可能比你还有点黄。但实际上他们比你更懂这个社会!参加到他们这个圈子中去,和他们一起赌赌钱、一起聊聊天、一起洗洗桑拿、一起.....你会通过他们接触到另外一个世界。在网上或其它地方,如果有机会参与到除本职工作外的一些项目或产品的开发中(包括你的朋友拉你去做点小生意之类的非开发性质的工作),那怕是帮忙的性质,也要积极介入,至少你会交到很多的朋友,这样你的人生会多出很多的机会。

Tags: 出路

效果不错的首页大banner展示

看看这个效果如何?http://www.cssrain.cn/demo/webDemo/index.html,说老实话,我第一次看到的时候,真的以为是flash的。它的作者是不羁虫,用他的话来说是:

个人介绍
  1. 从事IT3年左右,专业前端工作2年左右,熟悉前端体验,Web标准(大侠很多,不敢自言精通),对jQuery的认识不到一年,jq很符合前端开发的习惯,努力学习中,也正是因为jquery认识了cssrain,这里的文章和插件都很不错,非常骄傲国内能有这样熬的交流的地方。  
核心代码如下:
JavaScript代码
  1. /*调用区域*/  
  2. $(document).ready(function(){  
  3.   
  4.   
  5. var pos=new Array();  
  6. pos=['585px','24px','88px','25px'];  
  7. var stepIndex=0;  
  8. var clickKey=0;  
  9. var now,next,clickIndex,startRun;  
  10.   
  11. window.stepRun=function () {  
  12. now=stepIndex;  
  13. if(clickKey==1){  
  14.     next = stepIndex = clickIndex;  
  15.     clickKey=0;  
  16.     startRun = setInterval("stepRun()",8000);  
  17. }else if (stepIndex<pos.length-1) {  
  18.     next = stepIndex+1;  
  19.     stepIndex++;  
  20. }else{next = stepIndex = 0;}  
  21.   
  22. //alert(clickKey);  
  23.   
  24.   
  25. $('#bNav').animate({height:0},1000,function () {  
  26. $('#bannerSlider img').eq(now).fadeOut(2000);  
  27. $('#bannerSlider img').eq(next).fadeIn(2000);  
  28. $('#bNav li').eq(now).removeClass('now');  
  29. $('#maskBg_1').animate({left:'220px',width:0},1000)  
  30.                         .animate({left:pos[next],width:'264px'},1000,function (){  
  31.                             $('#bNav li').eq(next).addClass('now');  
  32.                             $('#bNav').attr('className','bNav_'+next+'').animate({height:'300px'},1000);  
  33.                         });  
  34. });  
  35.   
  36. }  
  37.   
  38. startRun = setInterval("stepRun()",8000);  
  39.   
  40. $('#bNav a').click(function (){  
  41.     clickIndex=$('#bNav a').index($(this));  
  42.     clearInterval(startRun);  
  43.     clickKey=1;  
  44.     stepRun();  
  45.     return false;  
  46. });  
  47.   
  48.   
  49.   
  50. });  
不过,尽量是从这里下载:http://www.cssrain.cn/demo/webDemo/webDemo.rar

 

 

Tags: jquery, banner

CSS的inherit与auto

CSS说简单吧。很简单,就那么些标签,说难吧,又很难,就那么些东西,你要折腾好,也不容易。
本文来自博客园,作者司徒正美(以前我就说过,看到这名字就想起车田正美)
内容如下:

一个很显浅的寓言,千年老树,电打雷劈,屹立不倒,却毁于蝼蚁的侵袭之下。自以为精通CSS的人,常常被一些小问题搞到头晕脑胀。通常是一个很小的 数值,经过层层放大歪曲后,整个布局就走形了。CSS是一门很简单的语言,易学易用,但也最容易出垃圾代码。这是没有深入研究这门语言所致。本人认 为,CSS是由以下三大块构成的:默认值,继承系统与加权系统。默认值,也就是浏览器在用户没有设置属性的情况下,默认指定的属性。CSS框架基本都有一 个叫reset.css 的文件,就是对其进行重设,消除各浏览器的差异的。继承系统就是下面要重点讨论的东西。加权系统,也就是优先级的问题,不在本文的讨论范畴,不说了。另,这三个东西都面临着IE Bug的侵袭,危害甚大,自己另行了断吧(笑)。

在CSS中,许多属性都是可以继承的,如某个段落的字体设置为白色,其元素的字体不用设置或设置为inhert,它就是白色。这些属性被称之为inherited property,它会从父元素获取对应属性的经过计算转换的值(computed value),如果父元素和它的情形一样,它就继续往上找,最后没有就使用浏览器的默认值。

下面是 inherited properties的一览表:

  • border-collapse
  • border-spacing
  • caption-side
  • color
  • cursor
  • direction
  • empty-cells
  • font
  • font-family
  • font-stretch
  • font-size
  • font-size-adjust
  • font-style
  • font-variant
  • font-weight
  • letter-spacing
  • line-height
  • list-style
  • opacity
  • list-style-image
  • list-style-type
  • quotes
  • text-align
  • text-indent
  • text-transform
  • white-space
  • word-spacing
XML/HTML代码
  1. <!doctype html>  
  2. <html dir="ltr" lang="zh-CN">  
  3.     <head>  
  4.         <meta charset="utf-8"/>  
  5.         <meta http-equiv="X-UA-Compatible" content="IE=8">  
  6.         <style type="text/css">  
  7.         </style>  
  8.         <script type="text/javascript">  
  9.             function getStyle(el, style){  
  10.                 if(!+"\v1"){  
  11.                     stylestyle = style.replace(/\-(\w)/g, function(all, letter){  
  12.                         return letter.toUpperCase();  
  13.                     });  
  14.                     return el.currentStyle[style];  
  15.                 }else{  
  16.                     return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)  
  17.                 }  
  18.             }  
  19.             var _ = function(id){  
  20.                 return document.getElementById(id);  
  21.             };  
  22.             window.onload = function(){  
  23.                alert(getStyle(_("text2"),"color"))  
  24.             }  
  25.         </script>  
  26.   
  27.         <title>CSS</title>  
  28.     </head>  
  29.     <body>  
  30.         <div id ="text" style="width:20em;height:140px;background:#8080c0;padding:2px;border:1px solid red;color:#fff">父元素  
  31.             <div id="text2" style="width:80%;height:4em;background:#b45b3e">子元素</div>  
  32.         </div>  
  33.     </body>  
  34. </html>  

 

我们给父元素设置了字体的样式,没有设置子元素的,当取出子元素的时,发现其值转换为rgb格式(当然IE除外啦!)

不过,在IE7及其之前的版本,是不支持用inhert来设置direction与visibility以外的样式属性。具体可参见这里这里

在IE8中,原本是inherited property的text-align在th中失效。

XML/HTML代码
  1. <table>  
  2.   <tr>  
  3.     <th>Ruby</th>  
  4.     <th>Rouvre</th>  
  5.   </tr>  
  6.   <tr>  
  7.     <td>By</td>  
  8.     <td>司徒正美</td>  
  9.   </tr>  
  10. </table>  
  11. table, tr, td, th {  
  12.   border-collapse: collapse;  
  13.   border: 1px solid #000;  
  14. }  
  15. table {  
  16.   text-align: right;  
  17. }  
  18. td, th {  
  19.   width: 100px;  
  20. }  

本来th应该会从table中继承文本向右对齐的设置,但失效了……

XML/HTML代码
  1. <!doctype html>  
  2. <html dir="ltr" lang="zh-CN">  
  3.     <head>  
  4.         <meta charset="utf-8"/>  
  5.         <meta http-equiv="X-UA-Compatible" content="IE=8">  
  6.         <style type="text/css">  
  7.             table, tr, td, th {  
  8.                 border-collapse: collapse;  
  9.                 border: 1px solid #000;  
  10.             }  
  11.             table {  
  12.                 text-align: right;  
  13.             }  
  14.             td, th {  
  15.                 width: 100px;  
  16.             }  
  17.         </style>  
  18.         <title>CSS</title>  
  19.     </head>  
  20.     <body>  
  21.         <table>  
  22.             <tr>  
  23.                 <th>Ruby</th>  
  24.                 <th>Rouvre</th>  
  25.             </tr>  
  26.             <tr>  
  27.                 <td>By</td>  
  28.                 <td>司徒正美</td>  
  29.             </tr>  
  30.         </table>  
  31.     </body>  
  32. </html>  

解决IE8这个弱智Bug也很容易,就是显式地设置inhert。

XML/HTML代码
  1. table, tr, td, th {  
  2.   border-collapse: collapse;  
  3.   border: 1px solid #000;  
  4. }  
  5. table {  
  6.   text-align: right;  
  7. }  
  8. td, th {  
  9.   width: 100px;  
  10. }  
  11. th {  
  12.   text-align: inherit;  
  13. }  

详细代码

XML/HTML代码
  1. <!doctype html>  
  2. <html dir="ltr" lang="zh-CN">  
  3.     <head>  
  4.         <meta charset="utf-8"/>  
  5.         <meta http-equiv="X-UA-Compatible" content="IE=8">  
  6.         <style type="text/css">  
  7.             table, tr, td, th {  
  8.                 border-collapse: collapse;  
  9.                 border: 1px solid #000;  
  10.             }  
  11.             table {  
  12.                 text-align: right;  
  13.             }  
  14.             td, th {  
  15.                 width: 100px;  
  16.             }  
  17.             th {  
  18.                text-align: inherit;  
  19.             }  
  20.         </style>  
  21.         <title>CSS</title>  
  22.     </head>  
  23.     <body>  
  24.         <table>  
  25.             <tr>  
  26.                 <th>Ruby</th>  
  27.                 <th>Rouvre</th>  
  28.             </tr>  
  29.             <tr>  
  30.                 <td>By</td>  
  31.                 <td>司徒正美</td>  
  32.             </tr>  
  33.         </table>  
  34.     </body>  
  35. </html>  

 

此外还有一些CSS属性是不能继承的,最经典如border系列。它被称之为non-inherited property,如果我们不为它设置,我们只能取得浏览器的默认值,默认值在火狐中被称之为 initial value 。一个相关的好消息是,默认值在火狐也可以指定了,这样我们就不用reset样式了!

下面是non-inherited property的一览表:

  • background
  • border
  • bottom
  • clear
  • display
  • float
  • height
  • left
  • margin
  • outline
  • overflow
  • padding
  • position
  • right
  • top
  • visibility
  • width
  • z-index
XML/HTML代码
  1. <!doctype html>  
  2. <html dir="ltr" lang="zh-CN">  
  3.     <head>  
  4.         <meta charset="utf-8"/>  
  5.         <meta http-equiv="X-UA-Compatible" content="IE=8">  
  6.         <style type="text/css">  
  7.         </style>  
  8.         <script type="text/javascript">  
  9.             function getStyle(el, style){  
  10.                 if(!+"\v1"){  
  11.                     stylestyle = style.replace(/\-(\w)/g, function(all, letter){  
  12.                         return letter.toUpperCase();  
  13.                     });  
  14.                     return el.currentStyle[style];  
  15.                 }else{  
  16.                     return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)  
  17.                 }  
  18.             }  
  19.             var _ = function(id){  
  20.                 return document.getElementById(id);  
  21.             };  
  22.             window.onload = function(){  
  23.                alert(getStyle(_("text2"),"background-color"))  
  24.             }  
  25.         </script>  
  26.   
  27.         <title>CSS</title>  
  28.     </head>  
  29.     <body>  
  30.         <div id ="text" style="width:20em;height:140px;background:#8080c0;padding:2px;border:1px solid red;color:#fff">父元素  
  31.             <div id="text2" style="width:80%;height:4em;color:#b45b3e">子元素</div>  
  32.         </div>  
  33.     </body>  
  34. </html>  

 

我们给父元素设置了背景颜色,没有设置子元素的,这时会取得浏览器的默认值transparent(W3C那一方好像只要是颜色都会转换为rgb格式,多出的a为Alpha)

http://monc.se/kitchen/38/cascading-order-and-inheritance-in-css http://elizabethcastro.com/html/extras/cssref.html

接着我们来看auto,这是一个含糊不清但是有长度概念的值。应用于以下属性:

  • overflow
  • cursor
  • height
  • width
  • marker-offset
  • margin
  • margin-* (left|bottom|top|right|start|end)
  • top
  • bottom
  • left
  • right
  • table-layout
  • z-index
  • -moz-column-width
  • languages

在块级元素的可度量的属性中(如width,height),如果不设置值,其默认值是auto,但它很容易会被父级元素的值覆盖,也就是隐式地成 为了inhert了。在内联元素中,由于不具备盒子模型,如果不设置,就算是火狐也原本奉还它,这对于精确计算元素的宽度与高度是非常不利的。auto还 有对称性,这个在居中布局我们常常运用到它。在非度量的属性中,如overflow,就要具体情况具体分析了。

Yahoo优化网站策略

Yslow是所有使用firefox的用户都应该安装的插件之一吧。最早,yahoo把网站优化的14条策略放在程序里,就以此来测试,后来根据小说《第二十二条军规》,增加到了22条,如今,它已经拥有34条策略了。
帕兰映像上有了翻译,我就不客气的转载了。毕竟让我翻译的,恐怕到明年我都翻译不出来。哈哈

原文来自帕兰映像:http://paranimage.com/yahoo-given-34-web-acceleration/

Yahoo给出的包括Yslow规则(22条)的34条 详细说明 ,通过这此规则对自己页面进行一次全面的分析优化,可以提高你网站的加载速度。

1.Minimize HTTP Requests 减少HTTP请求

图片、CSS、script、flash等等这些都会增加http请求数,减少这些元素的数量就能减少响应时间。把多个JS、CSS在可能的情况下写进一个文件,页面里直接写入图片也是不好的做法,应该写进CSS里,利用 CSS sprites 将小图拼合后利用background来定位。

2.Use a Content Delivery Network 利用CDN技术

CDN 确实是好东西,8过服务器提供商的这项服务一般是要收费的,我以前买的国内空间是有这个的但是我当时根本不知道啥用,现在没了。。。

3.Add an Expires or a Cache-Control Header 设置头文件过期或者静态缓存

浏览器会用缓存来减少http请求数来加快页面加载的时间,如果页面头部加一个很长的过期时间,浏览器就会一直缓存页面里的元素。不过这样如果页面里的东西变动的话就要改名字了,否则用户端不会主动刷新,看自己衡量了~ 这项可以通过修改.htaccess文件来实现。

4.Gzip Components Gzip压缩

Gzip格式是一种很普遍的压缩技术,几乎所有的浏览器都有解压Gzip格式的能力,而且它可以压缩的比例非常大,一般压缩率为85%。压缩没压缩,可以到 这里 做下测试。

5.Put Stylesheets at the Top 把CSS放顶部

让浏览者能尽早的看到网站的完整样式。

6.Put Scripts at the Bottom 把JS放底部

网站呈现完毕后再进行功能设置,当然这些JS要在你的加载过程中不影响内容表现。

7.Avoid CSS Expressions 避免CSS Expressions

CSS表达式很可怕,这个只被IE支持的东西执行时候的运算量非常大,你移动一下鼠标它都要进行重计算的,但有时候为了做浏览器的兼容必须要用到这个||| IE6去死去死!~

8.Make JavaScript and CSS External 将JS和CSS外链

前面讲到了缓存这个事情,一些较为公用的JS和CSS,我们可以使用外链的形式,譬如我就是从Google外链来的Jquery文件,如果我的浏览者在浏览别的使用了这个外链文件的网站时已经下载并缓存了这个文件,那么他在浏览我的网站的时候就不需要再进行下载了!~

9.Reduce DNS Lookups 减少DNS查找

貌似是要减少网站从外部调用资源,我的Google分析和picasa的外链图片都算在里面了。

10.Minify JavaScript and CSS 减小JS和CSS的体积

写JS和CSS都是有技巧的,用最少的代码实现同样的功能,减少空白,增强逻辑性,用缩写方式等等,当然也有不少工具也能够帮你实现这一点。

11. Avoid Redirects 避免重定向

再写入链接时,虽然“http://www. today-s-ooxx. com”和“http://www. today-s-ooxx. com/” 仅有一个最后的“/”只差,但是结果是不同的,服务器需要花时间把前者重定向为后者然后进行跳转,这个要自己注意,也可以在Apache里用Alias 或者mod_rewrite或者DirectorySlash解决。

12. Remove Duplicate Scripts 删除重复脚本

重复调用的代码浏览器并不会识别忽略,而是会再次运算一遍,这当然是大大的浪费。

13. Configure ETags 配置ETags

搞不清楚咋回事,总之我是在. htaccess里把它删除了。

14. Make Ajax Cacheable 缓存Ajax

Ajax是实时响应的,在浏览器接收到新的数据前,旧的数据被缓存,这样能够更好的提高效率。

15. Flush the Buffer Early 尽早的释放缓冲

当用户进行页面请求时,服务器端需要花费200到500毫秒时间来拼合HTML,将写在head与body之间,释放缓冲,这样可以将文件头先发送出去,然后再发送文件内容,提高效率。

16. Use GET for AJAX Requests 用GET方式进行AJAX请求

Get 方法和服务器只有一次交互(发送数据),而 Post 要两次(发送头部再发送数据)。

17. Post-load Components 延迟加载组件

最先加载必须的组件进行页面初始化,然后再加载其他,YUI Image Loader 是很好的例子。

18. Preload components 预加载组件

提前加载以后可能用到的东西,和延迟加载并不冲突,它的目的是为后续请求提供更快的响应,参见Google首页上的CSS sprites应用。

19. Reduce the Number of DOM Elements 减少DOM元素数量

复杂的页面结构意味着更长的下载及响应时间,更合理更高效的使用标签来架构页面,是好的前端的必备条件。

20. Split Components Across Domains 跨域分离组件

页面组件多个来源可以增大你的平行下载量,但注意不要过多,超过2-4个域名会引起上面说到的DNS查找浪费。

21. Minimize the Number of iframes 减少iframe数量

需要更有效的利用 ifames。
iframe 优点:有利于下载缓慢的广告等第三方内容,安全沙箱,并行下载脚本
iframe 缺点:即使为空也会有较大资源消耗,会阻止页面的onload,非语义

22. No 404s 不要出现404页面

站点本身里(非搜索结果)出现404页面,无意义的404页面会影响用户体验并且会消耗服务器资源。

23. Reduce Cookie Size 减小Cookie

Cookie在服务器及浏览器之间的通过文件头进行交换,尽可能减小Cookie体积,设置合理的过期时间,能够很好的提高效率。

24. Use Cookie-free Domains for Components 对组件使用无Cookie的域名

对静态组件的Cookie读取是一种浪费,使用另一个无Cookie的域名来存放你的静态组件式一个好方法,或者也可以在Cookie中只存放带www的域名。

25. Minimize DOM Access 减少DOM的访问次数

JS访问DOM是很慢的,尽量不要用JS来设置页面布局。

26. Develop Smart Event Handlers 开发灵活的事件处理句柄

DOM树上过多的元素被加入事件句柄的话,反应效率肯定会低,YUI事件工具有一个 onAvailable 方法可以帮助你灵活的设置DOM事件句柄

27. Choose < link >over @import 使用< link >而非 @import

在IE中使用@import就和在页面底部用< link >一样,我们前面说要把< link >放顶部的。

28. Avoid Filters 避免过滤器的使用

如果需要Alpha透明,不要使用AlphaImageLoader,它效率低下而且只对IE6及以下的版本适用,用PNG8图片。如果你非要使用,加上_filter以免影响IE7+用户。

29. Optimize Images 优化图片

将你的GIF转为PNG8会是个减小体积的好办法,另外有很多方法处理你的JPG及PNG图片以达到优化效果。

30. Optimize CSS Sprites 优化CSS Sprites

在CSS Sprites中竖直并尽量紧凑的排列图片,尽量将颜色相似的图片排在一起,会减小图片本身的大小及提高页面图片显示速度。

31. Don’t Scale Images in HTML 不要在HTML中缩放图片

图片要用多大的就用多大的,1000X1000的图片被width=”100″ height=”100″以后,本身的KB数是不会减少的。

32. Make favicon. ico Small and Cacheable 缩小favicon. ico的大小并缓存它

站点的浏览器ICO应该不是经常换吧,那就长时间的缓存它,并且最好控制在1K以下。

33. Keep Components under 25K 保证组件在25K以下

iPhone不能缓存25K以上的组件,并且这还是要在被压缩前。

34. Pack Components into a Multipart Document 将组件打包进一个多部分的文档中

就好像在邮件中加入附件一样,一个HTTP请求就够了,但是这一技术需要确保你的代理支持,iPhone就不支持。

Tags: yahoo, 优化, 军规, 策略