Por lo tanto, es mucho menos costoso. Solo estamos propagando ese contexto cuando los valores realmente cambian, no cuando se programan las continuaciones individuales. Así es como lo hacemos actualmente en Workers. Así es como quiero hacerlo en Node. Hay un desafío con cómo podemos implementar esto en Node en este momento. Todo esto depende de una nueva API. Es una API que ha estado en V8 durante años que estamos utilizando. Elimina completamente cualquier dependencia de async hooks y promise hooks para que podamos implementar este modelo completo. Lo que espero es que más adelante este año, podamos hacer estos cambios en V8 y hacer de esto una mejora significativa de rendimiento en Node, para cualquiera que esté utilizando la API de almacenamiento local asíncrono. Entonces, ¿qué pasa con la estandarización? Hace un tiempo, Luca, trabajando en Dino, publicó este comentario en Twitter, me pareció bastante divertido. Vercel ha adoptado el almacenamiento local asíncrono, otras personas están comenzando a adoptarlo. Entonces, ¿qué se supone que deben hacer estos tiempos de ejecución? ¿Correcto? ¿Dino y workers y Bun, simplemente se van e implementan, siguen la iniciativa de Node e implementan todas las API específicas de Node? Resulta que sí, estamos haciendo eso, ¿verdad? Estamos implementando esa capa de compatibilidad con Node, pero lo que realmente queremos son estándares, es una API estándar para esto. Afortunadamente, TC39 está trabajando en esto. Hay una API de contexto asíncrono que se está desarrollando activamente en este momento. Está en la etapa dos.
Por lo tanto, es mucho menos costoso. Solo estamos propagando ese contexto cuando los valores realmente cambian, no cuando se programan las continuaciones individuales. Esto resulta en una mejora masiva de performance. Así es como lo hacemos actualmente en Workers. Así es como quiero hacerlo en Node.
Me salté algunas diapositivas aquí, pero hay un challenge con cómo podemos implementar esto en Node en este momento. Todo esto depende de una nueva API. Es una API que ha estado en V8 durante años que estamos utilizando. Está sin documentar, muy pocas personas realmente saben sobre esta API. Elimina completamente cualquier dependencia de async hooks y promise hooks para que podamos implementar este modelo completo.
El problema es que Chromium también utiliza esta API. La forma en que la API está diseñada actualmente, solo puedes usarla para un propósito a la vez. Si Node fuera solo Node, no dependiera de Chromium en absoluto, solo por sí mismo, estaría bien. Podríamos usarlo. Pero hay cosas como Electron que utilizan tanto Node como Chromium, y están utilizando la misma instancia de V8. Dado que Chromium también está utilizando esta API a su manera, no podemos usarla en Node todavía, hasta que hagamos cambios en V8 para que realmente funcione. El cambio clave que necesitamos para hacer que funcione es permitir múltiples usos de esta API al mismo tiempo, para poder establecer estos datos contextuales y tener múltiples claves. Entonces, es algo que viene. Lo que espero es que más adelante este año, podamos hacer estos cambios en V8, y hacer de esto una mejora significativa de performance en Node, para cualquiera que esté utilizando la API de almacenamiento local asíncrono. En este momento, performance es el problema número uno con el que te vas a encontrar, si estás utilizando esta API. ¿Okay?
Entonces, ¿qué pasa con la estandarización? Esta es una muy buena pregunta. Hace un tiempo, Luca, trabajando en Dino, publicó este comentario en Twitter, me pareció bastante divertido. Vercel tiene, ya sabes, con Next.js, y dijeron que iba a ser totalmente basado en estándares, vamos a utilizar todos los estándares de la plataforma web, pero hey, requiere almacenamiento local asíncrono. El almacenamiento local asíncrono es una API específica de Node, no hay especificación para ello en absoluto aparte del código y la documentation. Porque es una API específica de Node. Pero Vercel lo ha adoptado, otras personas están comenzando a adoptarlo. Entonces, ¿qué se supone que deben hacer estos tiempos de ejecución? ¿Correcto? ¿Dino y workers y Bun, simplemente se van e implementan, siguen la iniciativa de Node e implementan todas las API específicas de Node? Resulta que sí, estamos haciendo eso, ¿verdad? Estamos, ya sabes, pero estamos implementando esa capa de compatibilidad con Node, pero lo que realmente queremos son estándares, es una API estándar para esto. Afortunadamente, TC39 está trabajando en esto. Hay una API de contexto asíncrono que se está desarrollando activamente en este momento. Está en la etapa dos.
Comments