Depuración de JS

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Spanish audio is available in the player settings
Bookmark
Rate this content

Como desarrolladores, pasamos gran parte de nuestro tiempo depurando aplicaciones, a menudo código que ni siquiera escribimos. Lamentablemente, a pocos desarrolladores se les ha enseñado cómo abordar la depuración, es algo que la mayoría de nosotros aprendemos a través de la experiencia dolorosa. La buena noticia es que _puedes_ aprender a depurar de manera efectiva, y hay varias técnicas y herramientas clave que puedes usar para depurar aplicaciones de JS y React.

This talk has been presented at React Summit 2023, check out the latest edition of this React Conference.

FAQ

Replay es un depurador de viaje en el tiempo para JavaScript que permite grabar un error una vez y luego usar la depuración de viaje en el tiempo para entender lo que realmente sucedió. Facilita la inspección de grabaciones en cualquier punto en el tiempo, añadir registros de consola e instrucciones de impresión después del hecho, y usar la depuración paso a paso.

Las diapositivas están disponibles en el blog de Mark Ericsson, blog.isquaredsoftware.com, donde puedes abrirlas y seguirlas o revisarlas más tarde.

Mark sugiere entender lo que se supone que debe hacer el sistema, reproducir el problema, debug con un plan siguiendo el método científico, no tener miedo a los errores y usar las herramientas adecuadas para la tarea. También recomienda alejarse y tomar un descanso cuando sea necesario para ver los problemas con frescura.

Replay es gratuito para código abierto e individuos, pero es de pago para empresas, ya que es desarrollado por una startup que busca generar ingresos.

Replay funciona grabando el navegador mientras este interactúa con el sistema operativo, por lo tanto, puede grabar cualquier cosa que se ejecute en el navegador, independientemente de si se usa React, Vue, Angular o JavaScript puro. También soporta mapas de fuente para mostrar cómo se veía el código original.

Replay permite grabar errores para luego analizarlos detenidamente en cualquier momento, facilita la colaboración al permitir compartir grabaciones y comentarios, y ayuda a entender mejor los problemas sin tener que reproducir el error múltiples veces.

Redux Toolkit 2.0 Beta es una nueva versión que busca modernizar el formato del paquete y el contenido del JavaScript. Incluye la eliminación de APIs obsoletas y la adición de nuevas APIs, y está diseñado para modernizar y mejorar la experiencia de desarrollo con Redux.

Mark Erikson
Mark Erikson
24 min
02 Jun, 2023

Comments

Sign in or register to post your comment.
  • Junior Usca
    Junior Usca
    globant
    replay node sigue en alfa, pero muy interesante el proyecto, lo estare probando estos meses
Video Summary and Transcription
La depuración de JavaScript es una habilidad crucial que a menudo se pasa por alto en la industria. Es importante entender el problema, reproducir el problema e identificar la causa raíz. Tener una variedad de herramientas y técnicas de depuración, como los métodos de consola y los depuradores gráficos, es beneficioso. Replay es un depurador de viaje en el tiempo para JavaScript que permite a los usuarios grabar e inspeccionar errores. Funciona con Redux, React puro e incluso código minificado con la ayuda de mapas de origen.
Available in English: Debugging JS

1. Introducción a la depuración de JavaScript

Short description:

Este es Mark Ericsson, y hoy estoy emocionado de hablarles sobre la depuración de JavaScript. Advertencia justa, probablemente tengo unos 40 minutos de contenido y como 20 minutos para pasar por él, así que voy a ir un poco rápido. Un par de cosas rápidas sobre mí. Soy un ingeniero senior de frontend en Replay, donde estamos construyendo un depurador de viaje en el tiempo para JavaScript.

Este es Mark Ericsson, y hoy estoy emocionado de hablarles sobre debugging JavaScript. Advertencia justa, probablemente tengo unos 40 minutos de contenido y como 20 minutos para pasar por él, así que voy a ir un poco rápido.

Las diapositivas ya están en mi blog, blog.isquaredsoftware.com. Siéntanse libres de abrirlo y seguirlo, o echarle un vistazo más tarde.

