Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 toLowerCase()性能与变量创建_Javascript_Performance - Fatal编程技术网

Javascript toLowerCase()性能与变量创建

Javascript toLowerCase()性能与变量创建,javascript,performance,Javascript,Performance,什么更有效率 var text="ABCdef"; var lowerVersion=text.toLowerCase(); if (lowerVersion=='abcdef' || lowerVersion=='asdfgh' || lowerVersion=='zxcvbn'){... 或 i、 创建变量是否比多次运行toLowerCase()更昂贵 谢谢。这是JavaScript。答案将是:这取决于。这取决于您使用的引擎、您的数据、上下文中的其他内容、第一次匹配还是最后一次匹配,以及每

什么更有效率

var text="ABCdef";
var lowerVersion=text.toLowerCase();
if (lowerVersion=='abcdef' || lowerVersion=='asdfgh' || lowerVersion=='zxcvbn'){...

i、 创建变量是否比多次运行toLowerCase()更昂贵


谢谢。

这是JavaScript。答案将是:这取决于。这取决于您使用的引擎、您的数据、上下文中的其他内容、第一次匹配还是最后一次匹配,以及每隔一个星期二

但是在JavaScript中创建变量非常快。相反,重复调用版本要求解释器进行多个函数调用,而函数调用(尽管以任何实际衡量都很快)与大多数其他操作相比都很慢。唯一的方法是,如果解释器能够计算出它可以缓存调用的结果,那么速度就会一样快,这是很棘手的

(例如,在最坏的情况下,它们都不匹配)表明,即使是Chrome也无法对其进行充分优化,以使重复的函数调用不会变得更糟。我没有做任何全面的测试,但Chrome、Firefox和Opera都慢了60%

当然,你还有其他选择:

var text="ABCdef";
switch (text.toLowerCase()) {
  case 'abcdef':
    // ...
    break;
  case 'asdfgh'
    // ...
    break;
  case 'zxcvbn'
    // ...
    break;
}
不过,所有这些都是过早的优化,总体来说这已经够糟糕了,但对于JavaScript和运行复杂事物的各种环境来说尤其糟糕


更好的问题是:什么更清晰、更易于维护?

,这似乎是合乎逻辑的(3个toLowerCase调用与1个toLowerCase调用)。但我不认为这会有多大关系,如果是一次或几次手术。这可能是一个品味问题,但我认为分配一个变量更具可读性/可维护性。

毫无疑问,第二个实现将比第一个实现快得多

可以肯定的是,当每次
text.toLowerCase()
都像
O(n)
那样花费时间时,就会出现
3xO(n)vs O(n)


我已经在jsPref.com上运行了测试,第二个代码段快了18%。

如果要多次引用该值,请将其存储为变量:对于长字符串,toLowerCase()可能非常慢。

为什么不试试看呢@Felix:你的测试是误导性的(我肯定是无意的),因为你的两个测试只调用
toLowerCase
一次。(您已经进行了第一次匹配,因此缩短了表达式。)一般的经验法则是:如果必须多次访问属性,请将其存储在变量中。哇,差异是巨大的。chrome 13的速度与其他任何东西之间的差异也是如此。第二个自上而下的实现是对toLowerCase()进行三次调用的实现,所以我猜你的意思是相反的,第一个是最快的,首先分配一次小写字符串。
var text="ABCdef";
switch (text.toLowerCase()) {
  case 'abcdef':
    // ...
    break;
  case 'asdfgh'
    // ...
    break;
  case 'zxcvbn'
    // ...
    break;
}