javascriptによる処理時間を計測
処理時間を計測するときは下のようなコードになるかと思われます。
var st = new Date(); // 処理開始。
// 処理
var et = new Date(); // 処理終わり。
alert(et - st); // 経過時間をミリ秒で表示。
何がダメってわけでもないです。やってることは同じなので。
それがこう書ける。
var sw = new Stopwatch();
sw.start(); // 処理開始。
// 処理
sw.pause(); // 処理終わり。
alert(sw.getStamp()); // 経過時間をミリ秒で表示。
まあ、長くなってるような気がしないでもない。何がメリットかって、改めて見ると別にメリットなんてないですね。どうやっても処理時間なんてなんでも計れるんだし。まあいいや。
このストップウォッチは、C#のStopWatchクラスを模してます。中断ができる点が工夫で、あと整形して表示できる。つまり、一回計測を止めて、続きから計測を再開するようなコードが容易く書けるわけです。
var sw = new Stopwatch();
sw.start(); // 処理1開始。
// 処理1
sw.pause(); // 処理1終わり。
alert("ここの待機時間は計測されない");
sw.start(); // 処理2開始。
// 処理2
sw.pause(); // 処理2終わり。
alert(sw.getStamp()); // 処理1+処理2の経過時間をミリ秒で表示。
ストップウォッチ(コード)
やってることはすごくシンプルなので、コードも短いです。
// ■ StopWatch
function StopWatch()
{
var self = this;
var stamp = 0;
var startTime = null;
self.start = function ()
{
startTime = new Date();
};
self.pause = function ()
{
stamp = self.getStamp();
startTime = null;
};
self.reset = function ()
{
stamp = 0;
startTime = null;
};
self.getStamp = function ()
{
if (startTime == null) {
return stamp;
}
return new Date() - startTime + stamp;
};
self.getStampString = function ()
{
var val = self.getStamp();
// hh:MM:ss.SSSに整形(hが多いとき、SSSがないときは桁がずれる)
var s = (val % (60 * 1000)) / 1000;
var m = ((val / (60 * 1000)) | 0) % 60;
var h = ((val / (60 * 60 * 1000)) | 0) % 60;
if (s < 10) {
s = "0" + s;
}
if (m < 10) {
m = "0" + m;
}
if (h < 10) {
h = "0" + h;
}
return "" + h + ":" + m + ":" + s;
};
}
・メソッド
start | 計測を始めます。 |
pause | 計測を一旦止めます。 |
reset | 計測をリセットします。 |
getStamp | 経過時間をミリ秒単位で返します。 |
getStampString | 経過時間を整形して返します。 |
※整形については、コード見ればお分かりの通り、なんちゃってです。桁固定は保証していません。しかしデバックするだけならこれで十分。
・使用方法
/* ストップウォッチの使用方法 */
var sw = new StopWatch();
sw.start();
alert("計測中");
sw.pause();
alert("待機してた時間 " + sw.getStampString());
0 件のコメント :
コメントを投稿