繁体   English   中英

Javascript内存管理泄漏

[英]Javascript Memory Management Leaks

目前,我正在创建一个Web应用程序。 用户应该能够整天运行我的应用程序。 目前,我遇到了一些内存问题。 浏览器似乎崩溃的地方。 我正在使用的是这种结构:

function Module() {
    var _me = this;

    this.init = function(){
        _me.setBindings(); // Using reference from Module instead of this
    }

   // All kind of functions

   this.init();
}

我改成了this

因此,这是一个更复杂的情况(这实际上是我的代码atm的一部分):

$.modules.dynamic_static_webpage.prototype.addRedirect = function (anum, aeditor) {
    $.prompt(
            $.utils.getTranslation("Redirect"),
            $.utils.getTranslation("Geef de URL op waar naar toe geredirect moet worden"),
            $.proxy(function (num, editor, input) {
                this.clearRedirect(editor);
                var val = input.val();

                if (val.indexOf("www") == 0) {
                    val = "http://" + val;
                }

                // Timeout needed, because otherwise the clear is not finished
                setTimeout($.proxy(function (n, e, v) {
                    $.HTMLTexteditorField.setIframeSelectionHTML.call(e, "{CMS-REDIRECT" + n + "_" + v + "}");
                    this.redirectShow(n, v);
                }, this, num, editor, val), 200);
            }, this, anum, aeditor)
       );
};

现在,我添加了很多$.proxy 这似乎有点奇怪。

我有很多“在范围内,范围内使用变量”。 我将其重写为上面的代码。 我曾在类似的不同站点上浏览过,但无法弄清楚:

  1. http://www.ibm.com/developerworks/web/library/wa-memleak/
  2. JavaScript闭包如何工作?

有人能解释一下这是否是避免记忆泄漏的正确方法吗? 还是有更好的解决方案?

您的代码中没有任何东西可以向我表明您将遇到内存泄漏问题。 然而,更令人担忧的是,您正在使用的避免内存泄漏的代码风格使很难判断是否会出现内存问题。 您已经发布了几十行代码; 一个以这种样式编写的数千行代码的代码库可能无法正确检查内存泄漏。

您可以使用一些内存管理技术:

  • 如果不再需要使用对象,请取消引用。 垃圾收集器将为您清理对象。
  • 如果您动态调用addEventListener ,请始终调用removeEventListener除非您要绑定事件的DOM节点稍后被销毁。
  • 如果从函数中引用对象,然后在某处引用该函数,则仍然有对该对象的引用。 避免保留对不再需要的内容的引用。

遵循这三个指导原则将使您在处理JavaScript的职业生涯中大半路而无任何与内存相关的问题:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM