【发布时间】:2011-12-25 13:55:55
【问题描述】:
我将在行分隔的字符串上做一些工作。哪个会更快,先通过 String.split 拆分文本,然后在结果数组上遍历,还是直接通过 reg exp 遍历整个文本并在途中构造最终数组?
【问题讨论】:
我将在行分隔的字符串上做一些工作。哪个会更快,先通过 String.split 拆分文本,然后在结果数组上遍历,还是直接通过 reg exp 遍历整个文本并在途中构造最终数组?
【问题讨论】:
嗯,得到答案的最好方法就是花 2 分钟时间编写一个循环,双向执行一千次,然后检查 firebug 看看哪个更快;)
在处理 MXHR 时,我不得不优化大量字符串处理,根据我的经验,在当前浏览器中,纯字符串方法比 RegExps 快得多。对尽可能短的字符串使用正则表达式,并使用字符串方法做所有可能的事情。
例如,我在当前代码中使用了这个小数字:
var mime = mimeAndPayload.shift().split('Content-Type:', 2)[1].split(";", 1)[0].replace(' ', '');
它丑得要命,但不管你信不信,它在高负载下比等效的 RegExp 快得多。
【讨论】:
performance 对象的计时性能比Date 对象好得多。仍然会给出一些虚假数据(比如显然不是零时的零),因此您可以将其过滤掉。我发现这是缩小特定实施选择速度的最简单方法。
虽然这已经晚了 2.5 年,但希望这有助于为任何未来的观众阐明这个问题:http://jsperf.com/split-join-vs-regex-replace(包括多个浏览器的基准测试结果,以及功能基准代码本身)
【讨论】:
我希望使用 split() 会快得多。这取决于许多细节、行数与长度、正则表达式的复杂性等。
【讨论】:
.split() 比正则表达式更快。