Un par de cosas rápidas sobre mí. Soy un ingeniero senior de frontend en Replay, donde estamos construyendo un depurador de viaje en el tiempo para JavaScript. Hablaremos más sobre eso en unos minutos. Respondo preguntas en cualquier lugar donde haya un cuadro de texto en internet, recojo cualquier enlace que parezca potencialmente útil, escribo publicaciones de blog extremadamente largas, y soy un mantenedor de Redux, pero la mayoría de la gente me conoce como ese tipo con el avatar de los Simpsons.

Esto no es una charla de Redux, pero tengo una noticia relacionada con Redux. Hace dos días, mientras estaba en el aeropuerto, publiqué Redux Toolkit 2.0 Beta. Tenemos una serie de cosas que estamos tratando de lograr en 2.0, la mayoría tiene que ver con la modernización del formato del paquete y el contenido del JavaScript. Hemos eliminado un par de APIs obsoletas. Hemos añadido varias APIs nuevas. Lo más importante que pediría es que realmente nos gustaría que la gente lo probara en sus aplicaciones ahora mismo, vean cómo funciona, denos su opinión, díganos qué cosas se rompieron, díganos si las APIs están funcionando, para que podamos avanzar hacia la versión final 2.0. No tengo un cronograma concreto. Espero que en los próximos meses, si todo va bien.

2. Principios de la Depuración

Short description:

La depuración es el proceso de encontrar problemas en tu programa e intentar averiguar qué está pasando. Como programadores, pasamos mucho tiempo intentando averiguar por qué el código que escribimos no está funcionando. Creo que el mayor problema es que nuestra industria no enseña a las personas cómo depurar. Cada problema tiene una causa y una razón, y debería ser posible averiguar por qué algo está roto. Es importante entender lo que se supone que debe hacer el sistema y poder reproducir un problema. Depurar con un plan y no entrar en pánico al encontrar errores también es crucial.

Muy bien. Hablemos de debugging. La debugging es el proceso de encontrar problemas en tu programa e intentar averiguar qué está pasando. En otras palabras, ¿por qué está roto? ¿Y cómo lo arreglamos?

Ahora, como programadores, pasamos mucho tiempo haciendo cosas que no son solo escribir code. Estamos comunicándonos con nuestro equipo. Estamos haciendo planificación, design, discusiones, revisión de code. Pasamos mucho tiempo intentando averiguar por qué el code que escribimos no está funcionando. Y sin embargo, muchos desarrolladores no se sienten cómodos haciendo esto. Y he pensado un poco en esto. Creo que el mayor problema es que nuestra industria no enseña a las personas cómo debug. ¿Cuántos de ustedes tienen un título en ciencias de la computación y sin embargo nunca tuvieron un curso de debugging? Para mí, la debugging es una habilidad absolutamente crítica para los desarrolladores. Y la buena noticia es que es algo que puedes aprender y mejorar.

Entonces, veamos algunos principios básicos de la debugging. Ahora, el título de la charla es debugging JavaScript. Estos principios son universales. Puedes aplicarlos a cualquier lenguaje y francamente puedes aplicarlos fuera de la programación también. Y el primero es que cada problema tiene una causa y una razón. Y debería ser posible averiguar por qué esta cosa está rota. Ahora, solo porque haya una causa no significa que vaya a ser fácil averiguarlo. Y hay muchas cosas que pueden complicar eso. Pero es posible. Otro es que es muy importante entender lo que se supone que debe hacer el sistema. Si un bug es algo que está mal con el sistema, tienes que saber lo que se suponía que debía hacer en primer lugar para ver que el comportamiento es incorrecto. Otro principio es que reproducir un problema es absolutamente clave. Por un lado, necesitas poder averiguar qué área del code está rota, y eso a menudo requiere un proceso de prueba y error de hacer que esta cosa se caiga una y otra vez y otra vez pero también es importante porque una vez que crees que tienes una solución, necesitas poder probar los mismos pasos y verificar que realmente funciona bien. También necesitas poder debug con un plan. Este es básicamente el método científico. No solo vayas cambiando variables aleatorias y esperando que de alguna manera vaya a mejorar. Necesitas ser muy cuidadoso e intencional sobre los cambios que haces, prueba una cosa a la vez, ve si los cambios de comportamiento realmente coinciden con lo que esperas que sea y trata de reducir dónde y por qué algo está saliendo mal. Otro problema es que los errores proporcionan información útil y sin embargo, la gente a menudo entra en pánico cuando ven esa gigantesca traza de pila.

