12.20.2012

Timeit in JavaScript

JavaScript で時間計測処理を実装する

関数をパラメータに取り、その所要時間(秒数)を出力する関数を定義する。
print はユーザ定義のメソッド。

var Timer = function() {};

Timer.timeit = function(description) {
  return function(func) {
    var start = (new Date).getTime();
    func();
    var elapse = ((new Date).getTime() - start) / 1000;
    print(description + ": " + elapse + " sec");
  };
};

以下は JScript(WSH) で500ミリ秒のスリープを行う例

// test code for WSH
var print = function(msg) { WScript.echo(msg); };

Timer.timeit("test code")(function() { WScript.sleep(500); });

出力例

test code: 0.5 sec

インスタンスメソッドで時間測定をしたい場合は、組み込み Function オブジェクトに
このような bind メソッドを定義すると便利だ。 (prototype.js 等を参照)

Function.prototype.bind = function(context) {
  var method = this;
  return function() { return method.apply(context, arguments); };
};

呼び出し例

// test code for WSH
var Klass = function(x) { this.x = x; }; Klass.prototype.f = function() { Timer.timeit("Klass.f")(function() { WScript.sleep(this.x); }.bind(this)); }; var klass = new Klass(1000); klass.f();

出力例

Klass.f: 1 sec

0 件のコメント:

コメントを投稿