Dos aspectos de los resolvers tienen una influencia desproporcionada en su rendimiento: el tamaño del contexto de ejecución y la forma en que calculamos su valor. En la implementación de Node.js de graphql, las promesas que envuelven valores primitivos son especialmente disruptivas, ya que añaden una gran sobrecarga computacional. El tamaño del contexto crea una línea base de uso de memoria que puede aumentar muy rápidamente incluso con pequeñas adiciones al contexto, cuando hay muchos contextos concurrentes. La ejecución puede crear objetos temporales, aumentando el uso de memoria. Los resolvers que se ejecutan con frecuencia, como aquellos responsables de completar grandes matrices de objetos, pueden convertirse en cuellos de botella de rendimiento.
En Auction.com, nuestra página de resultados de búsqueda (SRP) solicita hasta 500 elementos de aproximadamente 80 campos cada uno. La consulta que resuelve estos campos estaba sufriendo una alta latencia. Examinaremos las herramientas para instrumentar nuestro código e identificar los cuellos de botella en el uso de memoria y la utilización de CPU.
Nuestros elementos en tiempo real (por ejemplo, actualizaciones en tiempo real del estado de las propiedades actualmente vistas) se implementan utilizando una traducción de mensajes kafka a actualizaciones graphql. Presentaremos las herramientas y procedimientos para reducir el uso de memoria y CPU al distribuir tales mensajes.
This talk has been presented at JSNation US 2024, check out the latest edition of this JavaScript Conference.
Comments