为什么string-literal比String-object更快?

时间:2015-04-11 21:33:26

标签: javascript benchmarking

我对引擎的理解是,当涉及到文字时,无论何时在文字上调用方法,它都会实际实例化一个新的临时对象。

所以要么我的理解是错的,要么结果需要解释: http://jsperf.com/literal-vs-object-231

2 个答案:

答案 0 :(得分:3)

  

只要调用方法

,它就会实际实例化一个新的临时对象

嗯,是的,这就是如何指定对原始值的方法调用。但是,它仅用于解释行为(因为它是一种描述属性查找应如何最终在本机原型上的简单方法),而不是告诉它实际上是如何实现的(对String.prototype的静态访问,不涉及临时对象)。

  

为什么字符串文字比字符串对象更快?

那么引擎对字符串文字的作用是什么?它们是常数。他们的类型是已知的。财产访问 - 我们知道会发生什么。等等,有人对结果做了什么吗?为什么要调用无副作用的功能呢?

您会看到这会导致:优化。 Don't be fooled by the compiler on microbenchmarks

答案 1 :(得分:0)

浏览器可以并且将优化本机字符串方法。调用String.toUpperCase()在文字上更快,因为JS引擎足够智能,只提供大写字符串而不进行不必要的纠正。

如果你提供一个自定义方法调用它,对象就更快了,至少在Chrome上(这在很大程度上取决于JS引擎),因为引擎没有针对它的优化策略。请参阅http://jsperf.com/literal-vs-object-231/2