Пожалуйста, извините за мой забавный вид JS. Это скомпилированный сценарий Coffee.
Когда в моем WebApp происходит что-то определенное c, я запускаю следующую функцию обратного вызова, чтобы запустить запрос JSON get:
GmScreen.prototype.requestPcUpdate = function(id) {
var currentUrl, self, url;
currentUrl = window.location.href;
url = currentUrl.substr(0, currentUrl.lastIndexOf('/')) + '.json';
self = this;
return $.ajax({
url: "/chars/" + id + ".json",
type: "GET",
error: function() {
return self.onPcUpdateError(this);
},
success: function(pc) {
return self.onPcUpdateReceived(pc);
}
});
};
Обратный вызов успеха Функция выглядит следующим образом:
GmScreen.prototype.onPcUpdateReceived = function(receivedPc) {
var pcObj;
if (!(receivedPc['id'] in this.allPcs)) {
console.error("No PC with ID " + receivedPc['id'] + " known!");
}
pcObj = this.allPcs[receivedPc['id']];
pcObj['cmlNode'] = new CmlCharacter((new DOMParser()).parseFromString(receivedPc['cml'], 'text/xml').documentElement);
return this.notifyPcChangeListeners();
};
В функции обратного вызова я создаю документ XML (и объект-оболочку на его основе) и назначаю его. Когда приходит следующее обновление для того же идентификатора, документ и объект-обертка могут быть собраны сборщиком мусора.
Но этого никогда не происходит.
В Firefox я вижу, что Dominator сохраняет это из-за сбора мусора происходит то, что называется mPromiseObj
.
Это существенно влияет на производительность моего веб-приложения с течением времени. Как я могу удалить эту вещь?