首页 > 解决方案 > JavaScript 字符串拆分:固定宽度与分隔性能

问题描述

我正在构建一个要由 JavaScript 解析为数组的字符串。我可以将其定界,也可以使字段固定宽度。为了测试它,我使用数据字符串构建了这个 jsperf 测试,其中字段都是固定宽度和逗号分隔的:

https://jsperf.com/string-split-fixed

我只在 Windows 上使用 Firefox 和 Chrome 进行了测试,所以请从其他操作系统和浏览器运行测试。我的两个测试结果很清楚:String.prototype.split()是大比分获胜。

是我的固定宽度代码不够高效,还是内置的字符串拆分功能更胜一筹?有没有办法对其进行编码,以便固定宽度的解析成功?如果这是 C/C++,那么正确编写的固定宽度代码将是明显的赢家。但我知道 JavaScript 是完全不同的野兽。

标签: javascriptarraysstringperformancesplit

解决方案


String.prototype.split()是一个内置的 JavaScript 函数。期望它针对特定的 JS 引擎进行高度优化,并且不是用 JavaScript 而是用 C++ 编写的。

因此,您无法将其性能与纯 JavaScript 代码相提并论也就不足为奇了。

诸如拆分分隔字符串之类的字符串操作本质上是受内存限制的。因此,知道分隔符的位置并没有太大帮助,因为整个字符串仍然需要至少遍历一次(以复制分隔的片段)。对于超过 D-cache 大小的字符串,固定位置拆分可能更快,但您的字符串只有 13KB 长,因此多次遍历它并不重要。


推荐阅读