【问题标题】:Performance question: String.split and then walk on the array, or RegExp?性能问题:String.split 然后遍历数组,还是RegExp?
【发布时间】:2011-12-25 13:55:55
【问题描述】:

我将在行分隔的字符串上做一些工作。哪个会更快,先通过 String.split 拆分文本,然后在结果数组上遍历,还是直接通过 reg exp 遍历整个文本并在途中构造最终数组?

【问题讨论】:

    标签: javascript performance


    【解决方案1】:

    嗯,得到答案的最好方法就是花 2 分钟时间编写一个循环,双向执行一千次,然后检查 firebug 看看哪个更快;)

    在处理 MXHR 时,我不得不优化大量字符串处理,根据我的经验,在当前浏览器中,纯字符串方法比 RegExps 快得多。对尽可能短的字符串使用正则表达式,并使用字符串方法做所有可能的事情。

    例如,我在当前代码中使用了这个小数字:

    var mime = mimeAndPayload.shift().split('Content-Type:', 2)[1].split(";", 1)[0].replace(' ', '');
    

    它丑得要命,但不管你信不信,它在高负载下比等效的 RegExp 快得多。

    【讨论】:

    • 我考虑过通过 Firebug 进行测试,但实际上并不相信 JS 的时间测量。非常感谢您提供支持示例的回答;)
    • 所以不要相信 firebug - 创建并比较几个日期对象
    • 好吧,我不信任 JS Date 对象本身,因为(前段时间)我尝试测量性能时,虽然它声称它是毫秒级的,但它总是返回秒的倍数。这就是我不信任它的原因。
    • 还要注意不同的 JavaScript 实现(Firefox、Internet Explorer、WebKit 等)会有不同的性能。
    • 我知道这个问题很老了,但是为了别人。 performance 对象的计时性能比Date 对象好得多。仍然会给出一些虚假数据(比如显然不是零时的零),因此您可以将其过滤掉。我发现这是缩小特定实施选择速度的最简单方法。
    【解决方案2】:

    虽然这已经晚了 2.5 年,但希望这有助于为任何未来的观众阐明这个问题:http://jsperf.com/split-join-vs-regex-replace(包括多个浏览器的基准测试结果,以及功能基准代码本身)

    【讨论】:

    • 跑了两次,在第一次测试中,拆分获胜,在第二次测试中,正则表达式获胜。
    • @Andrew Odri - 链接似乎坏了!请更新! :-)
    【解决方案3】:

    我希望使用 split() 会快得多。这取决于许多细节、行数与长度、正则表达式的复杂性等。

    【讨论】:

    • 感谢您花时间回答。我还希望本机方法更快,但没有什么比 IMO 这个问题的体验更好的了。无论如何谢谢=)
    • 这个答案是基于经验 :) 正如 dfltr 所说,您需要针对您的特定情况进行试验。
    • 问题是,我不知道字符串大小,如果我使用正则表达式,正则表达式将是一个简单的 \n|\r 匹配器。还有什么建议吗? =)(顺便说一句,很抱歉认为这是一个估计;))
    • 我从来没有发现.split() 比正则表达式更快。
    • @KevinBeal 与 OP 的代码不完全相同,但请尝试以下示例:measurethat.net/Benchmarks/Show/7822/0/strmatch-vs-strsplit
    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多