Wenn ich eine 16MB-Datei in Stücken von 64KB lese, und mache Buffer.concat
auf jedem Stück, letzteres erweist sich als unglaublich langsam, dauert eine ganze 4s, um durch die Menge zu gehen.Slow Buffer.concat
Gibt es eine bessere Möglichkeit, einen Puffer in Node.js zu verketten?
Node.js Version verwendet: 7.10.0, unter Windows 10 (beide sind 64-Bit).
Diese Frage gestellt wird, während das folgende Problem untersucht: https://github.com/brianc/node-postgres/issues/1286, die ein großes Publikum beeinflusst.
Der PostgreSQL-Treiber liest große bytea
Spalten in Blöcken von 64 KB und verkettet sie dann. Wir fanden heraus, dass der Anruf Buffer.concat
der Schuldige hinter einem riesigen Leistungsverlust in solchen Beispielen ist.
Warum müssen Sie in 64KB Stücken lesen? In jedem Fall sollte das nicht 4 Sekunden dauern. Können Sie diesen Code eingrenzen? – Brad
@Brad Ich habe gerade eine Erklärung hinzugefügt. –
Schieben Sie jedes Stück in ein Array und verwenden Sie 'Buffer.concat()' auf das Ganze zusammen. O (n) statt O (n²) Zeit zu kopieren. – Ryan