Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果重复多次,JavaScript是否缓存/优化代码?_Javascript_Performance - Fatal编程技术网

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

如果重复多次,JavaScript是否缓存/优化代码?,javascript,performance,Javascript,Performance,我目前正在编写一个小框架来测试JavaScript函数的速度。当我用相同的参数重复调用相同的方法时,它会给我奇怪的结果: Function Execution Time isEvenBitwise 38.00000000046566 isEvenModulo 38.00000000046566 isEvenPointless 38.00000000046566 Function Execution Time isEvenB

我目前正在编写一个小框架来测试JavaScript函数的速度。当我用相同的参数重复调用相同的方法时,它会给我奇怪的结果:

Function           Execution Time

isEvenBitwise      38.00000000046566
isEvenModulo       38.00000000046566
isEvenPointless    38.00000000046566
Function           Execution Time

isEvenBitwise      9.652258097220447
isEvenModulo       37.546061799704376
isEvenPointless    8.512472488871936
以下是我的职能:

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);
    }
}
运行函数的代码:

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);
    }
}

在看了你的代码之后,我想猜测一下Chrome对你所做的事情是否明智。它看到了这一点:

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

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

你能展示一下计算执行时间的代码吗?这是最可能的问题。即使使用缓存,您也无法获得精确到该精度的完全相同的执行时间。您在每个浏览器上都获得相同的结果吗?@glenatron否,请检查我的编辑。@Juhana当然,请检查我的编辑。这可能是因为:我喜欢这个猜测,但即使执行
var a=performance.now();var end=performance.now()-a不会给出如此一致的结果,日志记录中一定有一些有趣的事情……删除循环后,您有两个相邻的性能调用。now()。我敢打赌Chrome也在优化这些功能。据我所知,它是经过最严格优化的Javascript引擎,因此它几乎使用了你能想到的所有技巧来达到这个速度。你认为这种优化是如何在不产生零结果的情况下进行的?@DavidMcMullin很好,它一定在做些什么。也许只是优化循环的内容,但每次都要迭代循环。即便如此,这些结果似乎过于一致。