Una Fuga en el Shell – Cómo la Refactorización del Autocomplete Nos Rompió y Cómo lo Arreglamos

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2026
November 17 - 20, 2026
New York, US & Online
Upcoming event
React Summit US 2026
React Summit US 2026
November 17 - 20, 2026. New York, US & Online
Bookmark
Rate this content
Sentry
Promoted
Code breaks, fix it faster

Crashes, slowdowns, regressions in prod. Seer by Sentry unifies traces, replays, errors, profiles to find root causes fast.

Get started

Mejorar el autocomplete en el CLI de base de datos de MongoDB parecía una gran idea. Pero cuando el equipo intentó activar el feature flag, las cosas rápidamente comenzaron a complicarse: Una historia de memory leaks, bugs que tocan el núcleo mismo de JavaScript como lenguaje, y lecciones duramente aprendidas sobre testing y rendimiento.

This talk has been presented at Web Engineering Summit 2026, check out the latest edition of this Tech Conference.

Anna Henningsen
Anna Henningsen
26 min
11 Jun, 2026

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Encantado de hablar sobre JavaScript y Mongosh, un CLI de base de datos para MongoDB. Queríamos mejorar el autocomplete. Desafíos con errores de falta de memoria durante las pruebas. La depuración involucró reducir el tamaño del heap y usar flags de Node.js para el análisis de memoria. Comprender los desafíos de retención de memoria en JavaScript. Solucionar errores de retención de memoria en el REPL del núcleo de Node.js para mejorar la gestión de memoria. Introducción de Finalization Registry y V8.QueryObjects para observar la finalización de objetos en JavaScript. Utilización de HeapSnapshots para la depuración de memory leaks e integración de IA. Desafíos en la comprensión y depuración de aplicaciones. Brecha en las pruebas de la versión de autocomplete con variaciones de feature flag. Formas confiables de vaciar GC antes de la inspección del heap usando v8.get heap snapshot y el flag de Node.js.

1. Overview of Database CLI Autocomplete

Short description:

Encantado de hablar sobre JavaScript y Mongosh, un CLI de base de datos para MongoDB. Quería mejorar el autocompletado. El plan involucraba usar el motor de autocompletado de TypeScript para una mejor funcionalidad.

Muy bien. Bueno, me alegra que tantas personas estén aquí para escucharme hablar sobre JavaScript. Siempre me encanta eso. Pero sí, de todos modos, este soy yo. Puedes encontrarme en Blue Sky si quieres contactarme en algún momento después de la conferencia. Tendré las diapositivas en línea si quieres consultar algo después. Y de lo contrario, sí, este soy yo.

Antes de que entremos en los problemas reales con los que nos encontramos, déjame darte un pequeño resumen de lo que realmente queríamos hacer. Puede que sepas si alguna vez has usado MongoDB que tenemos un CLI de base de datos que puedes usar para interactuar con tu base de datos. Esto no es como una charla de producto de MongoDB, pero quiero darte el contexto de lo que estoy hablando. De todos modos, sí, nuestro CLI de base de datos se llama Mongosh, cualquiera de los dos está bien. Así que puedes escribir JavaScript en este CLI de base de datos para interactuar con tu base de datos. Y en algún momento pensamos, bueno, está bien, tenemos un autocompletado rudimentario en esto, pero ¿no sería genial si el autocompletado en nuestro CLI pudiera ser mucho más consciente del contexto y mucho más útil para nuestros usuarios?

Por ejemplo, si tienes este documento almacenado en tu base de datos donde tienes un pedido y un cliente y potencialmente muchos otros campos que no serían relevantes aquí, y luego podrías autocompletar en estos campos después de hacer una llamada como esta. Eso debería ser posible en teoría, ¿verdad? Y entonces estábamos como, está bien, ya tenemos autocompletado, pero podríamos hacer uno mucho, mucho mejor. Así que comenzamos a tener un plan, y la primera idea fue, bueno, está bien, hay un buen autocompletador para JavaScript que millones de personas usan todos los días, y todos en esta sala lo han usado miles de veces, que es como el motor de autocompletado de TypeScript, ¿verdad?

2. Challenges with Autocompletion Testing

Short description:

