我正在开发一款在前端使用Angularjs的新应用。该应用程序的想法是每5秒轮询/同步服务器数据。这是在使用$ interval和ajax调用的服务中完成的:
function beginSync() {
if (!angular.isDefined(syncInterval)) {
syncInterval = $interval(syncDetails, 5000);
}
}
function endSync() {
if (angular.isDefined(syncInterval)) {
$interval.cancel(syncInterval);
syncInterval = undefined;
}
}
function syncDetails() {
return $http({
url: _contextPath + "/pathToAPI" + Id,
method: "GET",
headers: { "Content-Type": "application/json", "RequestName": "Details Sync" }
})
.then(syncSuccess, syncFailure);
}
同步的结果将重新填充数组对象,这反过来将更新嵌套的ng-repeat。
function syncSuccess(response) {
drives = angular.copy(response.data.drives);
return response.data;
}
在控制器中我正在观看$ destroy以删除页面休假等间隔。
$scope.$on("$destroy", function() {
SyncService.endSync();
});
问题是,在几分钟之后,页面变得缓慢并最终没有响应。我已经尝试使用chrome工具调试这个,但是在破译它告诉我的内容时并不是那么好。这是我拍摄的堆快照的链接(1表示没有轮询,2表示轮询一分钟。)和时间轴视图。 Heap Snapshots
在我看来,当删除这些元素时,事件监听器不会在dom中的某处被破坏。我们没有使用任何其他jquery插件或任何东西,所以我不知道为什么会是这种情况。对此的任何帮助将不胜感激。