【发布时间】:2020-04-18 02:12:24
【问题描述】:
我正在构建一个要由 JavaScript 解析为数组的字符串。我可以将其定界,也可以使字段固定宽度。为了测试它,我使用数据字符串构建了这个 jsperf 测试,其中字段都是固定宽度和逗号分隔的:
https://jsperf.com/string-split-fixed
我只在 Windows 上使用 Firefox 和 Chrome 进行了测试,所以请从其他操作系统和浏览器运行测试。我的两个测试结果很清楚:String.prototype.split() 是大赢家。
是我的固定宽度代码不够高效,还是内置的字符串拆分功能只是优越?有没有办法对其进行编码,以便固定宽度的解析成功?如果这是 C/C++,那么正确编写的固定宽度代码将是明显的赢家。但我知道 JavaScript 是完全不同的野兽。
【问题讨论】:
-
我建议将您的代码放在
function中,以更好地提示优化器。但它仍然是just a microbenchmark。 -
@Bergi - 所以你是说这个问题没有真正的答案,除非我在我的真实世界代码的上下文中使用最大的合理数据集进行一次运行测试?真实世界的总体性能差异可能真的可以忽略不计,但我想看看。这个 jsperf 使用了一个小而真实的数据集,所以它看起来像是一个看似有用的测试。我只是把东西放在函数里面,结果基本上是一样的。
-
我在想of something like this,它还修复了
i < data.length应该是i < array.length的错误 - 这将性能提高了 16 倍 :-) 不过仍然有很大的不同。跨度> -
@Bergi - 在 Firefox 中,您的错误修复使
fixed(data)成为赢家,因此值得称赞。但在这方面,Firefox 总体上比 Chrome 慢得多。这是另一个子拆分变体,它也显示slice()比split()快。这不是一个微基准,因为我确实循环遍历字符串数组并拆分每个字符串:jsperf.com/ss-split-vs-slice
标签: javascript arrays string performance split