# Analiza el funcionamiento de tus aplicaciones Shiny con {reactlog}

> Las aplicaciones Shiny funcionan con reactividad: una cadena de causalidad que va desde los inputs de tu app, pasando por las expresiones reactivas (objetos de R que se actualizan automáticamente cuando cambian sus dependencias), hasta los outputs que se muestran en la interfaz de usuario. Con {reactlog} puedes explorar visualmente esta cadena o red de dependencias, para entender cómo tu aplicación se va generando, analizar las dependencias entre elementos, y buscar posibles optimizaciones.

- URL: https://bastianolea.rbind.io/blog/shiny_reactlog/
- Fecha: 2025-11-14
- Autor: Bastián Olea Herrera
- Etiquetas: shiny, optimización
- Recursos: [Paquete](https://rstudio.github.io/reactlog/)

---

Las aplicaciones Shiny funcionan con **[reactividad](https://shiny.posit.co/r/articles/build/reactivity-overview/)**: una cadena de causalidad que va desde los _inputs_ de tu app, pasando por las expresiones reactivas (objetos de R que se actualizan automáticamente cuando cambian sus dependencias), hasta los _outputs_ que se muestran en la interfaz de usuario. 

![](https://bastianolea.rbind.io/blog/shiny_reactlog/shiny_esquema.png)

Cuando programamos una app Shiny vamos haciendo éste tipo de **conexiones**: 

> estos dos _inputs_ van a hacer que en este `reactive()` se filtren los datos, y el resultado del `reactive()` va a usarse para generar un _output_ en forma de gráfico.

Con `{reactlog}` puedes **explorar visualmente** esta cadena o red de dependencias, para entender cómo tu aplicación se va generando, analizar las dependencias entre elementos, y buscar posibles optimizaciones.

Para activar `{reactlog}`, antes de ejecutar tu app, ejecuta lo siguiente:

```r
reactlog::reactlog_enable()
``` 

Luego ejecuta tu aplicación normalmente, o simplemente déjala cargarse, y tienes dos opciones:

1. Presiona `Ctrl + F3` (o `Cmd + F3` en Mac) **mientras la aplicación se ejecuta** para abrir la visualización de reactlog en una nueva ventana.
2. Después de **cerrar la aplicación**, ejecuta `reactlog::reactlog_show()` para abrir la visualización.

Aparecerá un diagrama de nodos y conexiones que representan los distintos elementos de tu aplicación y sus relaciones entre sí. 

![](https://bastianolea.rbind.io/blog/shiny_reactlog/reactlog_4.png)

En esta visualización vemos al lado izquierdo los _inputs_, que usualmente son el principio de la **cadena de reactividad**. Estos _inputs_ se conectan a las **expresiones reactivas** que usan sus valores, y éstas a su vez se conectan con otras expresiones reactivas, o con _outputs_, que salen al lado derecho.

Recordemos que, en Shiny, la reactividad va **desde el final hacia el principio**: todo parte porque existen _outputs_ que requieren los resultados de elementos reactivos (datos, cálculos), las cuales a su vez dependen de otros _inputs_, etc., y así se van evaluando todas las operaciones hasta que la app queda cargada (_idle_).

**Publicación relacionada:** [Tutorial: Crea aplicaciones web interactivas en R con Shiny](https://bastianolea.rbind.io/blog/shiny/index.md): Shiny es un paquete para desarrollar aplicaciones web interactivas con R, generalmente centradas en el análisis y visualización de datos. Shiny le da vida a todo lo que hayas desarrollado con R sin…

Puedes hacer clic en los nodos para ver **detalles** adicionales, como el tiempo que tomó cada operación, las dependencias, y más.

![](https://bastianolea.rbind.io/blog/shiny_reactlog/reactlog_1_featured.png)

Puedes hacer doble clic en los nodos para que el gráfico se reordene y muestre las **dependencias** directas.

![](https://bastianolea.rbind.io/blog/shiny_reactlog/reactlog_3.png)

En la parte superior, puedes **avanzar o retroceder** para ir viendo el estado de tu aplicación en distintos momentos de su ejecución; por ejemplo, empezar desde el inicio e ir viendo cómo los outputs van llamando a sus dependencias hasta que la app se carga completa.

[Video](https://bastianolea.rbind.io/blog/shiny_reactlog/reactlog_shiny.mp4)

En este video vemos el funcionamiento interno de una aplicación compleja, y arriba vemos que todo pasó en menos de 2 segundos.

**Publicaciones sobre shiny:**

- [Plantilla de mapa interactivo de Chile con R, Shiny y MapGL](https://bastianolea.rbind.io/blog/2026-10-14/index.md)
- [Probando visores de mapas interactivos en R con {mapgl}](https://bastianolea.rbind.io/blog/2026-07-29/index.md)
- [Crea un chatbot de inteligencia artificial con R](https://bastianolea.rbind.io/blog/shinychat/index.md)
- [Tutorial: Crea aplicaciones web interactivas en R con Shiny](https://bastianolea.rbind.io/blog/shiny/index.md)
- [Usando tipografías personalizadas en aplicaciones Shiny](https://bastianolea.rbind.io/blog/shiny_tipografias/index.md)

## Recursos 
- [Posit: Reactivity - An overview](https://shiny.posit.co/r/articles/build/reactivity-overview/)
- [Mastering Shiny: Basic reactivity](https://mastering-shiny.org/basic-reactivity.html)
