首页 > 解决方案 > 为什么将 JavaScript 正则表达式文字分配给变量时执行速度较慢?

问题描述

我的问题与之前的Stackoverflow 帖子有关,它说以下两种方式的速度几乎相同。

但是当我实际使用循环计数 1000000 测试它时,似乎有一致的性能。虽然我预计示例 1 应该更快,但结果却比示例 2 慢。

测试页面的结果在这里。例如1,执行时间为:[20.27,19.82,16.17],但例如2,它们更少:[18.57,15.48,15.14]。

结果让我很困惑。任何人都可以暗示原因吗?

var str = "Hello World";
// Example 1
var regExp1 = /[aeiou]+/gi;
for(var i = 0; i < 1000; ++i)
  regExp1.exec(str);
// Example 2
for(var j = 0; j < 1000; ++j)
  /[aeiou]+/gi.exec(str);

标签: javascriptregexperformance

解决方案


它必须更慢。

因为每次您在循环中进行新的迭代时,您都会在执行正则表达式之前重新评估它。

这会导致一个小的延迟,但对于大循环,会有一个时间差

在第一个示例中,它已经被定义和评估。

因此,唯一需要的时间是执行。


推荐阅读