3. Principios de Depuración

Short description:

He visto imágenes de una traza de pila de React que está minimizada y no puedes leer nada o una traza de pila de Java J2EE que tiene 500 líneas de largo y tu código son dos líneas en algún lugar en medio. No entres en pánico, intenta entenderlo. La depuración es dos veces más difícil que escribir un programa. Intenta escribir código que sea claro y fácil de entender. Los pasos para la depuración incluyen entender el problema, reproducir el problema, averiguar por qué está sucediendo, identificar la causa raíz, encontrar la mejor solución, solucionarlo y documentar el proceso. Utiliza la herramienta adecuada para el trabajo.

He visto imágenes de una traza de pila de React que está minimizada y no puedes leer nada o una traza de pila de Java J2EE que tiene 500 líneas de largo y tu code son dos líneas en algún lugar en medio. Ahora, en algún lugar de allí, hay información útil, tu code, tu archivo, línea 37, en algún lugar, pero los errores te dicen algo sobre lo que está saliendo mal. No entres en pánico, intenta entenderlo.

Y sí, literalmente, buscar en Google tu error es un buen primer paso. Hay una cita muy famosa de una de las aventuras del sistema operativo UNIX en el lenguaje C donde dice, la debugging es dos veces más difícil que escribir un programa. Así que si escribes code realmente inteligente, probablemente no seas lo suficientemente inteligente para descifrarlo tú mismo. Así que intenta escribir code que sea claro y fácil de entender para que algún tiempo después tú o uno de tus compañeros de equipo o ese becario dentro de cinco años pueda entender qué estaba sucediendo.

En general, los pasos para la debugging parecen algo así. Primero tienes que entender ¿cuál es la descripción? Alguien presentó un informe de error. ¿Qué están intentando decir realmente que está mal? Segundo, reproduce el problema. Tienes que ser capaz de encontrar pasos reproducibles que hagan que el error ocurra. Abre la aplicación, haz clic en esta pestaña, haz clic en ese botón, kaboom. Luego, y esta es la parte difícil, intenta averiguar por qué está sucediendo. Una buena táctica es algo así como una búsqueda binaria. Tenemos una aplicación completa. ¿Puedo reducirla a la mitad de la aplicación? ¿Un cuarto? ¿Un octavo? Trabaja tu camino, intenta reducir dónde en el code está sucediendo esto. Una vez que realmente crees que sabes lo que está sucediendo y has identificado algunos de los síntomas, no te detengas allí. Sigue adelante e intenta averiguar si hay un problema de causa raíz más profundo que está sucediendo. Una vez que sabes lo que está saliendo mal, entonces puedes intentar averiguar cuál es la mejor solución para intentar solucionarlo. Y aquí es donde entran las restricciones. Tal vez sea una solución de una línea. Tal vez crees que necesitas reescribir todo el subsistema, pero no tienes tiempo porque tu equipo ya está sobrecargado. Tal vez el code es realmente complicado. Intenta averiguar cuál es la cantidad correcta de esfuerzo necesario para hacer la corrección apropiada. Luego, soluciónalo de verdad. E idealmente añade más pruebas y controles para que esto no suceda en el futuro. Y finalmente, intenta documentar tanto como sea posible, ya sea en el mensaje de commit, el PR, el problema, deja información para las personas para más tarde para que entiendan qué salió mal y cómo lo solucionaste. Un par de otros consejos. Utiliza la herramienta adecuada para el trabajo. Hay muchas herramientas diferentes para usar para la debugging.

4. Herramientas y Técnicas de Depuración

Short description:

Cuantas más herramientas tengas en tu caja de herramientas, mejor equipado estarás para intentar resolver problemas. Esté dispuesto a mirar debajo del capó y entender lo que está pasando dentro. No tengas miedo. Tómate tu tiempo. Piénsalo. Es algo que puedes descifrar. Hay momentos en los que simplemente necesitas alejarte, tomar un respiro, dormir un poco, volver al día siguiente. Las declaraciones de impresión son muy fáciles de añadir. Te muestran los cambios en el sistema a lo largo del tiempo. Los depuradores gráficos te ayudan a centrarte en un trozo específico de código e inspeccionar el contenido del programa en ejecución. Los diferentes lenguajes tienen diferentes tipos de declaraciones de impresión disponibles. Puedes tener marcas de tiempo. Puedes tener diferentes niveles de registro.

