learning - ¿Perfiles de código para la aplicación Shiny?
shiny r pdf (2)
Para una aplicación web R Shiny, ¿cuáles son algunas buenas formas de ejecutar perfiles de código que muestran las partes del código Shiny que están tomando el mayor tiempo de procesamiento?
Tengo una aplicación Shiny grande, gorda y compleja, y me gustaría descubrir en qué parte de este laberinto de código estoy ralentizando mi aplicación Shiny. Probé Rprof y profr pero no obtuve mucha información de ellos.
Algunas ideas (aproximadas):
- Perfilar la aplicación en el navegador podría ayudar. Tengo una aplicación bastante grande que usa navbarPage y la velocidad de compilación de la página se estaba volviendo lenta. El uso de perfiles en Chrome (herramientas de desarrollador) identificó al "culpable". Una solución / mejora está en proceso https://github.com/rstudio/shiny/issues/381#issuecomment-33750794
- Ejecute el generador de perfiles desde una ventana de código en su aplicación. Uso del paquete shinyAce ( https://github.com/trestletech/shinyAce ) Puedo editar (y ejecutar) el código, incluidos los perfiles desde dentro de la aplicación (es decir, reactivos de llamada, etc.). Ver el enlace a continuación (R> Código). Tenga en cuenta que la evaluación del código está desactivada en el servidor, pero el código fuente de la aplicación está en github si desea probar esto (consulte la página Acerca de).
- Escriba su código en funciones R regulares que son llamadas por funciones reactivas. Estoy en el proceso de reescribir mi aplicación para que pueda usar knitr para ''investigación reproducible'' (R> Informe). Esta reestructuración facilita el uso de bibliotecas de perfiles de R (estudio) sin iniciar la aplicación.
- Rselenium es una interfaz R para Selenium, herramientas de prueba para aplicaciones web ( https://github.com/johndharrison/RSelenium ). Acabo de empezar a usar esto, pero quizás podrías usar esto con algo así como system.time para comparar velocidades para diferentes componentes.
De mis experiencias:
- Plugin print () en las funciones Puede averiguar qué función toma la mayor parte del tiempo. Por ejemplo:
mydebug <- function(msg="[DEBUG]") { DEBUG <- FALSE if (DEBUG) { print(sprintf("%s - %s - %s", msg 1 , as.character(Sys.time()), as.character(deparse(sys.calls()[[sys.nframe()-1]])))) } } f <- function() { mydebug() ## your original function definitions ..... mydebug() return(...) ## the returned value needs to be after mydebug() }
- Usa el gráfico de llamas de Chrome para perfilar
Puede obtener una llama para averiguar dónde pasó el tiempo (p. Ej., ¿Qué función de JS? ¿Se debe al diseño?).
Para obtener más información, consulte: https://developers.google.com/web/tools/chrome-devtools/profile/rendering-tools/analyze-runtime?hl=en