2007年W3C(万维网联盟)立项HTML5,直至2014年10月底,这个长达八年的规范终于正式封稿。
  过去这些年,HTML5颠覆了PC互联网的格局,优化了移动互联网的体验,接下来,HTML5将颠覆原生App世界。这听起来有点危言耸听,但若认真分析HTML5的发展史,你会发现,这个世界的发展趋势确实是这样。
  熟知历史才能预知未来,先让我们来看看HTML5为什么诞生、这8年是怎么过来的。

  HTML5的诞生自W3C于1999年发布HTML4后,Web世界快速发展,一片繁荣。人们一度认为HTML标准不需要升级了。一些致力于发展Web App的公司另行成立了WHATWG组织,直到2007年,W3C从WHATWG接手相关工作,重新开始发展HTML5。
  HTML5的发展史,有用户的需求在推动,有技术开发者的需求在推动,更有巨大的商业利益在推动。
  在互联网的早期,对用户而言,能打开浏览器接入到互联网世界是一个神奇的事情,但互联网发展到2005年前后,开始出现下一个变化,是宽带互联。
  随着宽带的普及和电脑性能的增强,人们不再满足于单纯的通过互联网看新闻、收发邮件,消耗更高带宽的娱乐产品开始出现,是流视频和网页游戏。其实视频和游戏是古老的需求,在互联网不普及的时候,需求的满足方式是离线传输的VCD和游戏光盘;后来互联网逐渐普及,人们更改了使用方式,通过下载软件+本地媒体播放器来看视频,下载体积较大的端游玩游戏。
  但是对消费者体验更好的新方式还是出现并颠覆了以前的一切,那是流媒体和网页游戏。YouTube等公司把握住潮流飞速崛起,各种页游公司也如雨后春笋。
  但是HTML标准没有把握住产业的变化及时演进,浏览器产品也未升级,这块新需求被浏览器插件满足了,那是Flash。这个部署在亿万浏览器里的商业插件俨然成为事实标准。2005年Adobe巨资收购Macromedia,把Flash收归旗下,紧接着大幅推广FLV流媒体和action script语言,很明显这桩收购可以列为IT并购的经典案例,FLV流媒体和Flash游戏风靡互联网,Adobe在新的产业升级中攫取了大量的利润。
  除了Flash这个商业产品成为了事实标准,W3C还面临一个尴尬,是另一个私有扩展协议的制造者—IE。IE当时在桌面浏览器占有垄断地位,并且扩展了大量的IE Only语法,开发者完全不知道这些语言是谁定义的。整个Web世界,被两家公司微软+Adobe绑架了。
  很多IT巨头都坐不住了,尤其是苹果和Google。PC操作系统的世界难有突破,Web浏览器被苹果寄予厚望,而且第一代iPhone只支持网页,那时还没有Appstore,Safari是乔布斯非常看重的产品;新贵Google虽然大量赞助Mozilla,但并未对IE的地位产生实质影响,收购了YouTube后发现底层被Adobe控制,也是非常难过,而且Google每年给IE的搜索框和Adoble FLV缴纳的费用真不是小数目。
  既然大家都是W3C的主席单位,好吧,我们重新开始做HTML5吧。
  是的,HTML5其实是这么诞生的。那是2007年,IE和Flash由盛转衰的转折点。
  HTML5第一阶段:Web增强与破垄断自HTML5诞生以来,一共经历了两个阶段,分别是Web增强和移动互联网。我们先从Web增强说起。
  Web体验的丰富增强主要表现在:1.WebApp,比如Gmail;2.流媒体;3.游戏。我们这3个方面来讲HTML5做了什么。
  WebApp:HTML5新增了离线存储、更丰富的表单(比如Input type=date)、JS线程、socket王乐、标准扩展embed、以及很多CSS3新语法…
  流媒体:HTML5新增了Audio、Video
  游戏:HTML5新增了Canvas、WebGL
  当然还有Google努力在HTML5中推进Header和Section等标签,以利于搜索引擎分析,这些不多述。
  HTML5补充流媒体和游戏能力后,加上苹果强势拒绝在iOS上引入Flash,成功的遏制了Flash的发展,然后该遏制IE私有语法了。
  在HTML5标准的升级过程中,苹果和Google同时也看到了浏览器市场重新洗牌的机会,他们一方面参与HTML5的规范,一边在浏览器产品上发力。Apple首先开始大力发展Safari,建立WebKit开源项目,Mac、iOS、Windows多平台齐发力;Google起初是赞助Mozilla开发Firefox,后来自己开发了v8引擎,合并WebKit,于2008年正式推出Chrome。“IE的私有规范+Flash不是标准,我们才是标准”这样的口号在新一代浏览器大战中打响,IE瞬间成为千夫所指的垄断代表,甚至成了阻碍Web发展的罪人(当时IE6已数年未更新,并且丝毫不惧Firefox的发展)。
  偏偏微软此时也出了晕招,推出了一系列即不完整支持规范又互相不兼容的IE7、8、9、10,彻底失去了开发者的心。
  Adobe的Flash被遏制,与Web霸主的位子擦肩而过;IE的私有标准被遏制,并且造成IE市场份额不停下滑,直到IE新的移动版本反过来开始支持WebKit私有语法,真是令人唏嘘。不知道HTML6是不是该打倒WebKit垄断了。
  HTML5第二阶段:移动互联网随着Chrome和Safari的高歌猛进,以及IE+Flash的衰落,HTML5告一段落,进入了下一个时代——移动互联网。HTML5的跨平台优势在移动互联网时代被进一步凸显。HTML5是一个通吃PC、Mac、iPhone、iPad、Android、Windows Phone等主流平台的跨平台语言。Java和Flash都曾梦想这个位置,但梦断于iOS。此时人们纷纷开始研究基于HTML5开发跨平台手机应用。很多人当时认为,原生应用只是过渡,像当年从C/S结构转变为B/S结构一样。而且学习Objective-C和Java很费劲,我既然会网页开发,为何不试试HTML5。
  W3C此时成立了Device API工作组,为HTML5扩展了Camera、GPS等手机特有的API,然而麻烦的是,移动互联网初期的迭代太快了,手机OS在不停的扩展硬件API,陀螺仪、距离感应器、气压计。。。每年手机OS都有大版本更新。而W3C作为一个数百家会员单位共同决策的组织,从标准草案的提出到达成一致是非常复杂的过程,跟不上移动互联网初期的快速迭代。
  PhoneGap的出现,给开发者打开了一扇窗。很多人期待PhoneGap不停扩展API,来补充浏览器的不足。Adobe看到PhoneGap仿佛看到了重振江湖地位的希望,但在Adobe收购PhoneGap后,又发现这个东西可商用性不足,而且开源使得Adobe无法像Flash那样获取商业利益,于是把PhoneGap捐给了Apache,改名为Cordova。
  因为各种原因,Cordova的定位终没有成为浏览器的强化,而走向了混合式开发。基于当时的背景,他们认为原生是不可替代的,“原生+HTML5”的混合模式更有意义。所以现在Cordova的使用模型是“原生工程师+HTML5工程师”一起协作完成App。
  这时Facebook加入了W3C,牵头成立了Mobile Web工作组。Facebook是混Web圈的,并且在手机OS上没有自己的领地,他不喜欢被苹果和Google掌控的原生应用生态系统。Mobile Web这个工作组的重要目标是让HTML5开发的网页应用达到原生应用的体验。然而,事与愿违,它不努力也算了,结果是努力了却失败了。2012年,Facebook放弃了HTML5的新闻充斥了全世界的IT媒体,HTML5瞬间被打入冷宫。
  Facebook为何放弃HTML5?核心是当时基于HTML5真的做不出好的移动App。对比Twritter等竞争对手的原生App,Facebook的HTML5版本实在无法让用户满意。比如Push功能,到现在HTML5的推送和原生的推送体验差距依然巨大,更不用说HTML5应用的页面切换白屏、下拉刷新/侧滑菜单不流畅等众多问题。看着原生工程师轻松实现摇一摇、二维码、语音输入、分享到朋友圈等功能,更是让HTML5工程师感觉自己站错了队。
  即使Facebook不喜欢被控制,也不能拿被用户抛弃来冒险。而且Facebook并没有掌握关键点—手机浏览器内核。如果浏览器不跟上,徒然定一堆标准草案落不了地。
  而浏览器在手机上的表现是什么呢?先看Google,Chrome性能虽高,但Android上的浏览器却并非Chrome,而是WebKit改出来的一个蹩脚的Android浏览器;再看苹果,iOS上不允许其他浏览器引擎上架App Store,而且其他使用Safari引擎的应用也无法调用苹果自己的JavaScript加速引擎Nitro。结果是苹果和Google不但不在浏览器上积极实现HTML5关于移动App所需的规范,反而对HTML5做出种种限制。
  不管是当时硬件能力不足,还是手机OS厂商的故意限制,总之结果是:在移动互联网的初期,一定是原生应用生态系统的天下,iOS和Android首先自己的地盘稳固后,产业才会向下个阶段升级。
  Facebook也好,PhoneGap也好,想在移动互联网初期分一杯羹是分不到的,但坚持下来,机会往往会出现。
  HTML5这回真的来了终于,在2014年10月底,W3C宣布HTML5正式定稿。这个时间,不晚不早,硬件性能更强、手机OS迭代速度下降。
  随着HTML5标准定稿,一切纷争将告一段落,现在,属于HTML5的时代到来了。
  有人说,光标准定稿没用啊,配套起来了吗?HTML5做的应用究竟能否匹敌原生App?答案是,HTML5不但可以匹敌原生App,甚至它天然的很多特性超越了原生App。
  我们先谈谈HTML5原来不如原生应用的地方,业内俗称HTML5有“性工能”障碍。即HTML5性能不如原生、开发工具不如原生、能力调用不如原生。

  这几个问题导致开发者无法使用HTML5做出与原生一样的App。然而,不管是硬件升级还是OS厂商策略变化,以及相关软件技术的成熟,已解决了HTML5的“性工能”障碍。
  1.硬件升级
  2011年,iPhone 4s的CPU是A5,现在iPhone 6是A8,按苹果的历次发布会的说法,速度共提升了7.5倍。这3年间7.5倍的速度提升,抹平了太多HTML5的性能问题。
  2.苹果、Google的策略变化
  Google在2013年底发布的Android 4.4,内置的Webview不再是蹩脚的Android WebKit浏览器,而是Chromium,性能大幅提升。从新的Android 5.0开始,Webview可以通过Google Play Store实时更新,和Chrome的升级保持一致,用户可以不刷机享受到新的浏览器引擎;再看Apple方面,2012年iPhone 5发布后,HTML5在iOS上的表现已令人满意,Safari的JavaScript加速引擎Nitro不再那么重要,不过在iOS 8发布后,苹果还是很识趣地取消了三方程序调用Nitro的限制,现在任意浏览器或应用调用iOS的UIWebview都可以利用Nitro加速,这样在前端使用JS做大型运算也成为可能。两大手机操作系统霸主和浏览器巨头的态度发生了变化,使得HTML5在手机上的发展不再受限,而且这个变化不可逆只能继续向前,这种变化势必会产生深远的影响。
  3.软件技术的成熟
  PhoneGap的发展虽然放缓了,但其他产品技术却成熟了。2014年的iWeb大会上,众多厂商的产品提供了面向开发者免费或开源的HTML5性工能障碍的解决方案。
  (注:作者作为从业人员,也会在分析各种方案时提到我们公司的方案,但作者会客观不夸张的陈述方案,而且该方案是纯免费的,没有商业销售嫌疑。)
  DCloud公司在iWeb大会上发布了系统的HTML5“性工能缺失”的解决方案,包括:
  a)性能:提升HTML5性能的手机端引擎,让侧滑菜单、下拉刷新等动态交互卡顿的问题得以解决;
  b)工具:HTML5开发IDE产品HBuilder,超快的编程利器;
  c)能力:把40万原生API封装成JavaScript对象,以解决HTML5能力不足问题的Native.js技术;
  d)接近原生体验的高性能框架:MUI框架,体积只有几十K,加载、运行远快于一般框架。基于该方案开发的HTML5应用完全可以达到原生App的功能和体验。