在循环中使用JavaScript正则表达式会消耗不必要的内存吗?



例如:

for (var idx = 0, len = lines.length; idx < len; idx += 1) {
  /^regexp?/i.test(lines[idx]);
}

下面的操作会更有效率吗?

var pattern = /^regexp?/i;
for (var idx = 0, len = lines.length; idx < len; idx += 1) {
  pattern.test(lines[idx]);
}

我的理解是,在第一种情况下,将为每次迭代创建一个新的RegExp对象,消耗比必要的更多的内存。我的理解是正确的,还是JavaScript引擎执行优化,使上面的例子等效?

缓存的正则表达式会更快。lines中的元素越多,重新创建相同的regex对象所浪费的时间就越多。

您的假设是正确的,创建多个对象的性能肯定会低于只创建一个对象。将regex创建移出循环是一个很好的实践。即使某些引擎做了一些优化,你也希望你的代码在每个可能的引擎中都能有效地运行。

相关内容

最新更新