
Buen dia a todos!
Este año, con el lanzamiento de Flutter , un marco para el desarrollo de aplicaciones multiplataforma, ha habido un aumento en la publicidad en el lenguaje Dart. Como cualquier perfeccionista postergar el aburrimiento perezoso Pensé en comparar el rendimiento de la implementación del servidor de la máquina virtual Dart con su potencial antagonista en la persona de Node.js. Debo decir de inmediato que la esperanza estaba ardiendo dentro de mí de que Dart ganaría, y ganaría el santo grial, dándome superioridad sobre los competidores potenciales durante los próximos dos períodos de cinco años, pero la realidad era un poco diferente ...
Kit de herramientas
- Máquina de prueba: Core I7, SSD, 12 GB de RAM (amablemente proporcionada por mi empleador anterior)
- Prueba de carga: k6.io (por cierto, el marco es muy interesante en su arquitectura)
Organización del código de la aplicación.
Código fuente
Luego, especialmente, decidí no molestarme y decidí seguir las recomendaciones que leí en un momento sobre Habré. En particular:
- Se agregó una carga útil como un trabajo de generación de datos aleatorios (datos aleatorios para eliminar el posible almacenamiento en caché de resultados)
class Human { constructor (id, name, surname, age, gender) { this.id = id this.name = name this.surname = surname this.age = age this.gender = gender } }
- Tanto Dart como Node.js usaron opciones de procesamiento de solicitudes síncronas y asíncronas.
- Se utilizaron soluciones nativas y soluciones en marcos de la industria (acueducto para dart y express para node.js)
- Dado que el estudio logró obtener una aceleración significativa de Dart al usar el acueducto, que ejecuta aislamientos en cada núcleo, utilicé el módulo de clúster para node.js para equilibrar
Metodología de prueba
- ejecutar pruebas de carga con un número determinado de solicitudes por segundo (500, 750) y un límite en el número de iteraciones de prueba (el número de solicitudes completadas)
- tanto la aplicación como el marco de prueba se ejecutaron en la misma máquina, por lo que debe comprender que todos los resultados son relativos y solo se pueden comparar entre sí
Resultados
Dardo nativo
500 rps

750 rps
Marco de acueducto para Dart
500 rps

750 rps

Native node.js
500 rps

750 rps

Nodo Express con Cluster
500 rps

750 rps

Conclusiones
- Por supuesto, mucho depende de cómo implementaste la lógica de la aplicación, no estoy realmente seguro de que mi código sea óptimo tanto en el caso de dart como de node.js
- En particular, la función de generar la matriz podría mostrarse en una secuencia de trabajo separada con salida asincrónica, en mi caso no se implementó, por lo tanto, no se usó todo el mosh asincrónico aquí
- Tanto en Dart como en Node.js, la salida podría organizarse a través de una secuencia
- Por lo tanto, todavía hay mucho espacio para la investigación y la optimización del rendimiento.
- Dart en la implementación nativa de los controladores mostró un archivo épico, sin embargo, cuando se implementó a través del marco, mostró resultados impresionantes, según los cuales la máquina virtual Dart ahora puede competir con Node.js
- Hasta donde sé, se ha invertido una enorme cantidad de horas hombre de trabajo en la optimización del V8, estoy más que seguro de que se invierte mucho menos tiempo en la máquina virtual Dart. Por lo tanto, el segundo probablemente tenga un potencial suficientemente grande para optimizaciones antes de V8