UIに時計を備えたDojoを使用してアプリケーションを作成しました。ただし、アプリケーションUIがハングアップし、時計が停止することがあります。時計がJavaScriptコードによって駆動されているため、JSエンジンが停止したと推測します。
次のコードがメモリリークを引き起こし、その後ハングアップの問題を引き起こすかどうかわからない。再帰的にsetTimeoutinvokeを使用して、クロックを実装しています。
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の時間テキストを更新していることに注意してください。
ここにメモリリークの問題はありますか?答えが「いいえ」の場合、ハングアップの問題を引き起こした可能性のある問題はありますか?
ありがとう!