Подтвердить что ты не робот

Профилирование кода для приложения Shiny?

Для веб-приложения R Shiny, какие хорошие способы запустить профилирование кода, которые показывают части кода Shiny, которые занимают больше времени обработки?

У меня есть большое, жирное, сложное приложение "Блестящее", и я хотел бы выяснить, где в этом лабиринте кода я замедляю свое приложение "Блестящее". Я опробовал Rprof и profr, но не получил от них большой информации.

4b9b3361

Ответ 1

Несколько (грубых) идей:

  • Профилирование приложения в браузере может помочь. У меня есть довольно большое приложение, которое использует navbarPage, и скорость создания страницы замедляется. Использование профилирования в Chrome (инструменты разработчика) определило "виновника". Исправление/улучшение в работе https://github.com/rstudio/shiny/issues/381#issuecomment-33750794
  • Запустите профайлер из окна кода в вашем приложении. Использование пакета shinyAce (https://github.com/trestletech/shinyAce) Я могу редактировать (и запускать) код, включая профилировщики из приложения (т.е. Вызывать реактивы и т.д.). См. Ссылку ниже (R > Код). Обратите внимание, что оценка кода деактивируется на сервере, но исходный код приложения находится на github, если вы хотите попробовать это (см. О странице).
  • Напишите свой код в обычных R-функциях, вызываемых реактивными функциями. Я занимаюсь переписыванием своего приложения, чтобы он мог использовать knitr для "воспроизводимых исследований" (R > Report). Эта реструктуризация упрощает использование профилирующих библиотек из R (studio) без запуска приложения.
  • Rselenium - это интерфейс R для Selenium, инструменты тестирования для веб-приложений (https://github.com/johndharrison/RSelenium). Я только начал использовать это, но вы, возможно, можете использовать его с чем-то вроде system.time для сравнения скоростей для разных компонентов.

http://vnijs.rady.ucsd.edu:3838/marketing/

Ответ 2

Из моего опыта:

  • Плагин print() в функциях Вы можете узнать, какая функция занимает большую часть времени. Например:

mydebug <- function(msg="[DEBUG]") { DEBUG <- FALSE if (DEBUG) { print(sprintf("%s - %s - %s", msg1, 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() }

  1. Использовать диаграмму пламени Chrome для профиля

Вы можете получить пламя, чтобы узнать, где потрачено время (например, какая функция JS? Это связано с расположением?).

введите описание изображения здесь

Подробнее см. в https://developers.google.com/web/tools/chrome-devtools/profile/rendering-tools/analyze-runtime?hl=en