如果重复多次,JavaScript是否缓存/优化代码

Does JavaScript cache/optimize code if repeated multiple times?

本文关键字:缓存 是否 优化 代码 JavaScript 如果      更新时间:2023-09-26

我目前正在编写一个小框架来测试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中,firefox工作得很好,这些结果:

Function           Execution Time
isEvenBitwise      9.652258097220447
isEvenModulo       37.546061799704376
isEvenPointless    8.512472488871936

看完你的代码后,我要猜一下Chrome是聪明的关于你在做什么。它看到的是:

 var startTime = performance.now();
 for (var i = 0; i < this.iterationsPerTest; i++)
 {
      var heh = contextFunction.apply(this, arguments)
 }
var executionTime = performance.now() - startTime;

它正确地评估了contextFunction没有副作用,认识到heh变量仅存在于循环范围内,并且从未使用过,然后优化整个循环,因为它不做任何事情。