nodejs缓冲区vstypes数组
什么更有效 – nodejs缓冲区或types数组? 我应该用什么来改善性能? 我认为只有知道V8和NodeJs内部的人才能回答这个问题。
Node.js buffer
应该比types化数组更有效率。 原因很简单,因为当创build一个新的Node.js缓冲区时,不需要初始化为全0。 而HTML5规范指出,types化数组的初始化必须将其值设置为0.分配内存然后将所有内存设置为0需要更多时间。
在大多数应用中,select任何一个都不重要。 一如既往,魔鬼在于基准:)但是,我build议你选一个并坚持下去。 如果你经常在这两者之间来回转换,那么你将会受到性能的影响。
很好的讨论在这里: https : //github.com/joyent/node/issues/4884
有几件事我觉得值得一提:
-
Buffer
实例是Uint8Array实例,但与ECMAScript 2015中的TypedArray规范存在细微的不兼容性。例如,尽pipeArrayBuffer#slice()
创build了一个slice的副本,但是Buffer#slice()
的实现将在现有的Buffer上创build一个视图,复制,使得Buffer#slice()
更有效率。 - 当使用
Buffer.allocUnsafe()
和Buffer.allocUnsafeSlow()
,内存不会被清零(正如许多人已经指出的那样)。 因此,请确保您完全覆盖分配的内存,或者在读取缓冲区内存时允许旧数据泄漏。 -
TypedArrays
是不可读的,你需要一个DataView
。 这意味着如果要迁移回Buffer
则可能需要重写代码。 适配器模式可以帮助这里。 - 您可以使用“
Buffer
。 你不能在TypedArrays
。 你也不会有经典的entries()
,values()
,keys()
和length
支持。 - 前端不支持
Buffer
,而TypedArray
很可能。 所以如果你的代码在前端或后端共享,你可能会考虑坚持一个。
更多信息在这里的文档 。
这是一个艰难的过程,但是我认为这将取决于你打算如何处理它们以及你计划使用多less数据?
types数组本身需要节点缓冲区,但更容易使用,并且可以克服1GB的限制(kMaxLength = 0x3fffffff)。
如果你正在做的迭代,设置,获取,切片等常见的东西,那么types化数组应该是性能最好的select,而不是内存(尤其是如果你正在处理float和64位整数types的话)。
最后,可能只有一个很好的基准与你想做的事情可以揭示这个疑问。
- expressionjs 4和multer
- Express4 + Socket.io 0.9:不同的客户端获得相同的非广播消息
- 使用moment.max与mongoDB查询的结果时出错
- 我可以通过httpsconfigurationexpressjs通过http和其他网页来提供服务吗?
- Meteor.JS CollectionFSvideo图像缩略图(graphicsMagick)
- file upload不适用于Angular和Node.JS
- asynchronous在Express中如何工作?
- Grunt grunt-contrib-cssmin运行无止境不会结合文件
- Node.js,IIS,Angular和Visual Studio