在Buffer(Node.js)内容上执行.replace()?

时间:2010-12-08 19:43:38

标签: javascript node.js

这是一个非常新的问题,但我没有通过Google / SO / Etc找到任何可靠的答案。

如果您在缓冲区中有内容,那么在该内容上运行.replace()的最佳模式是什么?

您是否只需使用.toString()取出内容,运行replace(),然后将其放回缓冲区?或者有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:3)

取决于你想要替换的内容,Buffers不要自己重新分配它们,你在JavaScript中的Buffer对象只是一个指向外部内存区域的“指针”(我说话)特别是关于Node.js 3.x,2.x中的旧“SlowBuffers”以不同的方式工作。)

所以有两种可能的情况:

  1. 您的替换值的长度为<>被替换的值。在这种情况下,您可以做的事情不多,您需要使用toString()分配新的String(提示:慢),然后根据该字符串的大小创建一个新的Buffer

  2. 你只是交换字节(缓冲区上的[]而不是一个字符索引)这里会更快会更快2.x只是使用一个普通循环,并执行替换你自己,因为几乎没有分配开销(Node分配一个新的int,其值与写入的相同)但是在3.x {{1}在99%的情况下都很好。

  3. 但你真正想要注意的是,你没有给套接字写出巨大的字符串,因为在2.x下,真的很慢。
    由于V8可以随时在内存中移动字符串,因此Node 2.x需要在将指针传递给OS之前将其复制出来。这已经通过3.x中的V8上的一些黑客修复了。