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