Hablaremos de algunas de ellas en un segundo. Cuantas más herramientas tengas en tu caja de herramientas, mejor equipado estarás para intentar resolver problemas. Otro es que usamos muchas bibliotecas diferentes y paquetes y frameworks. A menudo los tratamos como cajas negras. Esté dispuesto a mirar debajo del capó y entender lo que está pasando dentro. Porque a menudo entender ese comportamiento hace posible ver cuál es el verdadero problema.

Otro es simplemente no tener miedo. Ves esa gigantesca traza de error, o es una parte del sistema en la que nunca has trabajado antes. Podrías entrar en pánico, especialmente si eres nuevo en el equipo. No tengas miedo. Tómate tu tiempo. Piénsalo. Es algo que puedes descifrar. Y esto es algo con lo que lucho. Es muy fácil quedar atrapado y perseguirlo. Estoy a punto de arreglarlo. Estoy a punto de arreglarlo. Y quedarse atascado. Hay momentos en los que simplemente necesitas alejarte, tomar un respiro, dormir un poco, volver al día siguiente. Ha habido momentos en los que lo arreglé en cinco minutos a la mañana siguiente después de estar atascado durante horas el día anterior.

Muy bien. Voy a tener que seguir adelante. Hay mucho debate sobre si debo usar declaraciones de impresión o depuradores gráficos? Y yo digo, ¿por qué no ambos? Ambos son herramientas maravillosas. Las declaraciones de impresión son muy fáciles de añadir. Te muestran los cambios en el sistema a lo largo del tiempo. Los depuradores gráficos te ayudan a centrarte en un trozo específico de code y a pasar por él paso a paso e inspeccionar el contenido del programa en ejecución. Ambas son excelentes herramientas para tener en tu caja de herramientas. Los diferentes lenguajes tienen diferentes tipos de declaraciones de impresión disponibles. Puedes tener marcas de tiempo. Puedes tener diferentes niveles de registro.

5. Herramientas de Depuración de JavaScript

Short description:

En JavaScript, la depuración se realiza principalmente con métodos de consola o bibliotecas de registro como Winston. La API de consola te permite imprimir objetos como tablas y agrupar mensajes. Una confusión común es que los objetos o arrays expandidos muestran su contenido en el momento de la expansión, no cuando se registraron. Las bibliotecas de JavaScript a menudo se distribuyen como archivos fuente, y los depuradores gráficos tienen comandos y botones similares. Los puntos de interrupción, los ámbitos de las variables, las funciones de la pila de llamadas y los botones de paso son características comunes. Ejemplos incluyen Chrome DevTools y VS Code.

En JavaScript, esto se hace principalmente con los métodos de console o puedes tener una biblioteca de registro como Winston. Hay diferentes métodos para diferentes niveles. La API de console también tiene cosas que te permiten hacer como imprimir objetos como una tabla, agrupar mensajes juntos. Un problema común que veo es que la gente registra un objeto o un array, y algún tiempo después lo expanden y el contenido parece diferente. En realidad te muestra lo que contenía en el momento en que lo expandiste, no en el momento en que lo registraste en primer lugar. Esto confunde a mucha gente.

Además, la mayoría de las bibliotecas de JavaScript se distribuyen como archivos fuente en disco en los modules de node. Puedes editarlos tú mismo, pero, como, trata de recordar eliminar las declaraciones de registro más tarde. La mayoría de los depuradores gráficos tienen los mismos tipos de comandos y botones en su interior. Los puntos de interrupción te permiten pausar en un cierto punto del programa. Normalmente establecerías esos haciendo clic izquierdo en un número de línea. Por lo general, hay paneles que muestran el contenido de las variables en el ámbito, algo que muestra las funciones de la pila de llamadas, y algunos botones que te permiten avanzar, entrar, salir. Como un par de ejemplos, las DevTools de Chrome tienen todos esos comandos. Tienes los puntos de interrupción y el ámbito y la pila de llamadas en el lado derecho. Tienes un marcador de punto de interrupción allí en la línea izquierda. VS Code tiene básicamente todos los mismos botones, solo que en diferentes lugares. Estas son todas piezas muy comunes para cada IDE y cada depurador.

