Javascript toLowerCase() 性能与变量创建

Jou*_*man 8 javascript performance

什么更有效?:

var text="ABCdef";
var lowerVersion=text.toLowerCase();
if (lowerVersion=='abcdef' || lowerVersion=='asdfgh' || lowerVersion=='zxcvbn'){...
Run Code Online (Sandbox Code Playgroud)

或者

var text="ABCdef";
if (text.toLowerCase()=='abcdef' || text.toLowerCase()=='asdfgh' || text.toLowerCase()=='zxcvbn'){...
Run Code Online (Sandbox Code Playgroud)

即变量创建比多次运行 toLowerCase() 更昂贵吗?

谢谢。

T.J*_*der 5

这是 JavaScript。答案是:这取决于情况。这取决于您使用的引擎、您的数据、上下文中的其他内容、第一场或最后一场比赛是否匹配、每隔星期二......

但在 JavaScript 中创建变量非常快。相反,重复调用版本要求解释器进行多个函数调用,并且与大多数其他操作相比,函数调用(尽管以任何实际衡量标准来看都很快)都比较慢。唯一能达到如此快的速度的方法是解释器是否可以弄清楚它可以缓存调用的结果,这是很棘手的。

采用 @Felix 的性能测试并使其变得悲观(例如,最坏的情况并且没有一个匹配)表明即使 Chrome 也无法对其进行足够的优化以使重复的函数调用不会变得更糟。我没有做任何全面的测试,但 Chrome、Firefox 和 Opera 的速度都慢了 60% 左右。

当然,你还有一个选择:

var text="ABCdef";
switch (text.toLowerCase()) {
  case 'abcdef':
    // ...
    break;
  case 'asdfgh'
    // ...
    break;
  case 'zxcvbn'
    // ...
    break;
}
Run Code Online (Sandbox Code Playgroud)

然而,所有这些都是过早的优化,这通常已经够糟糕的了,但对于 JavaScript 和它运行的复杂环境来说尤其糟糕。

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