我是一名有用的助手,可以翻译文本。
我编写了一个大型算法来解析一个字符串(测试时长达5MB)。在进行了一些更改后,我注意到性能显著下降了约30%-35%,因此我开始使用各种性能测量工具进行调试,并发现了一些奇怪的东西。
事实证明,在算法开头删除了以下仅调用一次的行之后,我的算法大幅减慢了:
如果我只是将该行放在算法的顶部,而从未使用其结果,性能提高了30-35%,算法中的其他更改似乎根本没有任何区别。似乎执行这样的行在某种程度上会在进一步的字符串处理中为Node.js提供帮助,我无法进一步解释或分析。然后我开始在不同版本的Node.js上进行测试,并发现这发生在当前的10.15.3中,但未发生在v4.x或v12.x中。这种巨大的不一致性和对性能的完全神秘影响,我不知道如何解释。有人可以解释为什么像这样运行额外的RegEx搜索会突然为Node.js提供帮助吗?还是它在我的情况下具有特殊性质? 我已经记录了一个问题反对Node.js。
我编写了一个大型算法来解析一个字符串(测试时长达5MB)。在进行了一些更改后,我注意到性能显著下降了约30%-35%,因此我开始使用各种性能测量工具进行调试,并发现了一些奇怪的东西。
事实证明,在算法开头删除了以下仅调用一次的行之后,我的算法大幅减慢了:
text.match(/\n/g);
如果我只是将该行放在算法的顶部,而从未使用其结果,性能提高了30-35%,算法中的其他更改似乎根本没有任何区别。似乎执行这样的行在某种程度上会在进一步的字符串处理中为Node.js提供帮助,我无法进一步解释或分析。然后我开始在不同版本的Node.js上进行测试,并发现这发生在当前的10.15.3中,但未发生在v4.x或v12.x中。这种巨大的不一致性和对性能的完全神秘影响,我不知道如何解释。有人可以解释为什么像这样运行额外的RegEx搜索会突然为Node.js提供帮助吗?还是它在我的情况下具有特殊性质? 我已经记录了一个问题反对Node.js。
flatstr
模块,但其效果几乎为零,而仅仅执行text.match(/\n/g);
就能大大提高性能。 - vitaly-t