메모리 누수 찾기 JavaScript 와 크롬

39, ve i& 만든 테스트 케이스를 아주 간단하게 만드는 백본 보기인 충족되었으며 이벤트 및 사용자 정의 클래스를 인스턴스화 처리기에서 첨부합니다. 있다고 믿지만 &quot 클릭하여 Remove"; 버튼를 복구하였습니다 및 메모리 누수, 이 샘플링합니다 해야 한다는 것이 없어야 합니다.

코드의 한 이스피들 여기 있습니다. http://jsfiddle.net/4QhR2/

// scope everything to a function
function main() {

    function MyWrapper() {
        this.element = null;
    }
    MyWrapper.prototype.set = function(elem) {
        this.element = elem;
    }
    MyWrapper.prototype.get = function() {
        return this.element;
    }

    var MyView = Backbone.View.extend({
        tagName : "div",
        id : "view",
        events : {
            "click #button" : "onButton",
        },    
        initialize : function(options) {        
            // done for demo purposes only, should be using templates
            this.html_text = "<input type='text' id='textbox' /><button id='button'>Remove</button>";        
            this.listenTo(this,"all",function(){console.log("Event: "+arguments[0]);});
        },
        render : function() {        
            this.$el.html(this.html_text);

            this.wrapper = new MyWrapper();
            this.wrapper.set(this.$("#textbox"));
            this.wrapper.get().val("placeholder");

            return this;
        },
        onButton : function() {
            // assume this gets .remove() called on subviews (if they existed)
            this.trigger("cleanup");
            this.remove();
        }
    });

    var view = new MyView();
    $("#content").append(view.render().el);
}

main();

하지만 나도 구글 Chrome& # 39 의 프로필러 확인하기 위해 사용하는 방법을 알 수 있다, 사실 이 사건. 한 가지 셨으며 가질리언 볼 수 있는 방법을 모르겠어요, 쉐퍼드도 up on the 힙 프로필러 스냅샷입니다 디코딩합니다 what& # 39 의 优秀 / 좋지 않습니다. 사용 가능한 자습서는 I& # 39, ve seen it 에 대한 스냅샷을 사용하여 profiler&quot 인컨텍스트 지금까지 그냥 나한테 "; give me a 방법에 대한 매우 상세한 선언 또는 전체 프로필러 작동합니다. 도구를 사용할 수 있는가, 아니면 그냥 프로필러에 꼭 전부 파악할 수 있는 것은?

  • EDIT:* 자습서는 다음과 같습니다.

[Gmail 메모리 누수가 수정] (https://docs.google.com/presentation/d/1wUVmf78gG-ra5aOxvTfYdiLkdGaR9OhXRnOlIcEmu2s/pub? = = = = false&amp false&amp, 루프 시작, 델라림스 dl3000 # 슬라이드에서는 id.g14717ff3_0_23)

[Flexlm*용 데브토레스] (http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/)

일부 뭐로부터요 I& # 39 는 담당자에서 강력해집니다 거기에, 재료, ve seen. 그러나 그들은 내가 찾을 수 있는 기술을 넘어 总监和首席信息官完全了解 도입합니까 3 스냅샷입니다 windows용 거의 제안하십시오 측면에서 실용적인 지식을 (for a beginner like me). # 39, & # 39 를 사용하여 DevTools&. # 39 는 실제 사례를 통해 doesn& 자습서는 때문에, 일반적인 개념 설명, t 작동합니까 막연한 셨으며 aren& # 39, t 큰 도움이 된다. # 39, & # 39 의 Gmail& 있다. 예:

  • &gt 찾을 수 있도록, 유출. 이제라니 가능* &gt.
  • &gt 유출 경로를 의 객체에는 하단에 프로파일입니다 고정 패널 검사 &gt.
  • &gt 경우 사이트 就不可能拥有 할당일까요 쉽게 유추 (즉, 이벤트 리스너에): &gt. -) 의 고정 객체에는 &gt 계기화 이 구성자를 통해 스택 추적 저장하라는 콘솔입니다 할당을 위한 js &gt. &gt 사용하여, 폐쇄? 기존 플래깅 활성화하십시오 크레이션스타크 건설 기간 중 적절한 속성, 즉 goog.events.Listener.ENABLE_MONITORING) 를 설정합니다.

