我目前正在編寫一個小框架來測試JavaScript函數的速度。當我反覆呼籲用相同的參數相同的方法,它給了我奇怪的結果:如果重複多次,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解釋器緩存/優化我的代碼嗎?如果是這樣,它是如何工作的?或者還有什麼事情我不知道?
編輯:這似乎只發生在Chrome,火狐只是罰款與這些結果:
Function Execution Time
isEvenBitwise 9.652258097220447
isEvenModulo 37.546061799704376
isEvenPointless 8.512472488871936
你能展示計算執行時間的代碼嗎?這是最可能的問題。即使使用緩存,您也無法獲得達到該精度的完全相同的執行時間。 – JJJ
你是否在每個瀏覽器上得到相同的結果? – glenatron
@glenatron不,請檢查我的編輯。 – dislick