26 第1章 HTML5概述 提示 Selectors API不仅仅只是方便,在遍历DOM的时候,Selectors API通常会比以前的子节点
搜索API更快。为了实现快速样式表,浏览器对选择器匹配进行了高度优化。
不难理解为什么W3C中的Selectors API标准规范会从CSS规范中单独分离出来,从上面的代码也可以看出来,Selectors API在样式应用以外同样大有作为。虽然本书不会深入讲解Selectors API的全部细节,但是对于希望优化DOM操作方式的Web开发人员来说,建议使用新的Selectors API以便快速查询应用架构。
1.6.5 JavaScript日志和调试
JavaScript日志和浏览器内调试从技术上讲虽然不属于HTML5的功能,但在过去的几年里,相关工具的发展出现了质的飞跃。第一个可以用来分析Web页面及其所运行脚本的强大工具是一款名为Firebug的Firefox插件。
现在,相同的功能在其他浏览器的内嵌开发工具中也可以找到:Safari的Web Inspector、Google的Chrome开发者工具(Developer Tools)、IE的开发者工具(Developer Tools),以及Opera的Dragonfly。图1-3是Google的Chrome开发者工具截图,显示了大量与当前Web页面相关的信息(使用快捷键Ctrl+Shift+J可以看到),包括调试控制台、资源视图、脚本视图等。
1.6 HTML5的新功能 27 1
2 3 4 5
图1-3 Chrome的开发者工具视图
6 很多调试工具支持设置断点来暂停代码执行、分析程序状态以及查看变量的当前值。
console.log API已经成为JavaScript开发人员记录日志的事实标准。为了便于开发人员查看记录
7 8 到控制台的信息,很多浏览器提供了分栏窗格的视图。console.log API要比alert()好用很多,因为它不会阻塞脚本的执行。
8 1.6.6 window.JSON
JSON是一种相对来说比较新并且正在日益流行的数据交换格式。作为JavsScript语法的一个
9 子集,它将数据表示为对象字面量。由于其语法简单和在JavaScript编程中与生俱来的兼容性,JSON变成了HTML5应用内部数据交换的事实标准。典型的JSON API包含两个函数,parse()和
stringify()(分别用于将字符串序列化成DOM对象和将DOM对象转换成字符串)。
10 11
28 第1章 HTML5概述 如果在旧的浏览器中使用JSON,需要JavaScript库(有些可以从http://json.org找到)。在JavaScript中执行解析和序列化效率往往不高,所以为了提高执行速度,现在新的浏览器原生扩展了对JSON的支持,可以直接通过JavaScript来调用JSON了。这种本地化的JSON对象被纳入了ECMAScript 5标准,成为了下一代JavaScript语言的一部分。它也是ECMAScript 5标准中首批被浏览器支持的功能之一。所有新的浏览器都支持window.JSON,将来JSON必将大量应用于HTML5应用中。
1.6.7 DOM Level 3
事件处理是目前Web应用开发中最令人头疼的部分之一。除了IE以外,绝大多数浏览器都支持处理事件和元素的标准API。早期IE实现的是与最终标准不同的事件模型,而IE9将会支持DOM Level 2和DOM Level 3的特性。如此,在所有支持HTML5的浏览器中,我们终于可以使用相同的代码来实现DOM操作和事件处理了,包括非常重要的addEventListener()和dispatchEvent()方法。
1.6.8 Monkeys、Squirrelfish和其他JavaScript引擎
最新一轮的浏览器创新不仅仅是增加了新的标签和API。最重要的变化之一是主流浏览器中JavaScript/ECMAScript引擎飞快的升级。新的API提供了很多上一代浏览器无法实现的功能,因而脚本引擎整体执行效率的提升,不论对现有的,还是使用了最新HTML5特性的Web应用都有好处。还记得浏览器在显示复杂图像、处理数据或者编辑长篇文章时,明显变得迟钝的情景吗?再
1.6 HTML5的新功能 29 好好想一想。
最近几年,浏览器厂商争相比拼,看谁能开发出更快的JavaScript引擎。过去的JavaScript纯粹是被解释执行,而最新的引擎则直接将脚本编译成原生机器代码,相比2005年前后的浏览器,速度的提升已经不在一个数量级上了。
大约从2006年Adobe将其JIT编译引擎和代号为Tamarin的ECMAScript虚拟机捐赠给Mozilla基金会开始,竞争的序幕就拉开了。尽管新版的Mozilla中Tamarin技术已经所剩无几,但Tamarin
1
2 3 4 5 的捐赠促进了各家浏览器对新脚本引擎的研发,而这些引擎的名字就如同他们声称的性能一样有意思,如表1-5所示。
表1-5 Web浏览器的JavaScript引擎
浏览器引擎
Apple Safari
引擎名称
Nitro(也被称作Squirrel Fish Extreme)
Google Chrome
V8
备 注
Safari 4中发布,在Safari 5中提升性能,包括字节码优化和上下文线程的本地编译器
自从Chrome 2开始,使用了新一代垃圾回收机制,可确保内存高度可扩展而不会发生中断
Microsoft Internet Explorer
Chakra
注重于后台编译和高效的类型系统,速度比IE8快10倍
Mozilla Firefox
J?gerMonkey
从3.5版本优化而来,结合了快速解释和源自追踪树(trace tree)的本地编译
Opera
Carakan
它采用了基于寄存器的字节码和选择性本地编译的方式,声称效率比10.50版本提升了75%
6 7 8 8 9
总之,得益于浏览器厂商间的良性竞争,JavaScript的执行性能越来越接近于本地桌面应用程序。
关于HTML再多说两句
10 11 30 第1章 HTML5概述 “我的名字叫Peter①,说起竞争和疯狂的速度,我非常喜欢跑步。 马拉松是一项伟大的运动,从中可以发现伟大的人。当跑到百公里赛或者165公里长跑的最后阶段时,你真的可以通过一种新的方式来认识一些志同道合的人。因为在这个时候,人们放下了自己的架子,为真正伟大友谊的诞生提供了机会。可以肯定,竞争的因素仍然存在,但更重要的是那份深切的情谊。哦,我有点儿跑题了。 有的比赛我没有时间参加(比如在写这本HTML5的书的时候),但我想知道比赛中我的朋友们表现如何,于是通常会上比赛网站去看。当然了,网站中的‘实时跟踪’功能往往不那么可靠。 几年前,我偶然间遇到一家为欧洲赛事建立的网站,这个网站的思路是完全正确的。他们为跑在前面的运动员安装了GPS定位器,然后在地图上显示出来(本书中我们将使用Geolocation和WebSocket来模拟实现)。尽管事实上执行起来比较麻烦(为了看到最新的数据,用户必须频繁单击‘刷新’),但是我从中仍然看到了难以置信的潜力。 现在,仅仅过了几年,HTML5便通过API的方式为我们提供了建立这类实时比赛网站所需要的工具,例如位置服务应用所需的Geolocation,以及用来支持实时更新的WebSocket。在我看来,毋庸置疑,HTML5冲破了终点线成为了赢家!” ——Peter 1.7 小结
本章概述了HTML5的重要特性。
我们讨论了HTML5的开发历史和即将迎来的几个重要时间点,还讲述了HTML5时代的四个新设计准则:兼容性、实用性、互通性和通用访问性。每项设计准则都打开了一扇大门,同时也宣告了已经过时的惯例和约定的消亡。接着,我们介绍了HTML5令人意想不到的新的无插件范式,回答了每个人都挂在嘴边的问题——HTML5规范到底包括什么,不包括什么,还回顾了HTML5的新特性,例如新的DOCTYPE和字符集声明,许多新的标记元素等,最后我们讨论了JavaScript引擎的竞争。
——————————
① Peter,本书作者之一。——译者注
1.7 小结 31 下一章起,我们开始探索HTML5编程,旅途的起点是Canvas API。
1
2 3 4 5 6 7 8 8 9 10 11