下一代 web:HTML5——我们能等到真正的标准吗?
简介
下一代的 web 系列,第二篇:HTML5——我们能等到真正的标准吗?
注:自己感觉本篇的意义不如上一篇大,主要是回顾这些年来浏览器和各种 web 平台、技术的斗争历史。
本地存储相关的 API 作为最新的 HTML5 规范草案的一部分,我们在上个星期看到一些浏览器和插件已经开始采纳这些 API。虽然 Gears、Opera 还有 Webkit 都已经实现了结构化存储部分的 API,但是 HTML5 规范里其他的部分当前还都没有怎么实现,而且前途不明。HTML5 尽了最大的努力来让所有的浏览器都统一在一个单一且标准化的标记语言和一系列 API 下——但是 微软、Adobe 和 其他的领先者们都有了自己的下一代 web 技术,那么我们还能看到真正的 HTML5 标准吗?
历史的教训
在适用范围和成果方面,HTML5的成果与历史上早期的 HTML 3.0 规范 有所相似。返回到 1995 年 4 月,开始起草 HTML 3.0 规范,其目的是向后兼容 HTML 2.0 并且添加新的特性(例如表格)。当时 W3C 刚刚成立,这个新工作组要完成的第一批规范之一就是 HTML 3.0 规范。 在那个时候,浏览器大战即将爆发,当时 Navigator 才发布了五个月,却占有了 80% 的市场份额。微软却才注意到这点,然后仓促的开始开发 Internet Explorer 1.0,并在几个月后发布。
在 1995 年,不同的浏览器支持不同系列的标记——一直到现在还是这样。随着 Navigator 1.1 新版本的发布,网景突飞猛进,而且还实现了表格、浮动图片和其他的导航元素(例如点击过的链接)。IE 1 是一个完全改造过的浏览器,因为它采用了最大化渲染的方法,就是说,如果 IE 无法确定用户对 HTML 所期望的表现,就尽量猜测并且显示猜测结果。 这导致了很多类似标签不匹配的问题(例如 <b><p>Header</b></p>)出现,因为 IE 能够自动纠错,所以这些问题又导致开发者变得懒惰。
随着 Internet Explorer 的市场占有率持续上升,以及网景和微软各自浏览器的每一次发布和更新,两个浏览器的距离越来越大,市场也随之分成了两个坚固的阵营。以前以 RFC 形式出现的,现在叫做 HTML 的规范,本来的目的是重新统一浏览器,并且让浏览器已经支持的新功能规范化。但是在规范制定者中经常会弥漫着剑拔弩张的气氛,争论究竟哪个浏览器—— Navigator 还是 Explorer——对新功能实现的更好。例如,Navigator 和 Explorer 对图片映射图的实现方式就很不一样,而且还互不兼容。微软要为制造那些混乱的 HTML 标签所负责,例如使用 <top> 和 <bottom> 标签来定义页面中不变的部分(拜网景所赐,这些标签后来演变成了很不友好的框架标签)。
问题不在于新功能无序的开发,而是两个竞争激烈的浏览器都在实现各自版本的 web,以保卫自己的市场份额并且或者更多的控制权。最后,网景和微软都放弃实现正统的 HTML 3.0 规范,例如网景声明:
网景承诺继续支持 HTML 3.0。出于这样的原因,我们走在了前面,采纳了一些更加成熟的方案,我们希望这些方案能够被认可。我们坚信网景 Navigator 2.0 比其他的任何一个商用客户端对 HTML 3.0 规范支持的更好。
此外,我们在网景 Navigator 中增加了一些现在还未被 HTML 3.0 规范包含的新功能。我们认为这些新功能应该被加进去,作为标准流程的一部分,我们正在提议标准加入这些新功能
网景非常享受他在浏览器市场上的事实垄断地位(据估算约有 90%),这让网景可以通过引入非官方的,或者所谓的“扩展”标签来加固它的垄断地位。结果导致 web 上充斥着只能在 Navigator 里面正确的浏览的垃圾页面。等到其他的浏览器追上来的时候,网景完成了更多这样的扩展。
但是持续了不长时间,微软就厌倦了这种玩法。新的发行版甚至都不提及 HTML 而是改为讨论构建在微软技术上的 web:
微软 Internet Explorer 3.0 是第一个集成了ActiveXTM 技术的英特网客户端,这项技术能让开发者能够在英特网上创建具有很高交互性的程序和内容。这些技术能够让万维网站变得丰富、互动,就像动作游戏、多媒体百科全书或者生产力应用程序那样。有史以来,网站第一次不再被技术所限制,而仅仅受限于作者想象力。
浏览器大战爆发了快一年的时候,战争从对 HTML 标签支持的斗争升级到了开发富客户端程序的格式和语言之争。在 1996 年 8 月,随着 Internet Explorer 3.0 的发布,Javascript(网景私有的客户端脚本语言)和 ActiveX(微软私有的对象容器)之间的斗争一触即发。
这个故事剩下的部分就是微软在哪里取得胜利的,以及更重要的,微软是怎么赢的,然后浏览器大战已经成为了历史。由于 Web 分裂的很严重,其影响持续了十几年,浪费了开发者很多的时间去开发跨浏览器技巧和各种库。尽管微软得到了浏览器市场的控制权,而且一直不遗余力的推销它私有的用于构建 web 程序的多层技术,但是不知怎么的,最简单的 HTML、Javascript 和 CSS 却赢得了广泛的支持,而且 Web 2.0 也没有构建在 ActiveX 的基础上。
十年后
随着网景逐渐消失并且被 Firefox 替代,今天的 web 大战不仅仅发生在浏览器之间,而且还发生在新 web 平台和技术之间。据估计,Internet Explorer 的市场占有率已经降到了 78%(2004 年达到了最高的 95% 市场占有率),同时 Firefox 占有 16%,Safari、Opera 和其他的浏览器共同占有剩下的 6%。1999 年 HTML 4.01 规范发布,因为大部分浏览器都内置了对该规范的支持使得该规范成为 ISO 标准。HTML 4.01 一直是支持的最广泛、最好的 HTML 标准,不过现在的问题已经转移到了其他的 web 技术上,尤其是 CSS 和 DOM 访问。
在现在被称之为 Web 2.0 领域内,上千个富 web 程序都是使用 HTML、CSS 和 XML 开发的——通常称之为 AJAX(很讽刺的是,AJAX中的 A 和 X 部分最开始时是 Internet Explorer 的私有插件,以 xmlhttprequest 的形式出现的)。虽然 AJAX 程序很快就达到了当前技术所能实现的极限,但是这些程序缩短了桌面程序和 web 程序之间的距离。很多厂商都发布了他们支持的 web 客户端平台作为浏览器之上的一层,例如 Adobe 开发的 Flash、微软开发的 Silverlight 等,这给开发者展示了一个丰富多彩的,开发类桌面化的 web 程序的开发环境。这些新的平台通过在现在的浏览器基础上增加插件来生效,由于这些商业解决方案的发布,导致当下没有一个合适的、开源的、基于开放标准的、超过 AJAX 的替代品出现。
在 W3,一组浏览器开发者受挫于 HTML5 缓慢的进展,他们独立出去成立了 WHATWG 小组以促进该规范的开发。HTML5 的首要任务就是认清楚现状,那就是从最初的 HTML 规范发布以来,web已经发生了翻天覆地的变化,现在的 web 程序能够展示非常复杂的用户界面,能够利用更多的高级系统功能(以界面为例,Silverlight 使用 XAML,Flex/Flash 使用 MXML)。该标准开始成为 Web Applications 1.0,这个宽泛概念不仅包括有新的 HTML5 规范,还包括了其他相关的规范,例如 CSS2、DOM5、ECMAv4 和新的 API 调用(例如本地浏览器存储)。
WHATWG 工作组最终(4年后)又返回了 W3,微软也重新投入了力量。与此同时,开发者如果要搜索不是 AJAX 的富 web 程序平台,只会得到很少的结果,除非他们投入微软或者 Adobe 的怀抱。HTML5 规范的实现进展非常缓慢,直到 Google 意识到微软和 Adobe 正在统治 web 的威胁并且通过开发 Gears 介入才有所改观。Gears 是 Google 匆忙的在浏览器上实现 HTML5 的产物,他们使用 Gmail 和 Reader 这些自己的程序一步步的支持这些新的 API 调用
苹果是另外一家全力支持使用非 HTML5 的开放技术开发富网络程序的公司。就在几年前,访问苹果主公司主页的浏览者所看见的是充斥着 Flash 和 PDF 文件的页面。现在,苹果拥有了 Safari——他们自己的基于开放标准的浏览器,并且支持 Webkit 这个开源项目。苹果使用 AJAX 而不是 Flash 这样的私有技术重新开发了他们的网站和程序,他们通过这样的方式来支持免费且开放的技术。
我们又回到了 1996 年,只不过现在 HTML5 成了新的 HTML 3.0,当时只有两个主要浏览器厂商,而现在有很多的团体都对决定新的 web API 和虚拟机的样子充满兴趣。在这一九十年代的事件里,开放标准赢得了最终的胜利——微软和 Adobe 意识到这点后他们都公开了一些各自平台源代码和 API 细节。
Web 历史告诉我们,在通常情况下,只会有一个胜出者,然后所有的用户都逐渐迁移到这个胜出的解决方案上,并且使之成为一个标准(回想一下很多现在的“标准”最初都是私有技术)。尽管类似 Windows 操作系统这样的标准和类似 HTML5 这样的开放标准之间的差异巨大——但是类似 Google 和苹果这样的公司要面对的最大的威胁就是历史的重演。