《JavaScript忍者秘籍》——1.3 跨浏览器注意事项

1.3 跨浏览器注意事项

完善JavaScript编程技能将引导我们不断前行,尤其是目前,除了浏览器端以外,JavaScript还能够使用Rhino、V8或Node.js库等JavaScript引擎在服务器端运行。但开发基于浏览器的JavaScript应用程序(这也是本书的重点)时,越早越好的是,我们首先要应对:浏览器及其令人恼火的问题和矛盾。

理想世界中,所有的浏览器中都没有bug,并且支持以一致的方式支持Web标准,但是我们都知道我们并不生活在这种世界里。

近来浏览器的质量已经有了大大改善,但仍有一些bug、缺失的API和不同浏览器的特定缺陷,我们需要解决这些问题。制定解决这些浏览器问题的综合性策略并熟悉不同浏览器之间的区别和缺陷,和精通JavaScript本身同等重要。

对于这些差异,在编写浏览器应用程序或JavaScript库时,决定支持哪些浏览器是一个重要考虑事项。我们可能想支持所有的浏览器,但却受限于开发和测试的资源限制。那么,我们如何决定支持哪些浏览器,支持到什么程度?

有一个方法,是来自古老Yahoo!的一个松耦合方式,称为分级浏览器支持(graded browser support)。在这种技术中,我们创建一个浏览器支持矩阵,作为记录浏览器和其平台的重要性的快照。

在这样一个表格中,我们在一个轴上列出目标平台,在另外一个轴上列出浏览器。然后,在每个单元格中,对每个浏览器/平台组合,我们给出一个“等级”(从A到F,或者是其他能够满足我们需要的评分系统)。表1.1展示了一个这样的例子。

注意,我们还没有填写任何等级。如何对特定平台和浏览器分配等级,完全取决于项目的需要和需求,以及其他重要的因素,例如目标受众的组成。使用这种方式,我们制定出相应平台/浏览器重要性的等级,并将这些信息和成本进行结合,尝试找出最优化的浏览器支持。我们将在第11章更深入地探索这些内容。

由于支持大部分的平台和浏览器组合是不切实际的,因此我们必须权衡支持各种浏览器的成本与收益。任何类似的分析,都必须要考虑多个因素,主要有如下几点。

  • 目标受众的期望和需求。
  • 浏览器的市场份额。
  • 支持该浏览器所需的工作量。

第一点是主观的,只有具体项目才能够确定。第二点是市场份额,可以通过互联网信息得到。支持每个浏览器的工作量,可以通过考虑该浏览器的功能和对现代浏览器标准的遵守情况进行粗略估计。

图1.2所示的图表,展示了主流浏览器的使用情况(信息来自2012年8月的StatCounter)以及我们对排名靠前的桌面浏览器开发成本的个人建议。

图表以“收益”与“成本”的方式进行展示,大概一看就可以知道怎么做“最划算”。跳出该图表,如下还有几点要注意的事项。

  • 尽管与标准兼容的浏览器相比,支持IE 7和IE 8需要更多的工作量,但它们仍然有很大的市场份额,如果这些用户是我们程序的一个重要目标观众,那么这些额外的工作就是值得的。
  • IE 9,在标准兼容性方面取得明显进展,与之前的IE版本相比更容易得到支持,并已经取得了一定的市场份额。
  • 支持Firefox和Chrome是显而易见的,因为它们有很大的市场份额,并且很容易支持。
  • 尽管Safari浏览器的市场份额相对较低,它仍然值得支持,因为它符合标准的特性使得其支持成本很小(作为一个经验法则,如果能在Chrome浏览器下使用,那也就能在Safari下使用——尽管是在推理情况下)。
  • Opera,虽然需要的工作量比Safari还少,但因为它的市场份额很小,所以可以从桌面浏览器市场上忽略它。但如果移动平台对你来说很重要,移动版的Opera则可以发挥更大的作用,如图1.3所示。

  • 对于IE 6,真的没什么可说的了。

看一下移动市场,情况就完全不同了,如图1.3所示。

当然,任何事情都不是那么枯燥。也许更恰当的说法是,好处比成本更重要,但这最终要看决策者的选择,他们要考虑市场需求和其他业务问题等因素来制定决策。但量化成本和收益是做出这些重要支持决策的一个良好起点。

另外,要注意,市场份额和支持成本的变化是很迅速的。

资源受限组织的另一个潜在因素是开发团队的技能。开发应用程序的主要原因就是让最终用户使用,开发人员可能需要发展必要的技能来开发该应用程序,以满足最终用户的需求。在成本分析阶段就需要考虑这些因素。

跨浏览器开发的成本,主要取决于开发人员的技能和经验,而本书的目的就是提高开发人员的技术水平,所以让我们首先来看一下当前的最佳实践。

时间: 2024-09-14 15:57:33

《JavaScript忍者秘籍》——1.3 跨浏览器注意事项的相关文章

《JavaScript忍者秘籍》——第1章 进入忍者世界 1.1即将探索的JavaScript库

第1章 进入忍者世界 本章涵盖以下内容: 介绍本书的目的和结构 将要关注的库 什么才是JavaScript高级编程 跨浏览器编程 测试套件示例 如果你正在阅读本书,应该知道,没有什么简单方法可以创建有效且跨浏览器的JavaScript 代码,除了编写整洁代码的常规挑战外,我们还要额外应对各种浏览器的差异和复杂性.为了应对这些挑战,JavaScript开发人员通常使用JavaScript库来实现通用和可重用的功能. 这些库虽然在方法.内容和复杂性方面有很大差异,但唯一不变的是:它们都需要简单易用,

