在chrome profiler中分析我的页面时引起了我的注意,我注意到了一些奇怪的东西。节点数量确实增加了。 当禁用大部分页面时,我最终得到了一个计时器功能。
计时器是一个jquery小部件,它使用函数setTimeOut()。在连续循环中触发并由分析器检测到的行:
this._id = setTimeout($.proxy(this._callback, this) , this.options.delay);
计时器代码的其他部分:
$(function() {
$.widget('timer', {
options: {
delay: 1000,
repeat: false,
autostart: true
},
_timerId: null,
_id: null,
_index: null,
_state: 0,
/**
* The constructor
*
* @private
*/
_create: function() {
if (this.options.autostart) {
this._state = 1;
this._id = setTimeout($.proxy(this._callback, this), this.options.delay);
}
},
_callback: function()
{
if (typeof this.options.callback == 'function') {
$.proxy(this.options.callback, this.element).call(this, ++this._index);
}
if (this.options.repeat && this._state == 1 && (typeof this.options.repeat == "boolean" || parseInt(this.options.repeat) > this._index)) {
this._id = setTimeout($.proxy(this._callback, this) , this.options.delay);
} else {
this._timerId = null;
}
},
探查器的屏幕截图:
分析器确实运行了405秒,因为您可以看到两个节点都在增加。并且即使在节点仍在增加的几个小时之后,垃圾收集器也不会收集它,30分钟它已经超过25K节点并且监听器是稳定的。
我的想法是我使用widget结构和setTimeOut函数的组合,但我没有找到任何有用的主题。
这是由代码引起的,这是由分析器引起的吗?