私は現在、JavaScript 関数の速度をテストするための小さなフレームワークを作成しています。同じパラメーターで同じメソッドを繰り返し呼び出すと、奇妙な結果が得られます。
Function Execution Time
isEvenBitwise 38.00000000046566
isEvenModulo 38.00000000046566
isEvenPointless 38.00000000046566
ここに私の機能があります:
var myFunctions =
{
isEvenBitwise: function(number)
{
return !(number & 1);
},
isEvenModulo: function(number)
{
return (number % 2 == 0);
},
isEvenPointless: function(number)
{
return 1;
}
}
関数を実行するコード:
PerformanceTest.prototype.measureTime = function()
{
for (var indexTests = 0; indexTests < this.testCount; indexTests++)
{
var results = [];
for (var currentFunction in this.functions) {
var contextFunction = this.functions[currentFunction];
var startTime = performance.now();
for (var i = 0; i < this.iterationsPerTest; i++)
{
var heh = contextFunction.apply(this, arguments)
}
var executionTime = performance.now() - startTime;
var result = {};
result.testName = currentFunction;
result.executionTime = executionTime;
results.push(result);
}
this.testResults.push(results);
}
}
JavaScript インタープリターはコードをキャッシュ/最適化しますか? もしそうなら、それはどのように機能しますか?それとも、私が気付いていない他の何かが起こっていますか?
編集:これはクロムでのみ発生するようです.Firefoxはこれらの結果で問題なく動作します:
Function Execution Time
isEvenBitwise 9.652258097220447
isEvenModulo 37.546061799704376
isEvenPointless 8.512472488871936