Was ist effizienter - nodejs Puffer oder typisierte Arrays? Was sollte ich für bessere Leistung verwenden? Ich denke, dass nur diejenigen, die Innenräume von V8 und NodeJs kennen, diese Frage beantworten können.nodejs buffers vs typisierte Arrays
Antwort
Das ist eine schwierige Frage, aber ich denke, dass es davon abhängen wird, was Sie mit ihnen machen wollen und mit wie vielen Daten Sie arbeiten möchten?
typisierte Arrays selbst benötigen Knotenpuffer, sind aber einfacher zu spielen und Sie können die 1 GB Grenze überwinden (kMaxLength = 0x3fffffff).
Wenn Sie allgemeine Dinge wie Iterationen, Einstellungen, Getting, Slicing usw. tun, dann sollten typisierte Arrays die beste Leistung sein, nicht Speicher (besonders wenn Sie mit Float- und 64bit-Integer-Typen arbeiten). .
Am Ende, wahrscheinlich nur ein guter Maßstab mit dem, was Sie tun möchten, kann diese Zweifel richtig beleuchten.
Ein Node.js buffer
sollte effizienter als ein typisiertes Array sein. Der Grund liegt einfach darin, dass wenn ein neuer Node.js-Puffer erstellt wird, er nicht für alle Nullen initialisiert werden muss. Die HTML5-Spezifikation besagt jedoch, dass bei der Initialisierung typisierter Arrays die Werte auf 0 gesetzt werden müssen. Das Zuweisen des Speichers und das anschließende Festlegen des gesamten Speichers auf Nullen benötigt mehr Zeit.
In den meisten Anwendungen spielt die Auswahl entweder keine Rolle. Wie immer liegt der Teufel in den Benchmarks :) Allerdings empfehle ich, dass Sie einen auswählen und dabei bleiben. Wenn Sie häufig zwischen den beiden hin- und herwechseln, erzielen Sie einen Leistungseinbruch.
Nizza Diskussion hier: https://github.com/joyent/node/issues/4884
Es gibt ein paar Dinge, die ich denke, sind erwähnenswert:
Buffer
Instanzen sind Uint8Array Instanzen, aber es gibt subtile Inkompatibilitäten mit der TypedArray Spezifikation in ECMAScript 2015. Für Beispiel: Während eine Kopie des Slice erstellt, erstellt die ImplementierungBuffer#slice()
eine Ansicht über den vorhandenen Puffer ohne zu kopieren, wodurchBuffer#slice()
viel effizienter.- Bei der Verwendung von
Buffer.allocUnsafe()
undBuffer.allocUnsafeSlow()
wird der Speicher nicht auf Null gesetzt (wie viele bereits festgestellt haben). Stellen Sie also sicher, dass Sie den zugewiesenen Speicher vollständig überschreiben oder dass die alten Daten beim Lesen des Pufferspeichers durchgelassen werden. TypedArrays
sind nicht sofort lesbar, Sie benötigen eineDataView
dafür. Dies bedeutet, dass Sie möglicherweise Ihren Code neu schreiben müssen, wenn Sie zurück zuBuffer
migrieren. Adapter pattern könnte hier helfen.- Sie können for-of unter
Buffer
verwenden. Sie können nicht aufTypedArrays
. Sie werden auch nicht die klassischenentries()
,values()
,keys()
undlength
Unterstützung haben. Buffer
wird nicht im Frontend unterstützt, währendTypedArray
gut sein kann. Wenn Sie also Ihren Code zwischen Frontend oder Backend freigeben, können Sie sich an einen Code halten.
- 1. ASP.NET MVC stark typisierte vs dynamisch typisierte Ansichten
- 2. Sind Javascript typisierte Arrays auf 0 initialisiert?
- 3. Javascript typisierte arrays "über den Draht"
- 4. Leistungstest Apache vs NodeJs
- 5. Nodejs Stream vs SendFile
- 6. Unerwartetes Verhalten des NodeJS-Arrays
- 7. Unterstützt Protocol Buffers den Move-Konstruktor
- 8. NodeJS Managed Hostings vs VPS
- 9. nodejs: Knotenmodule vs Singleton-Klassen
- 10. Arrays vs Single Vars
- 11. C++ Arrays vs Zeiger
- 12. PHP Schlüsselwertepaare vs. Arrays
- 13. MongoDB-Arrays vs Objekte
- 14. JavaScript-Objekte vs Arrays vs JSON
- 15. openGL glDrawElements mit interleaved buffers
- 16. Protocol Buffers Java RPC-Stack
- 17. Wie überprüft man, ob Javascript typisierte Arrays unterstützt werden?
- 18. DynamoDB putitem in NodeJs - Arrays von Objekten
- 19. stark typisierte Ansicht Unterschied (MVC Quellen vs. assembly)
- 20. Zero-Length-Arrays vs. Zeiger
- 21. Suffix Arrays vs Suffix Bäume
- 22. Erase vs ReDim In Arrays
- 23. Junction-Tabellen vs Fremdschlüssel-Arrays?
- 24. C# Arrays - string [] [] vs. string [,]
- 25. Ruby-Arrays:% w vs% W
- 26. Gut typisierte und schlecht typisierte Lambda-Begriffe
- 27. NodeJS - setTimeout (Fn, 0) vs setImmediate (Fn)
- 28. Node vs Nodejs Versionen sind unterschiedlich
- 29. Leistung von Nodejs Dateisystem vs .net System.IO?
- 30. Exceptions vs Fehlerobjekt in NodeJS werfen
Es sieht so aus [Node 8] (https://nodejs.org/dist/latest-v8.x/docs/api/buffer.html # buffer_new_buffer_size) hat dieses "Feature" aus Sicherheitsgründen veraltet. – styfle