Shiny app的代码分析?

can*_*ine 22 r memory-profiling shiny

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

我有一个大而肥胖,复杂的Shiny应用程序,而且我想弄清楚在这个迷宫代码的哪个地方,我正在减慢我的Shiny应用程序.我已经试过Rprof和profr,但没有从他们那里得到太多的了解.

Vin*_*ent 6

一些(粗略的)想法:

  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-apps的测试工具(https://github.com/johndharrison/RSelenium).我刚刚开始使用它,但你也许可以使用像system.time这样的东西来比较不同组件的速度.

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


use*_*236 6

我认为这个问题需要稍作更新,因此我为此添加了另一个答案...

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

这是操作方法:

  1. 通过Profvis运行闪亮的应用程序
  2. 与闪亮的应用程序互动
  3. 关闭浏览器
  4. 通过停止按钮停止控制台
  5. 负荷曲线
  6. 如果步骤5失败,请尝试以下操作:如果需要,请转换为html(内存问题)

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

步骤1:运行profvis

library(profvis)
profvis({ runApp('directory_of_shiny_app') }  
    , prof_output = '/directory_to_save_profile')
Run Code Online (Sandbox Code Playgroud)

步骤5:载入个人资料

profvis(prof_input = '/path_to_save_output/random_name.Rprof') 
Run Code Online (Sandbox Code Playgroud)

注意:Profvis为您的文件提供一个随机名称。因此,您需要相应地更改输入路径

步骤6:转换为html

如果您有一个庞大的应用程序,并且火焰图会更长一些,则可能需要执行此步骤。您可能会收到错误消息“ Pandoc:...内存”

p <- profvis(prof_input = '/path_to_save_output/file108f93bff877b.Rprof')
htmlwidgets::saveWidget(p, "/path_to_save_output/profile.html")
Run Code Online (Sandbox Code Playgroud)

然后在浏览器中打开html文件。