hoo*_*ter 15 javascript performance firefox
我有一个存储为字符串的值,我知道它将永远是一个整数.但我需要它作为一个数字,所以我在做n = n * 1
.然后我想"嗯,我应该可以使用parseInt()
.然后我运行了一些jsperf测试,并且Firefox中的结果很有趣:
总体而言,看起来操作非常相似,除了在Firefox中,使用*1
速度异常快.这里发生了什么?
编辑
有人做了基础10测试,并整体更新了测试.点击此处也可以提供一些额外的反馈:http://jsperf.com/parseintx1/2
无论如何,我都不是 JavaScript 引擎专家,甚至不是编译器专家,但我很确定这可以归结为这样一个事实:编译器可以告诉我们:
var a = "123";
a = a * 1;
Run Code Online (Sandbox Code Playgroud)
确实与以下完全相同:
var a = 123;
Run Code Online (Sandbox Code Playgroud)
因为“a”是一个局部变量,并且从其初始化到该* 1
表达式都没有被使用,所以根本没有必要生成代码来执行该操作。在那之后,编译器也可能知道“a”无法从函数中“逃逸”,因此实际上没有必要做任何事情;也就是说,测试最终的结果可能* 1
与您得到的结果相同:
function() {}
Run Code Online (Sandbox Code Playgroud)
然而,在这种parseInt()
情况下,编译器无法确定它是否parseInt()
真的parseInt()
,因为它可能已被重新定义。因此,它必须生成代码来进行函数调用。