这是一个非常新的问题,但我没有通过Google / SO / Etc找到任何可靠的答案。
如果您在缓冲区中有内容,那么在该内容上运行.replace()
的最佳模式是什么?
您是否只需使用.toString()
取出内容,运行replace()
,然后将其放回缓冲区?或者有更好的方法吗?
由于
答案 0 :(得分:3)
取决于你想要替换的内容,Buffers
不要自己重新分配它们,你在JavaScript中的Buffer
对象只是一个指向外部内存区域的“指针”(我说话)特别是关于Node.js 3.x,2.x中的旧“SlowBuffers”以不同的方式工作。)
所以有两种可能的情况:
您的替换值的长度为<>
被替换的值。在这种情况下,您可以做的事情不多,您需要使用toString()
分配新的String
(提示:慢),然后根据该字符串的大小创建一个新的Buffer
你只是交换字节(缓冲区上的[]
是而不是一个字符索引)这里会更快会更快2.x只是使用一个普通循环,并执行替换你自己,因为几乎没有分配开销(Node分配一个新的int,其值与写入的相同)但是在3.x {{1}在99%的情况下都很好。
但你真正想要注意的是,你没有给套接字写出巨大的字符串,因为在2.x下,真的很慢。
由于V8可以随时在内存中移动字符串,因此Node 2.x需要在将指针传递给OS之前将其复制出来。这已经通过3.x中的V8上的一些黑客修复了。