Shiny app的代码分析?

问题描述 投票:22回答:3

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

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

r shiny memory-profiling
3个回答
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接口,是网络应用程序的测试工具(https://github.com/johndharrison/RSelenium)。我刚刚开始使用它,但你也许可以使用像system.time这样的东西来比较不同组件的速度。

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


3
投票

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

您也可以使用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')

第5步:加载您的个人资料

profvis(prof_input = '/path_to_save_output/random_name.Rprof') 

注: 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文件。


1
投票

根据我的经验:

  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

  1. 使用Chrome火焰图来分析

你可以获得一个火焰来找出花费的时间(例如,哪个JS功能?是否由于布局?)。

enter image description here

有关详细信息,请参阅:https://developers.google.com/web/tools/chrome-devtools/profile/rendering-tools/analyze-runtime?hl=en

© www.soinside.com 2019 - 2024. All rights reserved.