6. Depuración de React e Introducción a Replay

Short description:

Lo más importante es entender cómo funciona el modelo mental de React con los componentes y el flujo de datos. Rastrea los datos hasta donde los encontraste. Utiliza las extensiones React DevTools y Redux DevTools para inspeccionar y depurar tu código. Mi trabajo diario es trabajar para Replay, donde estamos construyendo un verdadero depurador de viaje en el tiempo para JavaScript. Replay te permite grabar un error una vez y utilizar la depuración de viaje en el tiempo para entender lo que realmente sucedió.

Veamos, vamos a saltar un poco de esto. Un par de consejos para la depuración de React. Lo más importante es entender cómo funciona el modelo mental de React con los componentes y el flujo de datos. React renderiza componentes, los padres pasan datos como props a sus hijos, los hijos pasan datos de vuelta a sus props a través de funciones de callback. Si tu UI, si lo que ves en la pantalla está mal, o tus datos estaban incorrectos o la lógica de renderizado estaba mal, si la lógica de renderizado está bien, mira los datos. ¿De dónde vienen? Vinieron del padre, vinieron de Redux, vinieron de Apollo. Rastrea los datos hasta donde los encontraste.

Asegúrate también de usar las React DevTools. La extensión del navegador React DevTools te mostrará el árbol de componentes, te permite seleccionar un componente, inspeccionarlo y mirar sus props, estado y hooks. De manera similar, con Redux, es muy importante entender el flujo de datos de Redux, despachas acciones, los reducers actualizan el estado, la UI se vuelve a renderizar. De manera similar, hay una extensión Redux DevTools que te muestra el historial de las acciones despachadas. Para cada acción, puedes inspeccionar el contenido de la acción, el contenido del estado y la diferencia del estado. Como resultado de eso, todas estas son herramientas muy valiosas para tener en tu caja de herramientas.

Vale. Podríamos lograr esto más o menos a tiempo. Muy bien. Así que, discurso de venta de trabajo corporativo. Mi trabajo diario es trabajar para Replay. Lo mencioné. Y estamos construyendo un verdadero depurador de viaje en el tiempo para JavaScript. Es algo irónico, porque el discurso de venta original de Redux era la depuración de viaje en el tiempo, y eso es. Replay es eso como multiplicado por un millón. Una de las partes más difíciles de la depuración es que tienes que ser capaz de reproducir el problema. Y a veces eso puede llevar muchos pasos. Y estás pausado en un punto de interrupción, avanzas, te sientas, vaya, fui una línea demasiado lejos. Y ahora tienes que detener el programa y reiniciarlo y volver hasta el punto donde estabas. Y es un dolor. O el error solo ocurre en esa máquina de un desarrollador de QA un martes de febrero o algo así. Así que la idea de Replay es que te permitimos grabar un error una vez. Y luego usar la depuración de viaje en el tiempo para entender lo que realmente sucedió en eso.

7. Interfaz de usuario de Replay y flujo de trabajo de depuración

Short description:

El flujo de trabajo básico implica descargar nuestras versiones de Firefox o Chrome, grabar el error, subirlo a la nube y abrirlo en la interfaz de usuario de Replay para su inspección. La interfaz permite saltar a cualquier línea de código, ver cuántas veces se ejecutó, añadir registros de consola y utilizar la depuración paso a paso. Las características de colaboración permiten añadir comentarios y compartir declaraciones de impresión. Replay es gratuito para código abierto e individuos. En la demostración en vivo, la interfaz de usuario de Replay muestra una grabación de una aplicación Redux, permitiendo a los usuarios navegar a través de diferentes puntos en el tiempo e inspeccionar el código utilizando el modo DevTools. Los recuentos de golpes proporcionan información sobre la ejecución del código, ayudando a identificar comportamientos inesperados. La interfaz similar a la consola permite una mayor investigación.

