我们已经使用 Dojo 创建了一个应用程序,在 UI 上有一个时钟。但有时应用程序 UI 只是挂在那里,时钟就停止了。猜测JS引擎刚刚停止是因为时钟是由javascript代码驱动的。
不确定以下代码会导致内存泄漏,然后导致挂起问题。我们使用递归 setTimeout 调用来实现时钟。
dojo.declare("xxx.xxx.HomepageHeader", [dijit._Widget, dijit._Templated],
{
widgetsInTemplate: true,
_time :'',
dateUtil: null,
// ....
// ....
prefix :function (value, p)
{
return (value < 10) ? p + value : value;
},
updateTime :function ()
{
var d = new Date();
var _this = this;
var t = [_this.prefix(d.getHours(), '0'), _this.prefix(d.getMinutes(), '0'), _this.prefix(d.getSeconds(), '0')].join(':');
_this._time.innerHTML = t;
_this.dateInfo.innerHTML = this.dateUtil.format(d, "yyyy/MM/dd") + " |  " + this.dateUtil.format(d, "EEE");
window.setTimeout( function(){_this.updateTime();}, 100);
}
// ....
// ....
}
注意到在类中,方法 updateTime 使用 window.setTimeout 递归调用自身来更新 UI 上的时间文本。
这里有内存泄漏问题吗?如果答案是否定的,是否有任何可能导致挂断问题的问题?
谢谢!