nodejs缓冲区与类型数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

什么更有效 - nodejs缓冲区或类型数组?我应该如何改善性能?我认为只有知道V8和NodeJs内部的人才能回答这个问题。

提问于
用户回答回答于

  1. Buffer实例是Uint8Array实例,但与ECMAScript 2015中的TypedArray规范存在细微的不兼容性。例如,在ArrayBuffer#slice()创建片的副本时,实现Buffer#slice()会在现有的Buffer 上创建一个视图而不进行复制,从而Buffer#slice()提高效率。
  2. 在使用时Buffer.allocUnsafe()并且Buffer.allocUnsafeSlow()内存未被清零(正如许多人已经指出的那样)。因此,确保您完全覆盖已分配的内存,或者在读取缓冲区内存时允许旧数据泄漏。
  3. TypedArrays马上就不可读,你需要一个DataView。这意味着如果你要迁移回去,你可能需要重写你的代码Buffer适配器模式可以帮助这里。
  4. 你可以使用for- on Buffer。你不能上TypedArrays。你也不会有经典的entries()values()keys()length支持。
  5. Buffer在前端不支持,而TypedArray很可能。所以如果你的代码是在前端或后端之间共享的,你可能会考虑坚持一个。
用户回答回答于

Node.js buffer应该比类型化数组更有效率。原因很简单,因为当创建一个新的Node.js缓冲区时,它不需要初始化为全0。而HTML5规范指出,类型化数组的初始化必须将其值设置为0.分配内存然后将所有内存设置为0需要更多时间。

在大多数应用中,选择任何一个都不重要。一如既往,魔鬼在于基准:)但是,我建议你选一个并坚持下去。如果你经常在两者之间来回转换,那么你会受到性能影响。

扫码关注云+社区