내가 내 자신을 찾을 것이 아니라, 더 후 판독값 너무 적습니다. 그리고 다시 나에게 # 39 의 it& 어떻게 해야 할 것을 말하는 것이 아니라 그냥 저들이요 From my 관점, 거기에 상태는 모든 정보가 너무 쉽게 이해할 수 있다는 막연한 또는 다른 사람에게 이 과정에서 이미 수밖에 없다.

이들 중 일부는 제기돼 보다 구체적인 문제 있는 [@Jonathan Naguin& # 39 의 오토메이티드] (https://stackoverflow.com/a/19726918/20578 참조).

질문에 대한 의견 (5)
해결책

, 는 좋은 워크플로에 기법을 사용하는 메모리 누수 찾기 위해 3 스냅샷입니다 일부 메모리 문제를 해결하기 위해 이 전 대통령과 첫 로리나 Gmail 팀. 이 단계는 일반적으로:

  • Take a 힙 스냅샷입니다.
  • Do 얘기입니다.
  • 다른 시행하십시오 힙 스냅샷입니다.
  • 반복하십시오 같은 얘기입니다.
  • 다른 시행하십시오 힙 스냅샷입니다.
  • 1 과 2 를 스냅샷입니다 3& # 39 의 사이에 할당할지 객체에는 필터링합니다 스냅샷입니다 &quot Summary"; 보기입니다.

예, 저는 이 코드가 맞는 최적화된 표시하십시오 프로세스 (확인할 수 있습니다 [here] [1]) 의 이벤트 시작 단추를 클릭합니다 보기 만들 때까지 다시 말한다. 현재:

  • 실행하십시오 HTML (구했잖아 로칼에서 사용하는 이 [주소] [2]) 및 시행하십시오 스냅샷입니다.
  • 시작 만들기 위해 보기입니다.
  • 다른 시행하십시오 스냅샷입니다.
  • 을 제거.
  • 다른 시행하십시오 스냅샷입니다.
  • 1 과 2 를 스냅샷입니다 3& # 39 의 사이에 할당할지 객체에는 필터링합니다 스냅샷입니다 &quot Summary"; 보기입니다.

이제 메모리 누수를 찾을 수 있다.!

노드입니다 몇 개의 서로 다른 색상으로 되어 있습니다. 빨강입니다 노드입니다 Javascript 에서 살아 있기 때문에 그들에게 없는 직접판매용 참조입니다 분리되었는지 속해 있지만, DOM 진단트리 트리에서 노드를 Javascript 에서 referenced 있을 수 있다. (아마 비호환성의 폐쇄 또는 variable) 이지만 동시에 기술입니까 인해 전체 DOM 트리입니다 쓰레기요 수집되었습니다.

enter 이미지 여기에 설명을!

그러나 가지고 있는 노란색 노드입니다 Javascript 에서 직접 참조. Dom 진단트리는 Javascript 에서 찾을 수 있도록 참조입니다 같은 분리되었는지 노드입니다 노란색이면 찾습니다. Dom element 의 주요 창을 속성를 체인을 있어야 합니다.

Html 요소 적색으로 표시된 Div 에 특정 볼 수 있습니다. 이 경우, 참조하는 &quot cache&quot 확장하십시오 요소점 볼 수 있습니다. 함수.

enter 이미지 여기에 설명을!

0 달러 에 콘솔입니다 유형: 행을 선택하고, 실제 함수 및 위치를 볼 수 있습니다.

>$0
function cache( key, value ) {
        // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
        if ( keys.push( key += " " ) > Expr.cacheLength ) {
            // Only keep the most recent entries
            delete cache[ keys.shift() ];
        }
        return (cache[ key ] = value);
    }                                                     jquery-2.0.2.js:1166

이 요소는 대화상자에서는 진행 중인 참조되었습니다. Jquery 의 내부 메커니즘이 운포르투널리 할 수 있는 것이 없다. 그러나 단지 테스트 기능 및 변경하십시오 검색하기를 목적, 방법:

function cache( key, value ) {
    return value;
}

이 과정에서 붉은 노드 경우 지금 볼 수 없을 수도 있습니다:)

문서:

[5]: https://docs.google.com/presentation/d/1wUVmf78gG-ra5aOxvTfYdiLkdGaR9OhXRnOlIcEmu2s/pub start = = = = id.g31ec7af_0_58 dl3000 # 슬라이드에서는 델라림스 false&amp false&amp, 루프,?

해설 (18)

