首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nodejs缓冲区与类型化数组

nodejs缓冲区与类型化数组
EN

Stack Overflow用户
提问于 2012-04-03 14:28:08
回答 3查看 5.5K关注 0票数 22

nodejs缓冲区和类型化数组哪个更有效?我应该使用什么来获得更好的性能?我认为只有那些了解V8和NodeJs内部结构的人才能回答这个问题。

EN

回答 3

Stack Overflow用户

发布于 2013-10-11 02:51:51

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

在大多数应用程序中,选择哪一个都无关紧要。一如既往,魔鬼在于基准:)然而,我建议您选择一个并坚持使用它。如果你经常在两者之间来回转换,你的性能会受到影响。

这里有个不错的讨论:https://github.com/joyent/node/issues/4884

票数 7
EN

Stack Overflow用户

发布于 2017-04-12 16:17:58

我认为有几件事值得一提:

  1. Buffer实例是Uint8Array实例,但与ECMAScript 2015中的TypedArray规范存在微妙的不兼容性。例如,虽然ArrayBuffer#slice()创建了片的副本,但Buffer#slice()的实现在现有缓冲区上创建了一个视图,而不是复制,这使得Buffer#slice()使用Buffer.allocUnsafe()Buffer.allocUnsafeSlow()时内存不会被清零(正如许多人已经指出的那样)。因此,请确保您完全覆盖分配的内存,或者您可以在缓冲区内存不可读时允许旧数据泄漏,您需要一个DataView来实现这一点。这意味着如果要迁移回Buffer,您可能需要重写代码。Adapter pattern可以在这方面提供帮助。
  2. 你可以在Buffer上使用for-of。你不能在TypedArrays上。你也不会有经典的entries()values()keys()length,前端不支持support.
  3. Buffer,而TypedArray可能会支持。因此,如果您的代码在前端或后端之间共享,您可能会考虑使用其中一个。

More info in the docs here

票数 5
EN

Stack Overflow用户

发布于 2012-04-11 11:25:47

这是一个困难的问题,但我认为这将取决于您计划如何处理它们,以及您计划处理多少数据?

类型化数组本身需要节点缓冲区,但更容易使用,并且可以克服1 1GB的限制(kMaxLength = 0x3fffffff)。

如果你正在做一些常见的事情,比如迭代、设置、获取、切片等等。那么,类型化数组应该是性能的最佳选择,而不是内存(特别是在处理浮点数和64位整数类型时)。

最后,可能只有对您想要做的事情进行良好的基准测试才能真正阐明这一疑问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9988166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档