El flujo de trabajo básico, descargas nuestras versiones de Firefox o Chrome, grabas el error, haces que suceda una vez, lo subes a la cloud, abres la grabación en la UI, y ahora puedes inspeccionar la grabación en cualquier punto en el tiempo. Puedes saltar a cualquier línea de code, puedes ver cuántas veces se ejecutó, puedes añadir console registros e instrucciones de impresión después del hecho, y puedes usar la depuración paso a paso para inspeccionar las cosas.

También hay colaboración donde puedes añadir comentarios, hacer que tus compañeros de equipo vean lo que estaba sucediendo, e incluso compartir las instrucciones de impresión que has añadido. Replay es gratuito para código abierto e individuos. De pago para empresas donde somos una startup, estamos tratando de ganar dinero realmente.

Muy bien. Ahora, la parte divertida. Vamos a hacer una demostración en vivo. Vamos, Wi-Fi. Okay. Bueno. Primer paso. Entonces, esta es la interfaz de usuario de Replay. Esta es una grabación que hice hace bastante tiempo del ejemplo del tutorial de Fundamentos de Redux. Entonces, tenemos el visor. Puedo ver cómo se veía la aplicación en el momento en que se grabó. Puedo saltar a un par de puntos diferentes en el tiempo y ver cómo se veía la interfaz de usuario. Pero puedo cambiar al modo DevTools. Y esto es básicamente como las DevTools del navegador Firefox en un navegador, porque eso es realmente donde comenzó nuestra base de código.

Entonces, esta es una aplicación Redux. Probablemente estoy interesado en los reductores. Así que vamos a encontrar el fragmento de los 'todos'. Lo primero que noté cuando abrí esto es que, además de los números de línea, tenemos todos estos recuentos de golpes. Y esos me están diciendo cuántas veces cada línea de code se ejecutó durante la grabación. Y esto empieza a decirte información útil, como tal vez esperaba que la línea se ejecutara cinco veces, pero en realidad se ejecutó como 100 veces. Eso no es bueno. O tal vez esperaba que entrara en la declaración if, pero no lo hizo. ¿Por qué? Entonces, puedo mirar el code y puedo ver que, en este ejemplo, el reductor 'todo toggled' se ejecutó, parece, tres veces. Okay, así que ahora tengo curiosidad sobre lo que estaba pasando dentro de eso. Así que puedo hacer clic en este signo más y te das cuenta de que aquí a la derecha tenemos lo que parece tu típica consola de navegador.

8. Depuración con Replay

Short description:

Puedes evaluar las declaraciones de impresión, saltar a un punto en el tiempo, inspeccionar valores y navegar por el código. Replay proporciona una lista de eventos y permite saltar al código correspondiente. También muestra el árbol del DOM y del componente React en puntos específicos en el tiempo. Esta herramienta revolucionaria de depuración ahorra tiempo y es muy recomendable. Consulta las diapositivas y recursos adicionales en el blog.

Y te das cuenta de que tenemos tres mensajes allí. Y eso es porque esa línea de code se ejecutó tres veces, y está evaluando el mensaje en cada línea. Entonces, ¿qué pasa si quiero decir, como, aquí está el nombre de la función, y quiero ver qué era el objeto de acción en cada uno de esos. Así que he editado la declaración de impresión, y la está evaluando. Ahí está la cadena y todo el objeto de acción. Y puedo expandirlo y echar un vistazo.

Bueno, ¿y si quiero saltar a un punto en el tiempo? Podría, por ejemplo, hacer clic en uno de estos, y ahora estoy pausado como un paso normal depurador dentro de esta función, y puedo mirar los valores que están en el alcance, puedo pasar el ratón sobre ellos, puedo inspeccionarlos, y tenemos el vamos a ver tenemos toda una pila abajo aquí en algún lugar. Así que podemos ver que esto fue desencadenado por algún tipo de manejador rápido de React, y estamos dentro del code de Redux.