《JavaScript忍者秘籍》——导读

**前言**Web应用程序将为用户提供丰富的用户界面体验,没有JavaScript,我们也就只能显示几张小图片.Web开发人员比以往任何时候都更需要熟练掌握能够为Web应用程序带来生命的语言. 像橙汁和早餐一样,JavaScript不再只用于浏览器了.该语言推倒了浏览器的界限,可用在Rhino和V8等引擎的服务器上,也可以用于像node.js这样的框架. 虽然本书主要是介绍用于Web应用程序的JavaScript,但本书第二部分提出的JavaScript基础适用范围也很广泛. 随着使用JavaS

《JavaScript忍者秘籍》——2.3 测试框架

2.3 测试框架 测试套件应该作为基本开发流程的一部分,所以应该选择一个非常适合自己代码风格和代码库的测试套件.一个JavaScript测试套件应该满足一个唯一需求:显示测试的结果,以便很容易地确定哪些测试通过的,哪些是失败的.测试框架可以帮助我们达到这一目标,除了创建测试并将其组织到测试套件中以外,不用再担心别的事情. 根据测试的需要,我们可以从JavaScript测试框架中找到很多功能.其中一些功能包括: 能够模拟浏览器行为(单击按键等). 测试的交互式控制(暂停和恢复测试). 处理异步测试

《JavaScript忍者秘籍》——第2章 利用测试和调试武装 自己2.1 调试代码

第2章 利用测试和调试武装 自己 本章涵盖以下内容. JavaScript代码调试工具 测试用例生成技术 构建测试套集 如何测试异步操作 为代码构建有效的测试套件是非常重要的,所以在我们进入任何编码之前,要首先对它进行讨论.和可靠的测试策略同样重要的是要对所有代码进行测试,外部因素有可能影响代码的操作效果这点十分重要,这正是我们在跨浏览器JavaScript开发时要面对的情况. 我们不仅要处理典型问题:确保代码质量,尤其是与多位同时编写一段代码的开发人员打交道时,并避免出现会破坏API的回归错误

《JavaScript忍者秘籍》——1.4 当前最佳实践

1.4 当前最佳实践 掌握JavaScript语言和跨浏览器编码问题是成为Web应用程序开发专家的重要条件,但它们并不是全部.要进军专家行列,还需要秀出以下很多开发人员之前都已经掌握的高质量代码.我们将在第2章深入研究这些被称为最佳实践(best practices)的特征,除了熟练掌握语言外,还包括如下元素. 测试. 性能分析. 调试技巧. 在我们的编程过程中,时常遵守这些最佳实践是极其重要的:跨浏览器开发的复杂性也直接证明了这一点.让我们来看看这些实践. 1.4.1 当前最佳实践:测试在本书

《JavaScript忍者秘籍》——1.5 总结

1.5 总结 以下是我们在本章所学到的内容. 跨浏览器的Web应用程序开发是困难的,比大多数人想象的都要难. 为了圆满完成跨浏览器开发,我们不仅要掌握JavaScript语言,还要全面了解浏览器以及它们的怪异模式和矛盾,并要具备当前最佳实践方面的良好基础. JavaScript开发毋庸置疑是很具有挑战性的,但有一些勇敢者已经沿着这条曲折的道路走了下来,那就是JavaScript库的开发者.我们将提炼这些代码库中的知识,有效地提高我们的开发技能,并将这些技能提升到世界一流水平. 这些探索肯定会很有

《JavaScript忍者秘籍》——1.2 理解JavaScript语言

1.2 理解JavaScript语言 很多JavaScript程序员,在工作中不断进步,直到能够熟练使用大量的JavaScript语言元素,包括对象.函数(如果他们始终关注编码趋势)甚至是匿名内联函数.然而,在许多情况下,这些技巧可能并没有超出基础水平.此外,这些程序员,通常对JavaScript中闭包(closures)的目的和实现有着非常匮乏的理解,而闭包从根本上例证了函数对于该语言的重要性. JavaScript中,对象.函数和闭包之间有着很密切的关系(如图1.1所示).理解这三个概念之间

《JavaScript忍者秘籍》——第2章 利用测试和调试武装自己 2.1调试代码

第2章 利用测试和调试武装自己 本章涵盖以下内容. JavaScript代码调试工具 测试用例生成技术 构建测试套集 如何测试异步操作 为代码构建有效的测试套件是非常重要的,所以在我们进入任何编码之前,要首先对它进行讨论.和可靠的测试策略同样重要的是要对所有代码进行测试,外部因素有可能影响代码的操作效果这点十分重要,这正是我们在跨浏览器JavaScript开发时要面对的情况. 我们不仅要处理典型问题:确保代码质量,尤其是与多位同时编写一段代码的开发人员打交道时,并避免出现会破坏API的回归错误(

《JavaScript忍者秘籍》——2.5 总结

2.5 总结 在这一章中,我们已经学习了一些与调试JavaScript代码相关的基本技术,以及基于这些结果构建简单的测试用例. 我们研究了在代码执行时,如何使用日志记录来观察代码的行为,我们甚至实现了一个方便的方法,可以确保在现代和传统浏览器上都能够成功记录日志,不管它们之间有多少差异. 我们探索了如何使用断点,在特定的代码行上停止代码的执行,以便能够了解代码执行时的状态. 然后学习了测试用例生成,定义并关注良好测试的特性:可重复性(repeatability).简单性(simplicity)和