将regexp存储在变量vs on go值中

时间:2017-04-29 12:11:07

标签: javascript regex

最近我的表现偏执(我阅读那些可怕的编程文章),我开始觉得存储和访问变量与静态值之间存在一点性能差异,并在需要的时候使用该值;

例如;

line = line.replace('\n', '')

我在上面的函数中的偏执是(纠正我,如果错了,因为function check(name) { var match = name.match(/^Donald Middlename Trump$/i); if(!match) match = name.match(/^Hillary Mrs Clinton$/i); if(!match) match = name.match(/^Obama$/i); // e.t.c return match; } )我认为每次检查函数被触发时都会为三个正则表达式创建一个RegExp对象的实例,ergo Javascript每次都需要一些时间来创建它。虽然每个正则表达式只使用一个地方,但我觉得代码会通过创建一次正则表达式然后从那里引用它来表现得更好。

例如。

/^$/ == /^$/ // false

长问题很简单,访问变量和重新创建对象之间是否存在性能差异或好处。

2 个答案:

答案 0 :(得分:1)

是的,性能存在差异,代码的工作方式不同(例如,uses the lastIndex property时)。但是,不要变得偏执 - premature optimisation is the root of all evil。您应该专注于正确和可读的代码。

如果由此获得任何相关的性能提升,请将其留给编译器。 Hoistingconstant propagation是两个相对简单的优化,将自动完成。

答案 1 :(得分:0)

  

我在上面的函数中的偏执是(纠正我,如果错了,因为/ ^ $ / == / ^ $ / // false)我认为为三个正则表达式创建一个RegExp对象的实例,每个启动检查功能的时间,ergo JavaScript每次都需要一些时间来创建它。

每次调用函数时,引擎都不再创建RegExp对象的新实例,而是如果字体在函数中存在,则创建数字5的新实例。

不要将解析与执行混淆。代码只解析一次。在解析时分析正则表达式并将其存储到内部表单中(如果愿意,可以编译)。

选择一种方法而不是另一种方法的唯一原因是可读性。