簡體   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