Analizando el esquema de la base de datos del usuario para autocompletar en el CLI. Desafíos con errores de falta de memoria durante las pruebas. La depuración involucró reducir el tamaño del heap y usar banderas de Node.js para el análisis de memoria.

Y entonces pensamos, bueno, podríamos simplemente aplicar esto a la base de datos, como a la entrada de nuestro CLI, ¿verdad? No debería ser muy difícil. Así que nuestro plan que ideamos fue como, bueno, vamos a analizar el esquema de la base de datos del usuario para tener una idea de cómo lucen sus documentos. Tenemos una idea bastante buena de cómo luce nuestra API, solo necesitamos poner eso en TypeScript en un formato que sea comprensible para, sí, para el autocompletador de TypeScript que se almacena y guarda como archivos DTS regulares, así que nada demasiado sofisticado, o al menos, como, quiero decir, estos no son archivos reales, están completamente en memoria, pero el mismo concepto.

Y luego tomamos estos archivos DTS, tomamos la entrada del usuario, y los pasamos al autocompletador de TypeScript, ¿verdad? Y eso suena lo suficientemente fácil, con suerte. Y sí, si pruebo esto ahora mismo con la versión actual de nuestro CLI, en realidad autocompleta los nombres de los campos cuando hago tap tap dentro del CLI, así que encantador. Y todo el crédito donde se debe, la mayor parte del trabajo de implementación para esto fue realmente hecho por mi compañero de trabajo que está aquí sentado viéndome hablar sobre su trabajo. Pero sí, de todos modos, esto es como, obviamente hay más en ello, porque de lo contrario habría terminado después de dos minutos de hablar, ¿verdad?

Y entonces, bueno, sí, funciona. ¿O no? Bueno, implementamos esto, y lo probamos, y funcionó bien, y lo pusimos detrás de una bandera de característica, y le dijimos a la gente, oye, si trabajas en MongoDB, si quieres probar esto realmente, por favor hazlo, este es un nuevo autocompletador. Y así, antes de publicar esto, solo, ya sabes, haciéndotelo saber. De todos modos, luego, después de un par de meses de probarlo internamente, creo que decidimos cambiar la bandera de característica, y eso no salió bien. Así que lo que estás viendo es, bueno, nuestras pruebas comenzaron a fallar.

