2014-03-06 3 views
1

현재 웹 응용 프로그램을 만들고 있습니다. 사용자가 하루 종일 내 애플리케이션을 실행할 수 있어야하는 곳. 현재 일부 메모리 문제가 있습니다. 브라우저가 충돌하는 곳.자바 스크립트 메모리 관리 누수

function Module() { 
    var _me = this; 

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

    // All kind of functions 

    this.init(); 
} 

내가 this 변경 : 내가 사용되었다 구조의이 종류이다.

$.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. How do JavaScript closures work?

누군가 나를 설명 할 수 있습니까? 아니면 더 나은 해결책이 있습니까?

답변

1

내게 메모리 누출 문제가 있음을 나타내는 코드는 귀하의 코드에 없습니다. 그러나 메모리 누수를 피하기 위해 사용하는 코드 스타일은 앞으로 메모리 문제가 있는지 여부를 알기 어렵게 만드는 것입니다. 수십 줄의 코드를 게시했습니다. 그 스타일로 작성된 수천 줄의 코드를 가진 코드베이스는 메모리 누출을 적절하게 감사하는 것이 불가능할 수도 있습니다.

당신이 사용하지 수있는 몇 가지 메모리 관리 기술 :

  • 을 객체가 더 이상 역 참조 사용해야하는 경우. 가비지 컬렉터가 개체를 정리합니다.
  • 동적으로 addEventListener을 호출하는 경우 이벤트를 바인딩하려는 DOM 노드가 나중에 소멸되지 않는 한 항상 removeEventListener을 호출하십시오.
  • 함수 내에서 개체를 참조한 다음 해당 함수를 어딘가에서 참조하면 해당 개체에 대한 참조가 남아 있습니다. 더 이상 필요하지 않은 것에 대한 언급을 피하십시오.

이 세 가지 가이드 라인을 따르는 것은 어떤 메모리 관련 문제없이 자바 스크립트 처리 경력을 통해 당신에게 당신의 방법의 대부분을 얻을 것이다 :)

관련 문제