【问题标题】:Javascript - Precompiled regex performanceJavascript - 预编译的正则表达式性能
【发布时间】:2013-02-18 23:38:12
【问题描述】:

this 帖子中,据说预编译正则表达式将提高脚本性能。作者通过performance test证明了这一点。但是,据我了解,这篇文章是在讨论重复使用正则表达式的情况。如果脚本中有很多正则表达式,但每个都只使用一次怎么办?预编译在整个脚本中只使用一次的正则表达式会带来性能优势吗?

【问题讨论】:

  • 在页面加载时预先编译可能会获得一些明显的好处,而用户预计会有点慢。但这只是将工作转移到其他时间,并不能节省任何东西,而且差异可能难以察觉。

标签: javascript regex performance precompile


【解决方案1】:

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

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

【讨论】:

  • 既有编译时间,也有对象创建时间(尽管这不太重要)。文字正则表达式只会被编译一次,但如果它被用于循环,则会为每个循环通过创建一个新的正则表达式 object。为避免这种情况,请将其存储在循环外的变量中。
【解决方案2】:

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

在 Firefox 和 chrome 中查看不同的结果。

我很困惑为什么 chrome 会为非重新编译的正则表达式提供更快的结果。

【讨论】:

    【解决方案3】:

    如果它只使用一次 - 那么只需使用正则表达式文字。

    你的观点是正确的——只有当你经常使用相同的正则表达式时才有意义。

    【讨论】:

    • 这就是我的怀疑。但是我失去了上述帖子的重点。因为它几乎是所有东西,无论是正则表达式、字符串、函数还是任何其他值:如果重复使用它,将它分配给变量会更有效。我错过了什么?
    • @user2061071:不是分配,而是 编译 步骤很昂贵。虽然它对函数也有效,因为它是一个声明步骤,如果你将匿名函数存储在变量中,你可以避免
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多