QnA

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Solicitudes de Red con Cypress
TestJS Summit 2021TestJS Summit 2021
33 min
Solicitudes de Red con Cypress
Top Content
Cecilia Martinez, a technical account manager at Cypress, discusses network requests in Cypress and demonstrates commands like cydot request and SCI.INTERCEPT. She also explains dynamic matching and aliasing, network stubbing, and the pros and cons of using real server responses versus stubbing. The talk covers logging request responses, testing front-end and backend API, handling list length and DOM traversal, lazy loading, and provides resources for beginners to learn Cypress.
Optimización de juegos HTML5: 10 años de aprendizaje
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Optimización de juegos HTML5: 10 años de aprendizaje
Top Content
PlayCanvas is an open-source game engine used by game developers worldwide. Optimization is crucial for HTML5 games, focusing on load times and frame rate. Texture and mesh optimization can significantly reduce download sizes. GLTF and GLB formats offer smaller file sizes and faster parsing times. Compressing game resources and using efficient file formats can improve load times. Framerate optimization and resolution scaling are important for better performance. Managing draw calls and using batching techniques can optimize performance. Browser DevTools, such as Chrome and Firefox, are useful for debugging and profiling. Detecting device performance and optimizing based on specific devices can improve game performance. Apple is making progress with WebGPU implementation. HTML5 games can be shipped to the App Store using Cordova.
How React Compiler Performs on Real Code
React Advanced 2024React Advanced 2024
31 min
How React Compiler Performs on Real Code
Top Content
I'm Nadia, a developer experienced in performance, re-renders, and React. The React team released the React compiler, which eliminates the need for memoization. The compiler optimizes code by automatically memoizing components, props, and hook dependencies. It shows promise in managing changing references and improving performance. Real app testing and synthetic examples have been used to evaluate its effectiveness. The impact on initial load performance is minimal, but further investigation is needed for interactions performance. The React query library simplifies data fetching and caching. The compiler has limitations and may not catch every re-render, especially with external libraries. Enabling the compiler can improve performance but manual memorization is still necessary for optimal results. There are risks of overreliance and messy code, but the compiler can be used file by file or folder by folder with thorough testing. Practice makes incredible cats. Thank you, Nadia!

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn
Construyendo un Sistema RAG en Node.js: Bases de Datos Vectoriales, Embeddings y Chunking
Node Congress 2025Node Congress 2025
98 min
Construyendo un Sistema RAG en Node.js: Bases de Datos Vectoriales, Embeddings y Chunking
Featured Workshop
Alex Korzhikov
Pavlik Kiselev
2 authors
Los Modelos de Lenguaje Grande (LLMs) son poderosos, pero a menudo carecen de conocimiento en tiempo real. La Generación Aumentada por Recuperación (RAG) cierra esta brecha al obtener información relevante de fuentes externas antes de generar respuestas. En esta masterclass, exploraremos cómo construir un pipeline RAG eficiente en Node.js utilizando feeds RSS como fuente de datos. Compararemos diferentes bases de datos vectoriales (FAISS, pgvector, Elasticsearch), métodos de embedding y estrategias de prueba. También cubriremos el papel crucial del chunking: dividir y estructurar datos de manera efectiva para un mejor rendimiento de recuperación.Requisitos Previos- Buen entendimiento de JavaScript o TypeScript- Experiencia con Node.js y desarrollo de API- Conocimientos básicos de bases de datos y LLMs son útiles pero no requeridos
Agenda📢 Introducción a RAG💻 Demo - Aplicación de Ejemplo (RAG con Feeds RSS)📕 Bases de Datos Vectoriales (FAISS, pgvector, Elasticsearch) y Embeddings🛠️ Estrategias de Chunking para Mejor Recuperación🔬 Pruebas y Evaluación de Pipelines RAG (Precisión, Recall, Rendimiento)🏊‍♀️ Consideraciones de Rendimiento y Optimización🥟 Resumen y Preguntas y Respuestas
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
React Summit 2022React Summit 2022
117 min
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
Top Content
Workshop
Yevheniia Hlovatska
Yevheniia Hlovatska
A diferencia de las pruebas unitarias, las pruebas de extremo a extremo buscan interactuar con su aplicación tal como lo haría un usuario real. Y como todos sabemos, puede ser bastante desafiante. Especialmente cuando hablamos de aplicaciones móviles.
Las pruebas dependen de muchas condiciones y se consideran lentas e inestables. Por otro lado, las pruebas de extremo a extremo pueden dar la mayor confianza de que su aplicación está funcionando. Y si se hace correctamente, puede convertirse en una herramienta increíble para aumentar la velocidad del desarrollador.
Detox es un marco de pruebas de extremo a extremo en caja gris para aplicaciones móviles. Desarrollado por Wix para resolver el problema de la lentitud e inestabilidad y utilizado por React Native en sí como su herramienta de pruebas E2E.
Únete a mí en esta masterclass para aprender cómo hacer que tus pruebas de extremo a extremo móviles con Detox sean excelentes.
Prerrequisitos- iOS/Android: MacOS Catalina o más reciente- Solo Android: Linux- Instalar antes de la masterclass
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
Workshop
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
Masterclass de Pruebas de API con Postman
TestJS Summit 2023TestJS Summit 2023
48 min
Masterclass de Pruebas de API con Postman
Top Content
WorkshopFree
Pooja Mistry
Pooja Mistry
En el panorama siempre en evolución del desarrollo de software, garantizar la fiabilidad y funcionalidad de las API se ha vuelto primordial. "Pruebas de API con Postman" es una masterclass completa diseñada para equipar a los participantes con los conocimientos y habilidades necesarios para sobresalir en las pruebas de API utilizando Postman, una herramienta poderosa ampliamente adoptada por profesionales en el campo. Esta masterclass profundiza en los fundamentos de las pruebas de API, avanza a técnicas de prueba avanzadas y explora la automatización, las pruebas de rendimiento y el soporte multiprotocolo, proporcionando a los asistentes una comprensión holística de las pruebas de API con Postman.
Únete a nosotros para esta masterclass para desbloquear todo el potencial de Postman para las pruebas de API, agilizar tus procesos de prueba y mejorar la calidad y fiabilidad de tu software. Ya seas un principiante o un probador experimentado, esta masterclass te equipará con las habilidades necesarias para sobresalir en las pruebas de API con Postman.