27

对于 R Shiny Web 应用程序,有哪些好方法可以运行代码分析以显示处理时间最长的 Shiny 代码部分?

我有一个又大又肥又复杂的 Shiny 应用程序,我想弄清楚在这个迷宫般的代码中,我的 Shiny 应用程序最慢的地方。我已经尝试过 Rprof 和 profr 但并没有从他们那里得到太多的见解。

4

3 回答 3

14

我认为这个问题需要一点更新,因此我正在添加另一个答案......

您也可以使用该软件包profvis来分析闪亮的应用程序。它将直接为您的 R 代码提供火焰图。即不需要使用 Chrome 的火焰图来猜测瓶颈在哪里。您将确切地知道在哪里更改您的代码。

这是如何做到的:

  1. 通过 Profvis 运行闪亮的应用程序
  2. 与闪亮的应用互动
  3. 关闭浏览器
  4. 通过停止按钮停止控制台
  5. 负载配置文件
  6. 如果第 5 步失败,试试这个:Convert to html if needed (memory questions)

下面添加了某些步骤的详细信息:

第 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 文件。

于 2018-03-05T15:39:43.547 回答
9

一些(粗略的)想法:

  1. 在浏览器中分析应用程序可能会有所帮助。我有一个使用 navbarPage 的大型应用程序,页面构建速度越来越慢。在 Chrome(开发人员工具)中使用分析确定了“罪魁祸首”。修复/改进正在进行中https://github.com/rstudio/shiny/issues/381#issuecomment-33750794
  2. 从应用程序的代码窗口运行分析器。使用 shinyAce 包 ( https://github.com/trestletech/shinyAce ) 我可以编辑(和运行)代码,包括应用程序内的分析器(即,调用反应等)。请参阅下面的链接(R > 代码)。请注意,代码评估在服务器上已停用,但如果您想尝试此应用程序的源代码在 github 上(请参阅关于页面)
  3. 在由反应函数调用的常规 R 函数中编写代码。我正在重写我的应用程序,以便它可以使用 knitr 进行“可重复的研究”(R > Report)。这种重组使得在不启动应用程序的情况下使用来自 R(studio) 的分析库变得更加容易。
  4. Rselenium 是 Selenium 的 R 接口,用于 Web 应用程序的测试工具 ( https://github.com/johndharrison/RSelenium )。我才刚刚开始使用它,但您也许可以将它与 system.time 之类的东西一起使用来比较不同组件的速度。

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

于 2014-01-31T20:59:40.360 回答
2

根据我的经验:

  1. 函数中的插件 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

于 2016-07-27T16:14:28.193 回答