我正在 Ember 2.3.0 开发一个Web应用程序,在进行一些跨浏览器测试时,显然 IE 11 的应用程序运行缓慢。 在IE开发人员的控制台上进行一些测量似乎 DOM onreadystatechange 事件会在一段时间内占用高达100%的CPU,这可能是泄漏。
我发现这篇文章:http://milan.adamovsky.com/2012/02/javascript-memory-leaks-in-internet.html尽管已经老了,但我还是鼓励我测试将 onreadystatechange 事件归零的做法,以防它发生内存泄漏。
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function () {
if (ajax.readyState === 4) {
// code on completion
ajax.onreadystatechange = CollectGarbage;
ajax = null;
}
};
但在Ember我不知道如何直接访问XMLHttpRequest对象。 JSONApiAdapter提供了一个重写的ajax方法,但我不知道如何访问原始对象:
const Adapter = DS.JSONAPIAdapter.extend({
ajax: function(){ ... }
})
答案 0 :(得分:0)
实际上,故意不容易找到原始XHR对象(参见https://github.com/emberjs/data/pull/4406)。在某些时候,Ember Data可能会切换到使用fetch而不是XHR,并且他们喜欢轻松进行切换的能力。
如果您怀疑有泄漏,可以尝试https://github.com/ember-best-practices/memory-leak-examples的一些建议。他们非常有用