首页 > 解决方案 > 将中间数学结果放入变量是否可以提高 javascript 的性能?

问题描述

我一直在玩黎曼 zeta 函数。我想在这里尽可能地优化执行时间,所以我把中间结果放在临时变量中。但是测试表明我没有从中获得性能提升。至少不明显。

function zeta(z, limit){
    var zres = new Complex(0, 0);

        for(var x = 1; x <= limit; x++){
            var ii = z.imaginary * Math.log(1/x);
            var pp = Math.pow(1/x, z.real);
            zres.real += pp * Math.cos(ii);
            zres.imaginary += pp * Math.sin(ii);
        }

    return zres;
}

我的问题是:即使我无法测量执行时间的差异,理论上什么更快?计算一次 ii 和 pp 并将它们作为变量传递,还是计算两次而不浪费时间声明?

标签: javascriptmathoptimization

解决方案


将事物单独放入(局部)变量通常不会对性能产生重大影响。如果有的话,它可能会增加寄存器分配器(或等效物)的压力并略微降低性能。

如果即时编译器(或运行时)不够聪明,无法进行等效优化(即只计算一次值重新使用每次使用表达式的计算结果)。

这里真的没有普遍适用的规则。您需要在希望获得最佳性能的特定系统上进行基准测试和优化。


推荐阅读