【发布时间】:2016-05-19 21:12:33
【问题描述】:
Shiny 是我们内部的 BI 工具。对于我们的 Shiny 应用,我们在 shinyServer 运行之前加载数据:
load("afterProcessedData.RData")
# or dt = fread("afterProcessedData.csv")
shinyServer(function(input, output, session){ ...
但是,有些应用正在加载大文件,加载时间长达 30 秒。很多用户在打开一个页面的时候,不知道页面是不是坏了,因为加载的时候卡住了。他们可能会关闭它或单击过滤器,这可能会导致错误。在这种情况下,进度条将非常有帮助。我注意到withProgress() 可能会有所帮助,但它必须在reactive() 或renderXx() 内部。
我可以做的一种方法是在shinyServer(function(input, output, session){ 中使用reactive() 扭曲laod(),但我担心它会降低性能。而且我的用户非常关心响应性能。
对这种情况有什么建议吗?
编辑:我想没有一个简单的方法可以做到这一点。我有另一个想法。也许我可以在屏幕上显示一个文本说“数据正在加载”,但我必须在第一个表出现后让它消失。但是,我不知道如何设置条件。下面是我显示第一个表的代码:
dashboardBody(
fluidRow(
tabBox(width = 12,
tabPanel("Summary",
dataTableOutput("data1")),
提前谢谢你!
【问题讨论】:
-
很好奇,为什么
withProgress()在reactive ()或render()中有问题? .尽管如此,我对它显示的那种状态栏并不满意,但是当我将withProgress包装在我所有的render()函数中时,它对我来说还可以。 -
另外,如何使用SO solutions 中显示的示例包装您的数据加载函数,然后在 Shiny
withProgress()上显示render? -
这对我有用。
output$Ref_output <- DT::renderDataTable(withProgress( message = 'Processing the query', value = 5, expr = { DT::datatable(reference.table(), selection = 'multiple')对 CSS 文件进行一些更改后,进度条比默认进度条更粗且呈红色。 -
@user5249203 感谢您的回答。我担心在
reactive()中有load()会降低性能,因为每次更改都会调用load()。使用SO solutions的第二个解决方案不知何故使load()的时间延长了3 倍,这将受到客户的指责。 -
如果这个负载在一个全局变量中,那么为什么每次会话都要
load?对于其他一切,您可以并且应该使用withProgress()也禁用按钮,而人们等待shinyjs包,所以他们在完全加载之前不会点击任何东西
标签: r shiny shinydashboard