¿Qué es más eficiente - los almacenamientos intermedios nodejs o arrays tipados? ¿Qué debería usar para un mejor rendimiento? Creo que solo aquellos que conocen los interiores de V8 y NodeJs podrían responder esta pregunta.almacenamientos intermedios nodejs vs matrices tipadas
Respuesta
Esto es difícil, pero creo que dependerá de lo que planeas hacer con ellos y de la cantidad de datos con los que planeas trabajar.
las matrices tipadas necesitan buffers de nodos, pero son más fáciles de usar y puede superar el límite de 1 GB (kMaxLength = 0x3fffffff).
Si está haciendo cosas comunes como iteraciones, configuración, obtención, división, etc. ... las matrices tipadas deben ser la mejor opción para el rendimiento, no la memoria (especialmente si se trata de tipos enteros de flotante y 64 bits) .
Al final, probablemente solo un buen punto de referencia con lo que quiere hacer puede arrojar mucha luz sobre esta duda.
Un Node.js buffer
debería ser más eficiente que una matriz tipada. El motivo es simplemente porque cuando se crea un nuevo Node.js Buffer no es necesario inicializarlo a todos los 0. Mientras que, la especificación HTML5 establece que la inicialización de las matrices tipadas debe tener sus valores establecidos en 0. La asignación de la memoria y la configuración de toda la memoria en 0 lleva más tiempo.
En la mayoría de las aplicaciones, elegir uno no importará. Como siempre, el diablo se encuentra en los puntos de referencia :) Sin embargo, le recomiendo que elija uno y se quede con él. Si a menudo se convierte de ida y vuelta entre los dos, tendrá un golpe de rendimiento.
Niza discusión aquí: https://github.com/joyent/node/issues/4884
Hay algunas cosas que creo que vale la pena mencionar:
Buffer
casos son Uint8Array casos pero existen incompatibilidades sutiles con la especificación ECMAScript TypedArray en 2015. Por ejemplo, mientras queArrayBuffer#slice()
crea una copia del sector, la implementación deBuffer#slice()
crea una vista del Buffer existente sin copiar, lo que hace queBuffer#slice()
sea mucho más eficiente.- Al utilizar
Buffer.allocUnsafe()
yBuffer.allocUnsafeSlow()
, la memoria no se pone a cero (como muchos ya lo han señalado). Así que asegúrese de sobrescribir completamente la memoria asignada o puede permitir que se filtren los datos antiguos cuando se lee la memoria intermedia. TypedArrays
no se pueden leer de inmediato, necesitará unDataView
para eso. Lo que significa que es posible que necesite volver a escribir el código si tuviera que volver a migrar alBuffer
. Adapter pattern podría ayudar aquí.- Puede usar for-of en
Buffer
. No puede enTypedArrays
. Además, no tendrá el soporte clásicoentries()
,values()
,keys()
ylength
. Buffer
no es compatible en la interfaz mientras queTypedArray
bien puede ser. Por lo tanto, si su código se comparte entre frontend o back-end, puede considerar quedarse con uno.
- 1. vim - ¿Cómo puedo buscar almacenamientos intermedios?
- 2. comparar almacenamientos intermedios tan rápido como sea posible
- 3. escribiendo directamente en los almacenamientos intermedios internos std :: string
- 4. ¿Cómo administrar eficazmente pestañas/almacenamientos intermedios en vim?
- 5. ¿Cómo cierro todos los almacenamientos intermedios que no se muestran en una ventana en vim?
- 6. Emacs: ¿Cómo puedo usar una lista de guardado para restaurar los almacenamientos intermedios del bloqueo?
- 7. ¿Cuál usar - memmove() o memcpy() - cuando los almacenamientos intermedios no se superponen?
- 8. Evitar que Emacs pregunte "existen almacenamientos intermedios modificados; ¿salir de todos modos?"
- 9. No se pueden cerrar muchos almacenamientos intermedios con un comando en Vim
- 10. Módulos NodeJS vs clases
- 11. streams nodejs vs callbacks
- 12. NodeJS: bcrypt vs criptografía nativa
- 13. Scala matrices vs vectores
- 14. Los punteros y los almacenamientos intermedios de tamaño fijo solo se pueden usar en un contexto inseguro
- 15. Cómo encontrar rápidamente el archivo en el espacio de trabajo/cambiar entre almacenamientos intermedios/etc. en Eclipse?
- 16. javascript objects vs matrices vs JSON
- 17. Pruebas de rendimiento de Apache vs nodejs
- 18. Cuándo usar vistas fuertemente tipadas?
- 19. sesiones fuertemente tipadas en asp.net
- 20. Tablas hash VS matrices asociativas
- 21. Display Vim comandos intermedios
- 22. Matrices estáticas VS. matrices dinámicas en C++ 11
- 23. Comparación de rendimiento de matriz de matrices vs matrices multidimensionales
- 24. ArrayList de matrices vs. array de ArrayLists vs. algo similar
- 25. Conmutar sentencias con enumeraciones fuertemente tipadas
- 26. Java .properties archivos como clases fuertemente tipadas
- 27. ¿Hay colecciones fuertemente tipadas en Objective-C?
- 28. Usando App.config para establecer variables fuertemente tipadas
- 29. Colecciones vs matrices con respecto a sort()
- 30. Matrices de rubíes:% w vs% W
Parece que [Nodo 8] (https://nodejs.org/dist/latest-v8.x/docs/api/buffer.html # buffer_new_buffer_size) ha dejado de usar esta "característica" por razones de seguridad. – styfle