javascript - JavaScript 字符串拆分:固定宽度与分隔性能
问题描述
我正在构建一个要由 JavaScript 解析为数组的字符串。我可以将其定界,也可以使字段固定宽度。为了测试它,我使用数据字符串构建了这个 jsperf 测试,其中字段都是固定宽度和逗号分隔的:
https://jsperf.com/string-split-fixed
我只在 Windows 上使用 Firefox 和 Chrome 进行了测试,所以请从其他操作系统和浏览器运行测试。我的两个测试结果很清楚:String.prototype.split()
是大比分获胜。
是我的固定宽度代码不够高效,还是内置的字符串拆分功能更胜一筹?有没有办法对其进行编码,以便固定宽度的解析成功?如果这是 C/C++,那么正确编写的固定宽度代码将是明显的赢家。但我知道 JavaScript 是完全不同的野兽。
解决方案
String.prototype.split()
是一个内置的 JavaScript 函数。期望它针对特定的 JS 引擎进行高度优化,并且不是用 JavaScript 而是用 C++ 编写的。
因此,您无法将其性能与纯 JavaScript 代码相提并论也就不足为奇了。
诸如拆分分隔字符串之类的字符串操作本质上是受内存限制的。因此,知道分隔符的位置并没有太大帮助,因为整个字符串仍然需要至少遍历一次(以复制分隔的片段)。对于超过 D-cache 大小的字符串,固定位置拆分可能更快,但您的字符串只有 13KB 长,因此多次遍历它并不重要。
推荐阅读
- javascript - 在随机游走图 mpld3 上突出显示线条
- android - Drawable 在 kotlin 文件中不受欢迎
- c++ - 为什么我得到不完整的反向字符串
- oauth-2.0 - .Net Core 3.1 MVC OAuth 服务器
- c# - 无法使用 MySQL 生成模型 Entity Framework 6
- c# - 为什么 "float.TryParse("51778365".ToString(), out x)" 在 C# 中返回 51778364?
- firebase - FCM getToken() 为范围错误注册 ServiceWorker 失败 Flutter web
- python - 有没有办法填充类似于 numpy.fill_diagonal 的 numpy 数组的非对角线?
- sql - 用于在具有 2 个字符的单词的关键字列表上进行模式匹配的 Sql 查询
- javascript - 如何将表单传递给对象的 body 属性?