【问题标题】:How to profile and get Javascript performance [duplicate]如何分析和获得 Javascript 性能 [重复]
【发布时间】:2011-01-09 14:07:39
【问题描述】:

可能重复:
What is the best way to profile javascript execution?

我有一些使用 jQuery 的脚本,我认为其中一个有内存泄漏。

如何分析并找到我拥有的脚本的哪些部分使用最多的内存/CPU?

【问题讨论】:

    标签: javascript performance memory-leaks profiling


    【解决方案1】:

    关于内存消耗

    JavaScript 中的内存泄漏通常会被忽略,除非它们变成浏览器内存泄漏(也就是说,即使在用户离开页面后,内存仍会继续分配并且无法释放它)。这样做的原因是,虽然您的 Web 应用程序可能存在一些内存泄漏,但用户会从一个页面转到另一个页面,从而最大限度地减少泄漏。但是他们可能不会重新启动浏览器,因此浏览器内存泄漏可能很严重。已知某些 JavaScript 代码会在某些浏览器上导致内存泄漏,其中 Internet Explorer 可能是该领域中最糟糕的。对于它,您可能会发现Microsoft JavaScript Memory Leak Detector 非常有用。

    关于时间

    IE、Chrome 和 Safari 在浏览器附带的 Web 开发工具中内置了分析器。对于 Firefox,您可以使用 Firebug。也可能有用,因为您使用的是 jQuery,这意味着您的分析报告将充满匿名函数等,使其非常难以阅读,John Resig's jQuery profiling plugin,这将为您提供关于此事的更清晰的输出。

    【讨论】:

    • 非常感谢,我会试试 IE 的内存泄漏检测器。 P.S.,Ajaxian 中的链接已经失效,这里是有效链接:blogs.msdn.com/gpde/pages/…
    • John Resig 的脚本链接不再有效。
    • 这个假设可能并不总是成立。某些页面会长时间保持打开状态,例如 GMail 或 Facebook,其中存在内存泄漏的 JavaScript 代码会很快出现。
    【解决方案2】:

    使用Firebug。引用http://getfirebug.com/js.html

    要使用分析器,只需转到控制台选项卡并单击“配置文件”按钮。然后使用您的应用程序或重新加载页面,然后再次单击“配置文件”按钮。然后,您将看到一份详细的报告,其中显示了调用了哪些函数以及每个函数花费了多少时间。

    【讨论】:

      【解决方案3】:

      我建议查看 Firebug 中的分析器,以及 IE 的 Drip 插件以帮助查找内存泄漏。

      另外,请记住,大多数 javascript 内存泄漏来自 DOM 对象之间的循环引用,并且 DOM 对象卸载时 javascript 对象没有被破坏。为了防止这种情况发生,我建议避免在 DOM 对象属性中创建对 javascript 对象的引用(即,避免像 document.getElementById('foo').bar = myObject; 这样的东西)。如果您必须创建这些循环引用,请务必在页面卸载时或在卸载前移除 DOM 对象时运行的函数中自行破坏它们。

      【讨论】:

        【解决方案4】:

        谷歌浏览器也有配置​​文件选项

        【讨论】:

          【解决方案5】:

          另一种测试特定代码的简单方法是在其周围添加一个计时器。

          var testStart = new Date();
          
          // code to be tested here
          
          $('#jstest').html("selected function: "+ (new Date() - testStart) + " milliseconds");
          

          其中 jstest 是页面上某处可见的 span 元素。

          【讨论】:

            【解决方案6】:

            虽然 chrome 内置了分析选项,但它并没有提供有关对象的精确信息。所以我更喜欢使用leak-finder-for-javascript 工具来帮助我编写代码。

            https://code.google.com/p/leak-finder-for-javascript/

            我希望这会有所帮助。

            【讨论】:

            • 你回答这个问题有点晚了,但感谢有趣的链接
            【解决方案7】:

            Firebug 或 Google 的 Page Speed for Firefox 具有分析工具。

            【讨论】:

              【解决方案8】:

              John Resig (jQuery) 的这篇文章可能有助于检测 IE 中的内存泄漏:

              http://ejohn.org/blog/deep-tracing-of-internet-explorer/

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-12-25
                • 1970-01-01
                • 1970-01-01
                • 2019-08-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多