Quoi de plus efficace - buffers nodejs ou tableaux typés? Que dois-je utiliser pour de meilleures performances? Je pense que seuls ceux qui connaissent les intérieurs de V8 et NodeJs pourraient répondre à cette question.nodejs buffers vs tableaux typés
Répondre
Ceci est difficile, mais je pense que cela dépendra de ce que vous envisagez de faire avec eux et de la quantité de données que vous envisagez de travailler avec?
Les baies tapées elles-mêmes ont besoin de tampons de noeud, mais elles sont plus faciles à utiliser et vous pouvez surmonter la limite de 1 Go (kMaxLength = 0x3fffffff). Si vous faites des choses courantes telles que les itérations, la définition, l'obtention, le découpage, etc ... alors les tableaux typés devraient être votre meilleur coup pour la performance, pas la mémoire (spécialement si vous avez des types entiers flottants et 64bits) . En fin de compte, probablement seulement un bon benchmark avec ce que vous voulez faire peut faire la lumière sur ce doute.
Un Node.js buffer
devrait être plus efficace qu'un tableau typé. La raison en est simplement que lorsqu'un nouveau tampon Node.js est créé, il n'a pas besoin d'être initialisé à tous les 0. Alors que la spécification HTML5 stipule que l'initialisation des tableaux typés doit avoir leurs valeurs définies à 0. Allouer la mémoire, puis mettre toute la mémoire à 0 prend plus de temps.
Dans la plupart des applications, choisir l'une ou l'autre n'aura aucune importance. Comme toujours, le diable se situe dans les repères :) Cependant, je vous recommande de choisir un et respectez-le. Si vous effectuez souvent des conversions entre les deux, vous subirez un coup de performance.
belle discussion ici: https://github.com/joyent/node/issues/4884
Il y a quelques petites choses que je pense méritent d'être mentionnés:
Buffer
instances sont Uint8Array cas, mais il y a des incompatibilités subtiles avec la spécification TypedArray à ECMAScript 2015. Pour Par exemple, alors queArrayBuffer#slice()
crée une copie de la tranche, l'implémentation deBuffer#slice()
crée une vue sur le tampon existant sans copie, ce qui rendBuffer#slice()
beaucoup plus efficace.- Lorsque vous utilisez
Buffer.allocUnsafe()
etBuffer.allocUnsafeSlow()
la mémoire n'est pas remise à zéro (comme beaucoup l'ont déjà souligné). Assurez-vous donc d'écraser complètement la mémoire allouée ou vous pouvez autoriser la fuite des anciennes données lors de la lecture de la mémoire tampon. TypedArrays
ne sont pas lisibles tout de suite, vous aurez besoin d'unDataView
pour cela. Ce qui signifie que vous devrez peut-être réécrire votre code si vous revenez àBuffer
. Adapter pattern pourrait aider ici.- Vous pouvez utiliser for-of sur
Buffer
. Vous ne pouvez pas surTypedArrays
. En outre, vous n'aurez pas le support classiqueentries()
,values()
,keys()
etlength
. Buffer
n'est pas supporté dans le frontend alors queTypedArray
pourrait bien l'être. Donc, si votre code est partagé entre frontend ou backend vous pourriez envisager de s'en tenir à un.
- 1. JavaScript: Travailleur Web et tableaux typés
- 2. Comment déclarer des tableaux typés dans Safari? (JavaScript)
- 3. Tableaux typés dans Gecko 2: concaténation et expansion de Float32Array
- 4. Nodejs crypto vs python hashlib
- 5. Tableaux vs vars simples
- 6. tableaux VB.NET vs c
- 7. listes liées vs tableaux
- 8. Classes vs tableaux 2D
- 9. J2me - Tableaux vs vecteur?
- 10. Vertex Buffers in opengl
- 11. NodeJS Multipart/données de formulaire avec tableaux
- 12. DirectX9 Index Buffers & Multiple Streams
- 13. Protocole Buffers à classer?
- 14. Google Protocol Buffers
- 15. Buffers et octets?
- 16. Delphi Protocol Buffers?
- 17. Comportement des buffers dynamiques
- 18. C++: tableaux 2D vs. différences de tableaux 1D
- 19. Langages de métaprogrammes typés
- 20. Messages typés dans akka
- 21. Collection d'objets typés
- 22. Threads et Buffers en Java
- 23. java.nio channels buffers streams terminologie
- 24. mysql pipe tee buffers output
- 25. Node.js Buffers et fichiers binaires
- 26. Protocol Buffers Java RPC Stack
- 27. Divs vs tableaux pour les données tabulaires
- 28. Arbres: Listes liées vs tableaux (efficacité)
- 29. Tableaux de JDK vs. ImmutableList de Guava
- 30. Tableaux dynamiques vs vecteurs STL différence exacte?
Il semble que [Nœud 8] (https://nodejs.org/dist/latest-v8.x/docs/api/buffer.html # buffer_new_buffer_size) a désapprouvé cette "fonctionnalité" pour des raisons de sécurité. – styfle