2013-02-18 146 views
2

this后,据说预编译正则表达式将提高脚本性能。作者通过performance test来证明。然而,据我所知,这个职位正在谈论你反复使用正则表达式的情况。如果脚本中有很多正则表达式,但每个只使用一次,会怎么样?预编译正则表达式会在性能方面带来好处,在整个脚本中只使用一次?Javascript - 预编译的正则表达式

+0

通过在页面加载时预先进行编译并且用户期望有一点缓慢,您可能会获得一些预期收益。但这只是将工作转移到另一个时间,它不会节省任何东西,而且差异可能不会被察觉。 – RobG 2013-02-18 23:50:52

回答

1

如果仅使用一次 - 那么只需使用regexp文字。

你的观点是有效的 - 它只有在你使用相同的正则表达式时才有意义。

+0

这是我怀疑的。但是我现在正在失去前面提到的那篇文章的观点。因为它只是一切,不管它是正则表达式,字符串,函数还是任何其他值:如果重复使用它,将其分配给变量会更有效。我错过了什么? – tch3r 2013-02-18 23:59:00

+2

@ user2061071:不是赋值,但*编译*步骤很昂贵。虽然它对于函数也是有效的,因为它是一个声明步骤,如果你将一个匿名函数存储在一个变量中,你可能会避免。 – zerkms 2013-02-19 00:01:49

1

我不相信你链接的性能测试是决定性的。如果你看结果,差异是可以忽略的,因为正则表达式不够复杂。看看this测试更好一点的答案。

无论哪种方式,如果正则表达式多次使用,存储正则表达式值只会提高性能。这种性能提升仅归因于正则表达式本身的初始编译开销。如果将正则表达式存储在一个变量中,那么它将仍然是第一次编译,就像第一次编译文字一样。当存储的正则表达式使用第二个时间并且它已经被编译,而文字正则表达式将不得不被再次编译时,会发生差异。

+0

有编译时间和对象创建时间(虽然这不重要)。一个文字正则表达式只会被编译一次,但如果它被使用了一个循环,则会为每个循环传递创建一个新的正则表达式* object *。为避免这种情况,请将其存储在循环外的变量中。 – Doin 2016-12-18 14:45:50

0

我认为这取决于浏览器的实现,我们不能确定地说一种方法更好。

查看firefox和chrome中的不同结果。

enter image description here

我很困惑,为什么铬,使非编译正则表达式更快的结果,虽然。