【问题标题】:Will this JavaScript script result in a memory leak?这个 JavaScript 脚本会导致内存泄漏吗?
【发布时间】:2011-05-13 12:45:01
【问题描述】:

这个问题取决于我之前的问题:Browser crashes after 10-15 mins 在那个问题上,我得到的答案是我的代码正在发生内存泄漏。所以我试图找到发生内存泄漏的点。

这个脚本会不会导致内存泄露?

var j = function (i, q, r, a) {
        return function (s) {
            var p = r.annotation;
            if (p.hasOwnProperty(i)) {
                p[i](p, r, a.dygraph_, s)
            } else {
                if (a.dygraph_.attr_(q)) {
                    a.dygraph_.attr_(q)(p, r, a.dygraph_, s)
                }
            }
        }
    };

如果是,我可以采取什么解决方案来防止内存泄漏?

【问题讨论】:

  • 这看起来不会导致浏览器崩溃,除非它在某个地方自行循环。
  • @Cobra_Fats : 每次我打电话给g=new Dygraph(.. 都会被调用。
  • JavaScript 有可能内存泄漏吗?
  • @ultimatebuster:是的,有可能,因此您的浏览器会在一段时间内崩溃。
  • 调用document.write 500 万次会导致这种情况吗?我认为大多数现代浏览器都可以通过终止无响应的脚本来预防这些。

标签: javascript memory-leaks


【解决方案1】:

是否存在内存泄漏并不明显,但如果这是我的代码,我会这样更改(不包括错误的变量命名):

var j = function (i, q, r, a) {
    var p = r.annotation,
        dygraph = a.dygraph_;

    return function (s) {
        if (p.hasOwnProperty(i)) {
            p[i](p, r, dygraph, s);
        } else {
            var aqExpression = dygraph.attr_(q);

            if (aqExpression) {
                aqExpression(p, r, dygraph, s);
            }
        }
    };
};

【讨论】:

    【解决方案2】:

    看起来你的代码没有泄漏内存。

    内存泄漏通常发生在涉及 DOM 元素时。

    我写了这篇关于 JavaScript 内存泄漏模式以及如何调试它们的指南:http://www.vladalexandruionescu.com/2012/08/javascript-memory-leaks.html。希望你会发现它有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多