Ejecución híbrida: mezcla de contenido prerenderizado y en vivo
Combinación de datos de tiempo de compilación con interactividad del lado del cliente
Aprenda a crear documentos interactivos híbridos que combinen contenido prerrenderizado con ejecución de código en tiempo real en el lado del cliente. Este tutorial explica cómo generar fuentes de datos en tiempo de compilación mediante OJS, importarlas a celdas de código interactivo y pasar datos entre entornos R y Python.
La ejecución híbrida es una técnica avanzada que permite optimizar los documentos interactivos mediante la renderización previa de cálculos pesados en el momento de la compilación, al tiempo que se mantiene la interactividad en tiempo real en el lado del cliente. Este enfoque mejora los tiempos de carga del documento y la capacidad de respuesta, al tiempo que sigue proporcionando funciones dinámicas al usuario.
1. Visión general
Los documentos interactivos a menudo requieren equilibrar el rendimiento y la interactividad. Al precomputar los datos y los resultados durante la construcción del documento (utilizando fuentes de datos OJS) y luego pasar esos datos a las celdas de código en vivo que se ejecutan en el navegador a través de WebAssembly, puede lograr velocidad e interactividad.
Principales ventajas:
Eficiencia: Los cálculos pesados se realizan una vez durante el tiempo de compilación, lo que reduce la sobrecarga en tiempo de ejecución.
Interactividad: Los usuarios siguen disfrutando de actualizaciones receptivas y en vivo para partes del documento.
Optimización de recursos: Minimiza los cálculos redundantes en el lado del cliente.
2. Fuentes de datos OJS en tiempo de compilación
Quarto Live soporta la exportación de datos como fuentes de datos OJS. Esto significa que puede evaluar el código en tiempo de compilación (por ejemplo, en un bloque de código R) y exportar los resultados para su uso en celdas interactivas más tarde.
Ejemplo: Pre-representación de una fuente de datos en R
Código fuente:
```{r}# Vista previa del conjunto de datos ToothGrowthhead(ToothGrowth)# Exportar ToothGrowth como fuente de datos OJSojs_define(ToothGrowth)```El conjunto de datos ToothGrowth está ahora disponible como una variable OJS:```{ojs}ToothGrowth```
Resultados:
En R, el código muestra una vista previa del conjunto de datos y lo exporta.
En una celda OJS, la variable ToothGrowth es ahora accesible para su posterior procesamiento en el lado del cliente.
# Vista previa del conjunto de datos ToothGrowthhead(ToothGrowth)
# Exportar ToothGrowth como fuente de datos OJSojs_define(ToothGrowth)
El conjunto de datos ToothGrowth está ahora disponible como una variable OJS:
ToothGrowth
3. Importación de datos de tiempo de compilación a celdas de código en vivo
Una vez que tenga una fuente de datos OJS, puede importarla de nuevo a un bloque de código interactivo R o Python utilizando la opción de celda input. Esto permite seguir procesando o visualizando datos prerrenderizados en el lado del cliente.
Ejemplo: Visualización en vivo usando datos pre-renderizados
hybrid.qmd
```{webr}#| input:#| - ToothGrowth# Filtrar los datos de ToothGrowth para dosis específicas y crear un gráficodata_filtered <- ToothGrowth |> dplyr::filter(dose %in% c(0.5, 2))boxplot(len ~ dose, data = data_filtered)head(data_filtered)```
Nota
En este ejemplo, el conjunto de datos ToothGrowth pre-renderizado se importa de nuevo a la celda interactiva R para su posterior análisis.
4. Paso de datos entre motores
El enfoque híbrido también permite la comunicación entre diferentes motores WebAssembly (por ejemplo, entre R y Python). Los datos procesados en un motor pueden pasarse a otro, lo que garantiza la coherencia y una interactividad sin fisuras.
Ejemplo: Compartir datos de R a Python
Código fuente:
```{webr}#| edit: false#| define:#| - mpg# Procesar y exportar un subconjunto del conjunto de datos mtcarsmpg <- mtcars |> dplyr::select(mpg, hp) |> dplyr::filter(mpg < 25)``````{pyodide}#| edit: false#| input:#| - mpg# Importe los datos exportados en Python y tracítelosimport matplotlib.pyplot as pltimport pandas as pddf = pd.DataFrame(mpg)plt.plot(df['mpg'], df['hp'], 'o')plt.title("MPG vs HP")plt.xlabel("Miles Per Gallon")plt.ylabel("Horsepower")plt.show()```
Resultados:
En el bloque R, el conjunto de datos mpg se procesa y exporta.
En el bloque de Python, se importa y visualiza el conjunto de datos mpg, lo que demuestra el paso de datos entre motores.
5. Mejores prácticas para la ejecución híbrida
Separar bloques estáticos e interactivos:
Se separan claramente los cálculos en tiempo de compilación (que pueden almacenarse en caché) de las celdas de código interactivo en vivo.
Uso eficaz de las variables OJS:
Defina fuentes de datos OJS para el procesamiento de datos pesados y, a continuación, importe estas fuentes en celdas interactivas para su visualización y análisis posterior.
Optimizar el rendimiento:
Preprocese tanto contenido estático como sea posible y limite los cálculos en tiempo real a lo necesario para la interactividad del usuario.
Pruebas en distintos entornos:
Verifique que los datos pasan correctamente entre los bloques R y Python, y que tanto los elementos pre-renderizados como los vivos funcionan como se esperaba.
Referencia de opciones de celda
Exploración en profundidad de las opciones de configuración avanzadas para bloques de código interactivos.
Conclusión
La ejecución híbrida permite aprovechar lo mejor de ambos mundos: resultados estáticos prerrenderizados para cálculos pesados y elementos interactivos en vivo para la exploración dinámica. Mediante la transferencia de datos a través de variables OJS y el paso de datos entre diferentes motores WebAssembly, puede crear documentos interactivos eficaces y con gran capacidad de respuesta. Experimenta con estas técnicas para crear contenidos ricos e interactivos que funcionen bien y se adapten fácilmente.
Explorar más artículos
Nota
Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.