Otra cosa que tenemos es que hay una lista de todas las diferentes veces que presioné una tecla o hice clic, y si paso el ratón sobre esto, hay un botón de saltar al code. ¿Qué hace eso? Bueno, me acaba de saltar directamente a la línea de code donde despaché donde hice un clic, ahí está mi manejador de propiedades on click, y ahora puedo empezar a inspeccionar el code aún más. Incluso tenemos el árbol del DOM en ese punto en el tiempo, y el árbol de componentes de React en ese punto en el tiempo. Y así ahora puedo pasar por toda la grabación, puedo ver qué pasó, saltar hacia atrás y hacia adelante, inspeccionar el sistema, y sólo tuve que hacer la grabación una vez. Me estoy divirtiendo mucho construyendo esta aplicación, y realmente creo que es un cambio revolucionario en cómo depuramos. Así que por favor, échale un vistazo, te ahorrará mucho tiempo. Ojalá lo hubiera tenido hace años. Muy bien. Eso es todo lo que tengo, y básicamente terminé a tiempo. Eso es impresionante. Como dije, las diapositivas están en mi blog, tengo enlaces a un montón de recursos adicionales sobre depuración. Por favor, ven y di hola, haz preguntas sobre Redux o replay o depuración o lo que sea. Muchas gracias.

9. Compatibilidad y Uso de Replay

Short description:

¿Funciona Replay con Redux o React puro? Replay funciona con todo, grabando cualquier cosa que se ejecute en el navegador. El mayor punto de fricción con Replay es la necesidad de pausar y hacer la grabación por separado. Replay tiene una capacidad limitada para ofuscar datos, pero se planea una mejor versión. Los registros de consola y los depuradores se utilizan para diferentes propósitos. Replay puede ser utilizado con código minificado.

Muchas preguntas, ¿por dónde empezamos? Aquí vamos. ¿Replay solo funciona con Redux o también con React puro? Replay funciona con todo. Replay funciona grabando el navegador hablando con el sistema operativo. Así que literalmente cualquier cosa que se ejecute en el navegador, Replay lo ha grabado. Tenemos algunas integraciones específicas de React, como las herramientas de desarrollo, pero no importa si estás usando React, Vue, Angular, JS puro, lo que sea, si se ejecutó en el navegador nosotros con las excepciones de WebGL y audio aún no podemos hacerlo.

Esta es una pregunta divertida. ¿Es esta la nueva herramienta de desarrollo y podemos reemplazar completamente la antigua? Sí, no, tal vez. La verdad es que el mayor punto de fricción con Replay en este momento es que tienes que pausar y hacer la grabación y luego abrirla por separado. Cuando estoy trabajando en una característica, todavía estoy usando las herramientas de desarrollo del navegador para investigar eso mientras estoy escribiendo el code. Una vez que he escrito algo, entonces usar Replay para investigar lo que pasó después es mucho más fácil. Tiene sentido.

Esto es muy interesante. ¿Puede Replay ofuscar datos sensibles o confidenciales antes de enviar el replay a la cloud? Creo que tenemos una capacidad muy limitada para ofuscar en este momento. Creo que una mejor versión de eso está en nuestro mapa de ruta para finales de este año, principios del próximo, creo. Genial. Estaría muy emocionado por eso. Esperemos. Espero que no me lo tomes a mal. No. No es contractual. Oh. Esta es una buena. ¿Usas console log? Yo uso console log, yo debug. Como dije, depende de cuál sea la situación. Los registros son geniales para ver paso a paso lo que pasó en mi aplicación, la depuración GUI, los depuradores son buenos para profundizar en una pieza en particular, así que hago ambas cosas. Soy un gran fan de console log. Tú y mucha otra gente. Lo sé.

10. Uso de Replay con Código Minificado

Short description:

Replay puede ser utilizado con código minificado. Registra lo que sucedió en el navegador, independientemente del modo de construcción. Los mapas de fuente son importantes para el replay ya que nos permiten mostrar el código original junto al código minificado grabado.

