知识卡片
避免重复编译
内容
正则执行通常先编译表达式,再应用到文本。循环中反复创建同一表达式,会把固定成本放大成性能问题。发散:在对象式 API 中预编译 Pattern,本质上是把不变工作移出热路径。
参考来源
- 位置:第6章《打造高效正则表达式》测试与编译部分(源文件:_epub-src/text/part0011_split_002.html)
- 结论依据:原文明确指出正则表达式使用前要先检查语法并编译为内部形式,如果每次循环都重新编译会很浪费时间,应把编译结果缓存下来重复使用,直接支持卡片对避免重复编译、预编译移出热路径的论述。
- 原始内容:"正则表达式使用之前要做的第一件事情是进行错误检查,如果没有问题则编译为内部形式……每次循环都要重新编译所有正则表达式,这很浪费时间。相反,在第一次编译之后就把内部形式保存或缓存下来,在此后的循环中重复使用它们,显然会提高速度。"