什麼是更高效 - nodejs緩衝區或類型數組?我應該如何改善性能? 我認爲只有知道V8和NodeJs內部的人才能回答這個問題。nodejs buffers vs typed arrays
19
A
回答
1
這是一個艱難的過程,但我認爲這將取決於您打算如何處理它們以及計劃使用多少數據?
鍵入數組本身需要節點緩衝區,但更容易使用,並且可以克服1GB限制(kMaxLength = 0x3fffffff)。
如果你在做一些常見的事情,比如迭代,設置,獲取,切片等......那麼類型化數組應該是性能最好的鏡頭,而不是內存(特別是如果你正在處理float和64位整數類型) 。最後,大概只有一個很好的基準與你想做的事情可以揭示這個疑問。
8
Node.js buffer
應該比類型化數組更有效。原因很簡單,因爲當創建一個新的Node.js緩衝區時,它不需要初始化爲全0。而HTML5規範指出,類型化數組的初始化必須將其值設置爲0.分配內存然後將所有內存設置爲0需要更多時間。
在大多數應用程序中,選擇其中一個並不重要。一如既往,魔鬼在於基準:)但是,我建議你選一個並堅持下去。如果你經常在兩者之間來回轉換,那麼你會受到性能影響。
2
有,我認爲是值得一提的幾件事情:
Buffer
實例是Uint8Array實例,但也有在2015年的ECMAScript的TypedArray規範微妙的不兼容性例如,雖然ArrayBuffer#slice()
創建了分片的副本,但Buffer#slice()
的實現創建了現有緩衝區的視圖而沒有進行復制,使得Buffer#slice()
更加高效。- 當使用
Buffer.allocUnsafe()
和Buffer.allocUnsafeSlow()
時,存儲器未被清零(正如許多人已經指出的那樣)。因此,確保您完全覆蓋已分配的內存,或者在讀取緩衝區內存時允許舊數據泄漏。 TypedArrays
不能立即讀取,您需要一個DataView
。這意味着如果您要遷移回Buffer
,則可能需要重寫代碼。 Adapter pattern可以在這裏幫助。- 您可以在
Buffer
上使用for-of。你不能在TypedArrays
。你也不會有經典的entries()
,values()
,keys()
和length
支持。 Buffer
在前端不支持,而TypedArray
很可能。所以如果你的代碼是在前端或後端之間共享的,你可能會考慮堅持一個。
相關問題
- 1. ES5 vs ES6 Javascript for Arrays
- 2. exec vs execFile nodeJs
- 3. Windsor Generic Typed Factory
- 4. sum arrays
- 5. 的NodeJS v0.10 VS 0.4
- 6. Angular 2:NodeJS vs XAMPP
- 7. Dynamic vs Typed會產生奇怪的結果
- 8. EmguCV/OpenCV QueryFrame slow/buffers
- 9. Protocol Buffers的替代
- 10. F#,Nominative或Structural Typed
- 11. Castle Windsor Weak Typed Factory
- 12. Strongly-typed T4MVC Action/ActionLink
- 13. Castle Windsor Typed Factory Facility
- 14. Castle Windsor Generic Typed Factory
- 15. Flow-typed - 生成Libdef
- 16. Dynamic Arrays and structs
- 17. Javascript filter two arrays
- 18. Postgres Multiple Arrays
- 19. xcode swift 3D arrays
- 20. C++ 3d arrays
- 21. Master Mind Arrays
- 22. android textview arrays
- 23. Equal Arrays AngularJS Pro
- 24. Large arrays&javascript comparison
- 25. Java String Arrays
- 26. Numpy Arrays Correlation
- 27. Unnesting Numpy Arrays
- 28. objects..better arrays?
- 29. Boxplotting Masked Arrays
- 30. removeObjectsAtIndexes for Swift arrays
看起來像[Node 8](https://nodejs.org/dist/latest-v8.x/docs/api/buffer。html#buffer_new_buffer_size)出於安全原因已棄用此「功能」。 – styfle 2017-07-30 20:32:26