Es solo para los rápidos, ¿sabes? Respondimos a esa. ¿Puede Replay ser utilizado con code minificado? Absolutamente, sí. Así que lo mismo que dije hace un minuto, Replay registra lo que sucedió en el navegador. No importa si es una construcción en modo de desarrollo, construcción en modo de producción, lo que sea. De hecho, en Replay, ayer en JS Nation, Jesselyn Yeen dio una gran charla sobre debugging y mencionó los mapas de fuente que le dicen al depurador cómo se veía el code minificado. Aquí está cómo se veía el code original. Y nos encantan los mapas de fuente en Replay. Así que Replay también depende de los mapas de fuente. Si tu aplicación tenía mapas de fuente junto a ella, registra el code minificado que se ejecutó pero nosotros luego usamos los mapas de fuente para mostrarte la aplicación original. Un par más en el tema de ¿esto funciona con? He visto electron, he visto ¿funciona para debug el backend, um, espera había uno más. ¿Qué pasa con las aplicaciones basadas en canvas y qué pasa con wasm? Bueno, ahora mismo, el navegador de grabación principal de Replay es nuestro fork de Firefox que funciona para Mac, Windows y Linux. Tenemos soporte de Chrome para Linux que es bastante bueno. Nuestro objetivo principal para eso ahora mismo es el uso de CI. Tenemos, tenemos versiones alfa tempranas de Chrome para Windows y Mac también. Tenemos soporte de Node para Linux a nivel alfa. Lo he usado para grabar algunas pruebas de jest y debug ellas. Nuestro objetivo es llevar el soporte de Chrome a toda velocidad en los próximos meses y hacer de ese nuestro navegador de grabación principal. Queremos hacer Electron eventualmente pero eso necesita esperar hasta que Chrome esté terminado y luego probablemente después- ¿Qué pasa con una situación de plugin de VS Code? Hipotéticamente algún día. Hipotéticamente algún día. Una pregunta más y luego te enviaré a tu stand. ¿Ya estás debugging Replay con Replay mismo? Oh, Dios mío. Así que te lo dije. Me uní a esta empresa porque creo en esta herramienta. Y rutinariamente usamos Replay para debug Replay. Como básicamente cada problema que presentamos internamente necesita tener una grabación de Replay adjunta al problema. Has visto la película Inception. Hay veces donde como cuatro o cinco niveles de grabaciones profundas sabes un replay de un replay de un replay de un... A veces es difícil llevar la cuenta de ¿a qué nivel estoy intentando debug aquí? Muchas gracias por tu tiempo. Y gracias por compartir Replay con nosotros. Mark estará en su stand después de esto en la parte de atrás. Así que otro gran aplauso por favor.

Available in other languages:

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

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
No resuelvas problemas, elimínalos
React Advanced 2021React Advanced 2021
39 min
No resuelvas problemas, elimínalos
Top Content
Kent C. Dodds discusses the concept of problem elimination rather than just problem-solving. He introduces the idea of a problem tree and the importance of avoiding creating solutions prematurely. Kent uses examples like Tesla's electric engine and Remix framework to illustrate the benefits of problem elimination. He emphasizes the value of trade-offs and taking the easier path, as well as the need to constantly re-evaluate and change approaches to eliminate problems.
Uso efectivo de useEffect
React Advanced 2022React Advanced 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Depuración Web Moderna
JSNation 2023JSNation 2023
29 min
Depuración Web Moderna
Top Content
This Talk discusses modern web debugging and the latest updates in Chrome DevTools. It highlights new features that help pinpoint issues quicker, improved file visibility and source mapping, and ignoring and configuring files. The Breakpoints panel in DevTools has been redesigned for easier access and management. The Talk also covers the challenges of debugging with source maps and the efforts to standardize the source map format. Lastly, it provides tips for improving productivity with DevTools and emphasizes the importance of reporting bugs and using source maps for debugging production code.
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
React Advanced 2021React Advanced 2021
47 min
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
Top Content
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
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.

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 🤐)
Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
React, TypeScript y TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript y TDD
Top Content
Featured Workshop
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Domina los Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Domina los Patrones de JavaScript
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
Masterclass Web3 - Construyendo Tu Primer Dapp
React Advanced 2021React Advanced 2021
145 min
Masterclass Web3 - Construyendo Tu Primer Dapp
Top Content
Featured Workshop
Nader Dabit
Nader Dabit
En esta masterclass, aprenderás cómo construir tu primer dapp de pila completa en la blockchain de Ethereum, leyendo y escribiendo datos en la red, y conectando una aplicación de front end al contrato que has desplegado. Al final de la masterclass, entenderás cómo configurar un entorno de desarrollo de pila completa, ejecutar un nodo local e interactuar con cualquier contrato inteligente usando React, HardHat y Ethers.js.
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