【问题标题】:Should I care about JavaScript engine speed when using jQuery?使用 jQuery 时我应该关心 JavaScript 引擎的速度吗?
【发布时间】:2009-09-25 15:18:01
【问题描述】:

我正在为一个由许多 DOM 元素组成的复杂混乱(我无法控制)的页面编写 jQuery。主要目标浏览器是 IE7,我担心它的 JavaScript 引擎的速度。我已经编写的脚本比较滞后,并且已尽我所能对性能进行了调整。

我可以编写易于维护和理解的脚本,例如使用单个 contains 语句。或者我可以帮助引擎通过这个凌乱的 HTML 缩小 DOM 搜索,从而导致更复杂。

在编写 jQuery 脚本时我应该关心浏览器的 JavaScript 引擎的速度吗?

【问题讨论】:

    标签: javascript jquery browser javascript-engine


    【解决方案1】:

    jQuery 是用 JavaScript 编写的。所以你应该关心 JavaScript 引擎的速度,因为它也会影响你的 jQuery 代码的速度。

    关于如何编写更高效的 jQuery 代码有很多技巧和窍门。主要原理是了解 jQuery 是如何工作的,如何将选择器转换为从 DOM 中选择元素的查询等等。

    【讨论】:

      【解决方案2】:

      尽可能尝试使用本机 Javascript 方法而不是 jQuery 方法,您通常会注意到速度显着提高,尤其是在 IE 中。 IE 的 JS 渲染引擎与其他非 sucky 浏览器相比是 SLLLOOOOWWW .

      例如,我有一个 AJAX 脚本,它在 FF/Safari 中运行良好,但在 IE 中运行起来就像冷冻糖蜜一样。事实证明,编写它的开发人员大量使用了 jQuery 的 $.each() 方法从大型 JSON 文件中获取数据。我重写了脚本以使用标准的 JS for() 循环,然后对其进行了一些速度测试,结果表明使用 for() 的速度快了 20 倍。

      【讨论】:

        【解决方案3】:

        是的,但你不应该沉迷于它:)

        【讨论】:

          【解决方案4】:

          包含可能相对较慢,因为我认为文档模型不会以任何方式被元素内出现的文本索引。

          但是,我不确定尝试过度设计某些东西并为了优化而进行优化是否明智。如果遇到问题,请选择最简单的方法,然后进行测试和优化。

          【讨论】:

            【解决方案5】:

            我还没有遇到过使用 JQuery 或插件(跨浏览器兼容性、非常有用的功能)的好处被速度降低所抵消的单一实例。而且我有时会处理相当大的网页。

            无论如何,你要知道的唯一方法就是尝试一下。首先以最合理的方式编写代码。如果它太慢,那么你可以考虑优化它。

            优化 DOM 遍历
            http://www.learningjquery.com/2006/12/quick-tip-optimizing-dom-traversal

            【讨论】:

              【解决方案6】:

              不,您不应该关心它,因为它不应该影响您编写代码的方式。

              也就是说,您应该始终编写高效的 Javascript,因为这只是一种很好的做法,而且因为对于大多数网站,您不知道任何特定用户正在运行什么浏览器,所以您不妨假设最坏的情况。

              【讨论】:

                【解决方案7】:

                是的,您应该担心,但幸运的是,jQuery 团队也同样担心:

                Recent Changes to jQuery Internals (Check out last two slides)

                【讨论】:

                  【解决方案8】:

                  不要过度优化,而是尽可能多地优化。

                  如果它很慢,那么你真的别无选择,只能进去帮助 jquery。但如果不是,那又何苦呢。

                  【讨论】:

                    猜你喜欢
                    • 2011-07-07
                    • 2010-12-26
                    • 2012-08-14
                    • 2012-08-11
                    • 1970-01-01
                    • 2011-03-15
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多