使用JavaScript开发重大的应用程序从未像今天这般轻松。一款浏览器一套代码、差劲的标准配上差劲的实现、时常如二手货一般慢吞吞的JavaScript引擎,我们总算跟这些倒霉的东西一刀两断了。来看看现代JavaScript环境是怎样的吧。我们将特别关注两个领域:现代浏览器和现代工具。 现代JavaScript取决于现代浏览器的理念。什么是现代浏览器?不同的组织有不同的说法。Google宣称自家的应用能够支持当前和之前的浏览器的主要版本。(就我们所知,Gmail仍能运行在IE9上,这实在是不可思议!)在一篇有趣的文章中,英国广播公司(BBC)网站的工作人员揭示了他们认可的现代浏览器应该支持的功能: (1) document.querySelector()/document.querySelectorAll() (2) window.addEventListener() (3) 存储API(localStorage和sessionStorage) 身为Web世界最流行的JavaScript库,jQuery将其版本划分成了两条支线:一条是1.x,另一条是2.x。前者支持IE6及其后续版本,后者支持如IE9及其后续版本这类“现代”浏览器。没错,IE就是“现代”和“古代”的分水岭。Chrome和Firefox则是快速迭代更新的。尽管Safari和Opera并非如此,但它们的更新速度也要比IE快,但并未获得和IE相近的市场份额。 那么现代浏览器的界线究竟在哪里?唉,这条界线在IE9和IE11之间游移不定。但IE8肯定跟浏览器的历史进步关系不大。它不支持ECMAScript5的大部分特性,也不具备W3C事件处理API,除此之外的不足之处还多着呢。因此,讨论现代浏览器的时候,我们的底线就是IE9。我们不会去花费力气支持浏览器遗老。在涉及相关问题且情况比较简单的时候,我们会给出适合旧版IE的polyfill ,但一般我们都选用IE9作为基础平台。 1.2.1 库的崛起 除了现代浏览器,当前JavaScript环境还有另一个重要方面需要讨论:库。在过去的8年间,JavaScript库无论从数量还是多样性上都呈现爆炸式发展。在GitHub上就有800 000多个与JavaScript相关的仓库,其中近900个超过了1000星。JavaScript库最初只作为工具函数的集合,微不足道。但如今这个生态圈已经进化(多少有些混乱)成为一片充满各种可能性的广阔天地。 这对于我们这些JavaScript开发人员有什么影响呢?嗯,有一种“库即为扩展”(library as expansion)的模型,在这个模型中由库来提供附加的功能——想想Backbone和Angular(后续章节中会讲到)这类MVC库,或是d3、Highcharts这类数据可视化库。库同样能够为那些在浏览器间支持不一的特性提供某种层面上的接口,于是,JavaScript处在一个很有意思的位置上。 长期以来,JavaScript特性在实现形式上可谓五花八门,其中典型的例子就是事件处理。IE有自己的一套事件处理API,其他浏览器则遵循W3C的API。各种库融合了双方所长,并提供了事件处理的统一实现。其中的一些特色鲜明,而最终取得成功的,还是对Ajax、DOM以及其他在浏览器间实现各异的特性进行了功能标准化(normalized functionality)的库。 最为流行的库就是jQuery了。打从它出现,一旦要使用JavaScript新特性,又不愿为浏览器的支持程度而烦心时,jQuery从来都是不二之选。因此不用再考虑IE或者W3C的事件处理了,你只需要使用jQuery的.on()函数,它在各种不一致的实现之上添加了一层包装,提供了统一的接口。还有一些其他的库也提供类似的功能:Dojo、Ext JS、Prototype、YUI、MooTools……这些工具库都旨在为开发人员提供标准化的API。 标准化不仅仅是给出简单的分支代码。库通常会对错误的实现作出改进。函数的标准API在各版本之间变化可能不大,但会存在错误。这些错误有时会修正,有时不会,有时修正还会带来新的错误。而这正是库发挥作用的地方,它能够针对这些错误提供解决或变通的方法。例如jQuery 1.11中就包含了多个修正,解决事件处理API的相关问题。 有些库(尤其是jQuery)还对某些功能提供了全新或不同的实现。作为jQuery库核心的选择器函数先于如今的标准函数querySelector()和querySelectorAll()出现,并推动了这些函数加入JavaScript。尽管底层实现截然不同,但其他库也提供了这类功能。在本书随后我们会看到Ajax全新的跨源资源共享(Cross Origin Resource Sharing,CORS)协议,该协议允许Ajax向页面所在服务器之外的其他服务器发起请求。一些库已经利用CORS实现了这种功能,而且在必要的时候还会回退到JSON-P(JSON with Padding)。 鉴于其功用,一些库已经成为了专业JavaScript程序员标准开发工具的一部分。其中的某些特性可能没有加入JavaScript标准(到目前为止),但这些知识与功能方面的积累毫无疑问能够让我们更轻松、快速地实现设计。近几年,你可以质问jQuery(或是其他库)对于现代浏览器环境下的开发是否真的必要,以此为博客博取点击量。但考虑一下先前BBC的要求,就算提到的那三种方法都可以使用,你肯定也还得实现大量类似jQuery的功能。jQuery还包含了一个经过简化并扩展的DOM接口,负责处理各种边界情况所造成的错误,如果需要支持IE8或早期版本,那么jQuery就是你的主要选择。因此,专业JavaScript程序员一定要留意项目需求,考虑是否值得将jQuery(或者其他类似的库)已经造好的轮子重新再造一遍。 1.2.2 移动,可不只说说而已 在比较旧的JavaScript和Web开发书籍中,你肯定会看到一节或者一章关于如何应对移动浏览(mobile browsing)的内容。移动浏览只占全部浏览量的一小部分,也没有统一的市场,估计只有专业人士才会对移动开发抱有兴趣。但今非昔比。自本书第1版面市以来,移动Web浏览已呈爆发之势,这跟桌面开发完全不同。来看一些统计数据:根据各方来源统计,移动浏览已占整个浏览量的20%~30%。在你阅读这句话的时候,这个数字估计又上升了。这个数字从iPhone问世之后就一直在持续增长。40%以上的移动浏览使用的是iOS的Safari,而安卓的浏览器以及安卓版的Chrome也一直在发展壮大(而且可能已经赶超了Safari,不过这个谁也说不准)。Safari的iOS版和桌面版并不一样,Chrome和Firefox也是如此。移动才是主流。 移动设备上的浏览器提供了新的挑战和机遇。相较于桌面设备,移动设备受到的限制更多(尽管这些差距正在迅速消失)。相反,移动设备拥有新的特性(滑动事件、更精确的地理方位等)和新的交互风格(使用手代替鼠标,滑动滚动)。取决于开发需求,你可能必须创建一个在移动设备和桌面上都同样出色的应用,或是为移动平台重新实现某项已有功能。 在过去几年里,JavaScript世界发生了很多变化。尽管一些API已经标准化,但仍面临着诸多新的挑战。这会对我们这些专业JavaScript程序员造成怎样的影响呢? 1.2.3 何去何从 我们要为自己制订一些标准。目前已经有了一个标准:将IE9作为现代浏览器体验的基础平台。因为其他浏览器能够快速迭代更新,所以也就不用操心了。那怎么应对移动呢?这是个复杂的问题,不过通常可以将iOS 6和安卓4.1(代号Jelly Bean)作为基础平台。移动计算的更新速度和频率要比桌面系统快得多,因此我们能够保证采用移动操作系统的较新版本。 暂时跑一下题,先不讨论浏览器版本、操作系统或是平台,来谈谈你要服务的用户吧。尽管我们可以花上一整天来引用各种统计数据,但最有价值的数据是与你的用户相关的那些,而非泛泛意义上的用户数据。也许你在为老板做设计,而他用的是IE10;或者你构思的应用严重依赖于只有Chrome才提供的一些特性;又或是压根就没有桌面版,你的发布对象就是iPad和安卓平板电脑。考虑清楚你的目标用户。本书在编写之时就考虑到了要具备广泛的适用性,你的应用程序也该如此。如果还要花时间为平板独占的应用去操心IE9中的问题,那岂不是太蠢了吗?好了,现在回到我们的标准上来。 对于屏幕截图和测试,本书通常倾向于使用Google Chrome。偶尔在必要的时候,我们会在Firefox和IE中演示代码。对于开发人员而言,Chrome就是黄金标准,尽管在用户友好度上未必够格,但在为程序员展现相关信息方面绝对当之无愧。在第2章我们会看到各种开发者工具,除了深入学习Chrome之外,还会研究Firefox(包括和不包括Firebug插件)和IE。 我们选择的标准库是jQuery。当然还有很多其他选择,但jQuery胜在两个方面:首先,它是网上最流行的通用JavaScript库;其次,本书作者中起码有一位(John Resig)和jQuery还有点渊源,这使另一位作者(John Paxton)在是否选用jQuery的问题上做出了让步。在更新本书的过程中,我们使用jQuery库对上一版中采用的不少技术进行了替换。我们可不打算在这件事上重新造轮子。我们会根据需要来讨论适合的jQuery功能,当然也不会错过令人激动的新技术。 在JavaScript崛起的带动下,JavaScript IDE在这几年也取得了显著发展。各种IDE数不胜数,无法在这里一一列举,但其中有几款值得注意。John Resig使用高度定制化的vim作为自己的开发环境。John Paxton就没这么勤劳了,他选择的是JetBrain公司旗下极为出色的WebStorm(http://www.jetbrains.com/webstorm/)。Adobe推出了一款免费开源的Brackets IDE(http://brackets. io/),目前版本为1.3。Eclipse也可供选择。还有不少人反映定制化的SublimeText和Emacs也挺不错。和往常一样,你觉得哪款用起来舒服就用哪款。 还有其他一些工具也能够协助我们进行JavaScript开发,这里就不再列出了,后面会用专门一章来进行介绍。现在该描述一下接下来的内容了。
精通JavaScript(第2版)——1.2 现代JavaScript
书名: 精通JavaScript(第2版)
作者:
出版社: 人民邮电出版社
译者: 门 佳 | 李 伟 | [美] Russ Ferguson
出版年: 2016-9
页数: 168
定价: 45.00元
装帧: 平装
ISBN: 9787115432865