Depuración de JS

Rate this content
Bookmark

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.

Mark Erikson
Mark Erikson
24 min
02 Jun, 2023

Comments

Sign in or register to post your comment.

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

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.

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

Don't Solve Problems, Eliminate Them
React Advanced Conference 2021React Advanced Conference 2021
39 min
Don't Solve Problems, Eliminate Them
Top Content
Humans are natural problem solvers and we're good enough at it that we've survived over the centuries and become the dominant species of the planet. Because we're so good at it, we sometimes become problem seekers too–looking for problems we can solve. Those who most successfully accomplish their goals are the problem eliminators. Let's talk about the distinction between solving and eliminating problems with examples from inside and outside the coding world.
Scaling Up with Remix and Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Scaling Up with Remix and Micro Frontends
Top Content
Do you have a large product built by many teams? Are you struggling to release often? Did your frontend turn into a massive unmaintainable monolith? If, like me, you’ve answered yes to any of those questions, this talk is for you! I’ll show you exactly how you can build a micro frontend architecture with Remix to solve those challenges.
Using useEffect Effectively
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
Modern Web Debugging
JSNation 2023JSNation 2023
29 min
Modern Web Debugging
Top Content
Few developers enjoy debugging, and debugging can be complex for modern web apps because of the multiple frameworks, languages, and libraries used. But, developer tools have come a long way in making the process easier. In this talk, Jecelyn will dig into the modern state of debugging, improvements in DevTools, and how you can use them to reliably debug your apps.
Design Systems: Walking the Line Between Flexibility and Consistency
React Advanced Conference 2021React Advanced Conference 2021
47 min
Design Systems: Walking the Line Between Flexibility and Consistency
Top Content
Design systems aim to bring consistency to a brand's design and make the UI development productive. Component libraries with well-thought API can make this a breeze. But, sometimes an API choice can accidentally overstep and slow the team down! There's a balance there... somewhere. Let's explore some of the problems and possible creative solutions.
React Concurrency, Explained
React Summit 2023React Summit 2023
23 min
React Concurrency, Explained
Top Content
React 18! Concurrent features! You might’ve already tried the new APIs like useTransition, or you might’ve just heard of them. But do you know how React 18 achieves the performance wins it brings with itself? In this talk, let’s peek under the hood of React 18’s performance features: - How React 18 lowers the time your page stays frozen (aka TBT) - What exactly happens in the main thread when you run useTransition() - What’s the catch with the improvements (there’s no free cake!), and why Vue.js and Preact straight refused to ship anything similar

Workshops on related topic

React Performance Debugging Masterclass
React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Hooks Tips Only the Pros Know
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React, TypeScript, and TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
Web3 Workshop - Building Your First Dapp
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
Nader Dabit
Nader Dabit
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
Designing Effective Tests With React Testing Library
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
Josh Justice
Josh Justice
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn
Remix Fundamentals
React Summit 2022React Summit 2022
136 min
Remix Fundamentals
Top Content
Featured WorkshopFree
Kent C. Dodds
Kent C. Dodds
Building modern web applications is riddled with complexity And that's only if you bother to deal with the problems
Tired of wiring up onSubmit to backend APIs and making sure your client-side cache stays up-to-date? Wouldn't it be cool to be able to use the global nature of CSS to your benefit, rather than find tools or conventions to avoid or work around it? And how would you like nested layouts with intelligent and performance optimized data management that just works™?
Remix solves some of these problems, and completely eliminates the rest. You don't even have to think about server cache management or global CSS namespace clashes. It's not that Remix has APIs to avoid these problems, they simply don't exist when you're using Remix. Oh, and you don't need that huge complex graphql client when you're using Remix. They've got you covered. Ready to build faster apps faster?
At the end of this workshop, you'll know how to:- Create Remix Routes- Style Remix applications- Load data in Remix loaders- Mutate data with forms and actions