我正在为一个包含许多 DOM 元素的复杂页面编写 jQuery (我无法控制它)。主要目标浏览器是IE7,我担心它的 JavaScript 引擎的速度。我已经编写的脚本很滞后,并且已尽我所能对性能进行了调整。
我可以编写易于维护和理解的脚本,例如使用单个contains
语句。或者我可以通过这个凌乱的 HTML 缩小 DOM 搜索范围来帮助引擎,从而导致更多的复杂性。
在编写 jQuery 脚本时我应该关心浏览器的 JavaScript 引擎的速度吗?
我正在为一个包含许多 DOM 元素的复杂页面编写 jQuery (我无法控制它)。主要目标浏览器是IE7,我担心它的 JavaScript 引擎的速度。我已经编写的脚本很滞后,并且已尽我所能对性能进行了调整。
我可以编写易于维护和理解的脚本,例如使用单个contains
语句。或者我可以通过这个凌乱的 HTML 缩小 DOM 搜索范围来帮助引擎,从而导致更多的复杂性。
在编写 jQuery 脚本时我应该关心浏览器的 JavaScript 引擎的速度吗?
jQuery 是用 JavaScript 编写的。所以你应该关心 JavaScript 引擎的速度,因为它也会影响 jQuery 代码的速度。
关于如何编写更高效的 jQuery 代码有很多技巧和窍门。主要原理是了解 jQuery 是如何工作的,选择器如何转换为从 DOM 中选择元素的查询等。
尽可能尝试使用本机 Javascript 方法而不是 jQuery 方法,您通常会注意到显着的速度改进,尤其是在 IE 中。IE 的 JS 渲染引擎与其他非 sucky 浏览器相比是 SLLLOOOOWWW。
例如,我有一个 AJAX 脚本,它在 FF/Safari 中运行良好,但在 IE 中运行起来就像冷冻糖蜜一样。结果是编写它的开发人员大量使用了 jQuery 的 $.each() 方法从大型 JSON 文件中获取数据。我重写了脚本以使用标准的 JS for() 循环,然后对其进行了一些速度测试,结果表明使用 for() 的速度快了 20 倍。
是的,但你不应该沉迷于它:)
我没有遇到过使用 JQuery 或插件(跨浏览器兼容性,非常有用的功能)的好处被速度降低所抵消的单一实例。我有时会处理相当大的网页。
无论如何,您要知道的唯一方法就是尝试一下。首先以最合理的方式编写代码。如果它太慢,那么你可以考虑优化它。
优化 DOM 遍历
http://www.learningjquery.com/2006/12/quick-tip-optimizing-dom-traversal
包含可能相对较慢,因为我不相信文档模型以任何方式被元素内出现的文本索引。
但是,我不确定尝试过度设计某些东西并优化以进行优化是否明智。选择最简单的方法,如果有问题,可以进行测试,然后进行优化。
不,您不应该关心它,因为它不应该影响您编写代码的方式。
也就是说,您应该始终编写高效的 Javascript,因为这只是一种很好的做法,而且因为对于大多数网站,您不知道任何特定用户正在运行什么浏览器,所以您不妨假设最坏的情况。
是的,您应该担心,但幸运的是,jQuery 团队同样担心:
不要过度优化,而是尽可能多地优化。
If it's slow, then you really have no choice but to go in there and help jquery out. But then if it's not, then why bother.