dépend de ce que vous voulez remplacer, Buffers
ne réaffecte pas les soi-même, l'objet Buffer
vous en JavaScript est simplement un « pointeur » dans une zone de mémoire externe (je parle en particulier à propos de Node.js 3.x ici, les anciens "SlowBuffers" de 2.x fonctionnent différemment).
Donc, il y a deux scénarios possibles:
votre longueur de la valeur de remplacement est <>
la valeur qui est remplacée. Dans ce cas, il n'y a pas grand-chose que vous pouvez faire, vous devez utiliser toString()
qui alloue une nouvelle String
(indice: lent), puis créer une nouvelle Buffer
en fonction de la taille de cette chaîne.
Vous êtes juste octets swapping ([]
sur les tampons est pas un indice de caractère) ici, il sera beaucoup plus rapide serait plus rapide sur 2.x juste utiliser une boucle simple, et effectuer le remplacement de votre self, car il n'y a presque aucun surcoût d'allocation (Node alloue un nouvel int avec la même valeur que celle qui a été écrite) mais sur 3.x toString
est correct pour 99% du temps.
Mais ce que vous voulez vraiment surveiller est que vous n'écrivez pas des chaînes gigantesques à des prises, parce que ce vraiment lent sous 2.x.
En raison du fait que V8 peut déplacer les chaînes en mémoire à tout moment, 2.x nœud doit les copier avant leur passage pointeur vers le système d'exploitation. Cela a été corrigé avec quelques hacks sur V8 dans 3.x.
@Gaby Merci. Je fais habituellement ça. Dans l'urgence cet après-midi. :) – Spot