2017-10-11 17 views
0

웹 응용 프로그램을 구현하고 Google 개발자 도구로 성능을 모니터링했습니다. 나는 청취자가 계속 증가하고 있고 그래서 힙이 있음을 주목한다.자바 스크립트 리스너 증가 계속

enter image description here

부분은 청취자 내가 힙 때문에 가비지 컬렉터에 의해 수집에 beeing없는 일부 데이터의 증가한다면 이해할이

let ival = $interval(function() { 
    $http.get('someurl') // this call is actually done through a service, don't know if that matters 
}, 1000) 

처럼 보이는 뭔가를 증가하고 있지만 그렇지 않은 경우 청취자가 증가하는 이유를 이해해야합니까? 여기

는 재현 할 최소한의 예는 다음과 같습니다

index.html 파일 :

<!doctype html> 
<html ng-app="exampleModule"> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script> 
    <script src="script.js"></script> 
    </head> 
    <body> 
    <div ng-controller="someController"> 
    </div> 
    </body> 
</html> 

그리고 script.js 파일 :

angular.module("exampleModule", []) 
    .controller("someController", [ "$http", "$interval", function ($http, $interval) { 

    $interval(function() { 
     $http.get('script.js') 
    }, 1000) 

    }]) 

결과는 성능을보고 위의 그림과 같습니다. GET 요청을하려면 간단한 웹 서버를 사용해야합니다.

+0

어딘가에 '$ interval.cancel (ival);'이라고 부르시겠습니까, 아니면 그 간격을 어쨌든 멈추시겠습니까? 아니면 오래된 간격을 멈추지 않고 새로운 간격을 반복해서 만들어야합니까? –

+0

활동이 삭제되면 $ interval.cancel (ival)이 호출됩니다. 활동이 작성 될 때 간격이 작성됩니다. – Stefan

+0

앱이 표시된 스 니펫으로 만 구성되어있는 경우에도 유사하게 작동합니까? 그렇지 않은 경우 문제를 재현하는 http://stackoverflow.com/help/mcve를 제공해야합니다. 거의 모든 것이 될 수 있습니다. – estus

답변

4

따르면 this issue에, 더 구체적으로 this comment, 그것은 크롬에 의한 것없는 쓰레기 성능의 녹음 중에 청취자를 수집 타임 라인.

+0

그게 전부입니다. 녹음 중에 가비지 콜렉션을 실행했는데 힙 성능이 좋습니다. 녹음 중에 청취자를 수집하지 않는 이유를 모르겠습니다. 답변 해주셔서 감사합니다. – Stefan

0

귀하의 요청 요청이 아마 1 초 이상 지속됩니다. 하지만 1 초마다 호출합니다. 따라서 다른 요청이 완료되기 전에 한 요청이 시작되고 결국 쌓이면 서서히 느려집니다.

이전이 완료되지 않은 경우 나 요청을하지 않는 것이 좋습니다 :

let previousOneOngoing = false; 
let ival = $interval(function() { 
    if(previousOneOngoing) return; 
    previousOneOngoing = true; 
    $http.get('someurl') 
     .then(function() { previousOneOngoing = false; }) 
}, 1000) 
+0

요청은 3ms와 같이 지속됩니다. 필자는 $ timeout을 사용하여 구현했으며 이전 작업이 완료되면 새로운 시간 초과를 설정했습니다. 같은 결과. 나는 방금 간격으로 간단한 XMLHttpRequest를 사용했고 힙은 커지지 않았다. 그래서 나는 $ http가 무언가를하고 있다고 생각한다. – Stefan

+0

@Stefan 오해해서 죄송합니다. robertklep 님의 답변보기. –