什么更有效 - nodejs缓冲区或类型化数组?我应该使用什么来获得更好的性能?我认为只有那些了解V8和NodeJ内饰的人才能回答这个问题.
Node.js buffer应该比类型化数组更有效.原因很简单,因为当创建一个新的Node.js Buffer时,不需要将其初始化为全0.然而,HTML5规范声明类型化数组的初始化必须将其值设置为0.分配内存然后将所有内存设置为0需要更多时间.
在大多数应用中,选择任何一个都无关紧要.和往常一样,魔鬼在于基准测试:)但是,我建议你选择一个并坚持下去.如果你经常在两者之间来回转换,你会受到性能的影响.
这里讨论很好:https://github.com/joyent/node/issues/4884
我认为有几点值得一提:
Buffer实例是Uint8Array实例,但与 ECMAScript 2015 中的 TypedArray 规范存在细微的不兼容。例如,在ArrayBuffer#slice()创建切片的副本时,实现Buffer#slice()在现有 Buffer上创建视图而不进行复制,从而Buffer#slice()提高了效率。Buffer.allocUnsafe(),Buffer.allocUnsafeSlow()内存未清零(正如许多人已经指出的那样)。因此,请确保完全覆盖分配的内存,否则您可以在读取缓冲区内存时允许旧数据泄漏。TypedArrays不是立即可读的,你需要一个DataView。这意味着如果您要迁移回Buffer. 适配器模式可以在这里提供帮助。Buffer。你不能上TypedArrays。你也不会有经典的entries(),values(),keys()和length支持。Buffer前端不支持,但很TypedArray可能支持。因此,如果您的代码在前端或后端之间共享,您可能会考虑坚持使用一个。小智 1
这是一项艰巨的任务,但我认为这取决于您计划如何处理它们以及您计划使用多少数据?
类型化数组本身需要节点缓冲区,但更容易使用,并且可以克服 1GB 限制 (kMaxLength = 0x3fffffff)。
如果您正在做常见的事情,例如迭代、设置、获取、切片等...那么类型化数组应该是性能的最佳选择,而不是内存(特别是如果您正在处理浮点和 64 位整数类型)。
最后,可能只有对你想做的事情有一个好的基准才能真正澄清这个疑问。
| 归档时间: |
|
| 查看次数: |
4285 次 |
| 最近记录: |