我在Chrome扩展程序中实现了一个AngularJS应用程序。它使用内容脚本在用户导航时将自己注入用户的页面。在其中有一个$ interval,它每隔N秒回调一次我们的服务器作为轮询机制来检查新数据以返回给客户端。
myInterval = $interval(function() {
// calls back to server
}, 30000);
$scope.$on("$destroy", function() {
if (angular.isDefined(myInterval)) {
$interval.cancel(myInterval);
myInterval = undefined;
}
};
我注意到我们服务器上的流量正在增加所以我调查并发现由此间隔触发的查询以高于我们的用户可能在预期条件下触发的速率砰击我们的服务器。例如,来自同一用户的每分钟200多个请求的速率。
即使在导航到新页面,关闭标签等之后,似乎间隔仍然存在。我已经明白,听取$ destroy和取消间隔可以解决应用程序内的路由更改,但是如何确保在用户进行正常浏览活动时取消间隔(因为在下一页加载时即将创建新的间隔)?
答案 0 :(得分:1)
要听取您对广告"正常浏览活动"的引用,您可以为window
onbeforeunload 事件注册一名听众。
$window.onbeforeunload = function (evt) {
$interval.cancel(myInterval);
};