39 의 메모리 프로필링 이스피들 here&; s tip: 아래 url 을 너회의 이스피들 격리합니다 때문에 모든 이스피들 프레임워크 및 로드되는지 절감뿐만 당신의 유일한 결과.

http://jsfiddle.net/4QhR2/show/

난 전혀 알아낼 수 있을 때까지 추적할 수 있는 메모리 누수, 사용 방법 및 프로필러 타임라인당 다음 문서를 읽었어요. # 39, & # 39 섹션에 읽은 후, 개체 할당일까요 tracker& # 39, & # 39, 힙 Allocations& 기록하십시오 사용할 수 있는 i was 도구, 그리고 몇 분리되었는지 추적되도록 DOM 노드입니다.

내가 jQuery 사용에 문제가 해결되었습니다 전환을 통해 인터넷데이터센터 (idc) 의 이벤트 바인딩하면, 이벤트 알려졌다. 내 것을 알고 it& # 39 의 새로운 버전의 경우 바인딩 인터넷데이터센터 (idc) 는 자동으로 이벤트 비에w.레모프 전화하시기 ' ()'. 메모리 누수, 이들은 몇 가지 데모 교도관님도요 실행하십시오 설정된 당신꺼에요 식별할 수 있습니다. 안심 질문을 할 경우 여기에 don& 이해했소 공부한 뒤, 여전히 t # 39 이 문서.

https://developers.google.com/chrome-developer-tools/docs/javascript-memory-profiling

해설 (0)

기본적으로 필요한 개체 수를 보면 내에 힙 스냅샷입니다. 개체 수가 두 개 사이에 있으면 캐시-코어 you& # 39 의 메모리 누수, ve 폐기합니다 어졌다면 객체에는 스냅샷입니다 및 있습니다. 내가 해줄말은 찾을 수 없는 이벤트 핸들러도 코드에서 분리되었는지.

해설 (5)

There is an 뚭컻 비디오 구글에서 될 수 있는 아주 도움됐네 JavaScript 메모리 누수를 찾을 수 있습니다.

https://www.youtube.com/watch? v = L3ugr9BJqIs

해설 (0)

내 타임라인 탭 개발자 도구 바라볼 수도 있습니다. 사용 및 응용 프로그램의 기록하십시오 지켜볼 DOM 노드입니다 및 이벤트 리스너에 카운트입니다.

그 후 죽이려하겠어요 그래프화합니다 경우 메모리 메모리 누수 나탸내도록 프로필러를 그림 아웃해야 유출한 지정하십시오. 사용할 수 있습니다.

해설 (0)

또한 읽어 보도록.

http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/

크롬 개발자 도구 및 일부 사용할 수 있는 방법에 대해 설명합니다 무시하려면 단계별 조언 및 찾기 사용하여 메모리 누수가 힙 스냅샷입니다 비교 및 다른 영차 스냅샷입니다 보기를 사용할 수 있습니다.

해설 (0)

나는 두 번째 조언을 해 힙 스냅샷입니다 they& # 39 는 메모리 누수 감지, 구글 크롬, 세밀한 작업을 하고, 훌륭한 스냅샷.

난 내 연구 프로젝트를 생성할 수 있던 건물 내 도 웹 애플리케이션 상호대화식 up in & # 39, 많은 양의 데이터를 구축됨 layers& # 39, & # 39, 이러한 많은 레이어에는 약간만이라도 deleted& # 39. 그러나 몇 가지 이유로 wasn& UI 에 할당 해제된 메모리를 사용하여, t # 39 기술입니까 스냅샷에는 도구에서는 확인할 수 있는 것은 그동안 내가 JQuery 는 객체에 대한 참조가 (소스) 는 when I was trying to 트리거하지 트로이드 () '' 대회를 나가는 불구하고 계속 범위 참조). # 39 의 없기 때문에 이 정보를 처리할 때 매우 유용한 도구 you& it& 챔피언이다 구해줬으니 사업을 하고 있고, 다른 people& # 39 의 라이브러리를 사용하여 # 39 이 호관련 GC 에서 죠브 미련을 참조입니다 중지 할 수 있다.

편집:

39, s 도 it& 가는 데 걸리는 시간을 최소화할 수 있도록 하고, 어떤 작업을 수행할 수 있도록 미리 계획하십시오 you& # 39 스냅샷, 가설 어떤 문제의 원인이 될 수 및 테스트하려면 userdic. 스냅샷입니다 각 책정안 아웃해야 전후에.

해설 (1)