Chrome 확장 프로그램에 AngularJS 앱이 구현되어 있습니다. 콘텐츠 스크립트를 사용하여 사용자가 탐색 할 때 사용자 페이지에 자신을 주입합니다. 여기에는 클라이언트로 반환 할 새 데이터를 확인하는 폴링 메커니즘으로 N 초마다 서버를 호출하는 $ interval이 있습니다.
myInterval = $interval(function() {
// calls back to server
}, 30000);
$scope.$on("$destroy", function() {
if (angular.isDefined(myInterval)) {
$interval.cancel(myInterval);
myInterval = undefined;
}
};
우리 서버의 트래픽이 증가하고 있다는 것을 알았 기 때문에 조사한 결과이 간격으로 트리거 된 쿼리가 사용자가 예상 한 조건에서 트리거 할 수있는 것보다 훨씬 더 빠른 속도로 서버를 슬래 밍하고 있음을 발견했습니다. 예를 들어, 동일한 사용자로부터 분당 200 개 이상의 요청 비율로.
새 페이지로 이동하거나 탭을 닫은 후에도 간격이 살아있는 것 같습니다. $ destroy를 수신하고 간격을 취소하면 앱 내에서 라우팅 변경이 처리된다는 것을 이해하게되었지만 어떻게해야합니까? 사용자가 정상적인 브라우징 활동을 수행 할 때 간격이 취소되는지 확인합니까 (다음 페이지가로드 될 때 새 간격이 생성 되려고하므로)?
"일반적인 브라우징 활동"이라는 광고를 수신하기 위해 window
의 onbeforeunload 이벤트에 대한 리스너를 등록 할 수 있습니다 .
$window.onbeforeunload = function (evt) {
$interval.cancel(myInterval);
};
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다