Shiny是我们的内部BI工具。对于我们的Shiny应用程序,我们在运行shinyServer之前加载数据:
load("afterProcessedData.RData")
# or dt = fread("afterProcessedData.csv")
shinyServer(function(input, output, session){ ...
但是,有些应用程序正在加载大文件,最多需要30秒才能加载。许多用户在打开页面时,不知道页面是否已损坏,因为它在加载时卡住了。他们可能会关闭它或点击过滤器,这可能会导致错误。在这种情况下,进度条将非常有用。我注意到withProgress()
可能有所帮助,但必须在reactive()
或renderXx()
内。
我可以做的一种方法是让laod()
与reactive()
内的shinyServer(function(input, output, session){
进行交换,但我担心的是性能会降低。我的用户非常关心响应性能。
对这种情况有什么建议吗?
编辑:我想没有一种简单的方法可以做到这一点。我有另一个想法。也许我可以在屏幕上显示一条文字说'数据正在加载',但是我必须让它在第一个表出现后消失。但是,我不知道如何设置条件。下面是我的代码显示第一个表:
dashboardBody(
fluidRow(
tabBox(width = 12,
tabPanel("Summary",
dataTableOutput("data1")),
提前谢谢!
答案 0 :(得分:4)
尽管我仍然有兴趣了解如何为load()
添加流程栏,但我已经实施了替代解决方案,这对现在来说很有用。它在页面上有一条文字说'数据正在加载......',它会在第一张表出现后消失。
#server.R firstData is a reactive function to get the data for 1st table
output$firstTable = reactive({
return(is.null(firstData()))
})
#ui.R
conditionalPanel(
condition = "output.firstTable",
box(width = 12,
h1("The data is loading...")
)
)
答案 1 :(得分:2)
要引用@ user5249203中有趣的注释,withSpinner()
看起来是此功能的有用选项,并且是shinycssloaders
包的一部分。我没有使用过自己,但它肯定是一个有趣的包,碰巧在CRAN上有一些很好的例子:https://andrewsali.shinyapps.io/example/