对于 R Shiny Web 应用程序,有哪些好方法可以运行代码分析以显示处理时间最长的 Shiny 代码部分?
我有一个又大又肥又复杂的 Shiny 应用程序,我想弄清楚在这个迷宫般的代码中,我的 Shiny 应用程序最慢的地方。我已经尝试过 Rprof 和 profr 但并没有从他们那里得到太多的见解。
对于 R Shiny Web 应用程序,有哪些好方法可以运行代码分析以显示处理时间最长的 Shiny 代码部分?
我有一个又大又肥又复杂的 Shiny 应用程序,我想弄清楚在这个迷宫般的代码中,我的 Shiny 应用程序最慢的地方。我已经尝试过 Rprof 和 profr 但并没有从他们那里得到太多的见解。
我认为这个问题需要一点更新,因此我正在添加另一个答案......
您也可以使用该软件包profvis
来分析闪亮的应用程序。它将直接为您的 R 代码提供火焰图。即不需要使用 Chrome 的火焰图来猜测瓶颈在哪里。您将确切地知道在哪里更改您的代码。
这是如何做到的:
下面添加了某些步骤的详细信息:
第 1 步:运行 profvis
library(profvis)
profvis({ runApp('directory_of_shiny_app') }
, prof_output = '/directory_to_save_profile')
第 5 步:加载您的个人资料
profvis(prof_input = '/path_to_save_output/random_name.Rprof')
NB Profvis 为您的文件随机命名。所以你需要相应地改变输入路径
第 6 步:转换为 html
如果您有一个巨大的应用程序并且火焰图变得更长一点,则可能需要此步骤。您可能会收到错误“Pandoc:... memory”
p <- profvis(prof_input = '/path_to_save_output/file108f93bff877b.Rprof')
htmlwidgets::saveWidget(p, "/path_to_save_output/profile.html")
然后在浏览器中打开 html 文件。
一些(粗略的)想法:
根据我的经验:
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()
}
你可以获取一个火焰来找出时间花在哪里(例如,哪个JS函数?是因为布局吗?)。