- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于 Flexdashboard 的 Shiny 应用程序,它有几个选项卡,在每个选项卡中,有多个绘图的网格。性能有点问题,尤其是在免费的 Shiny Server 上部署时。
最初,主要问题是单击每个选项卡需要重新渲染绘图。我将 suspendWhenHidden 选项设置为 FALSE,这会有所帮助 - 现在切换输入加载所有绘图的延迟很慢,但至少在导航 UI 时,性能非常好。
然而,这让我开始思考 - 有没有办法实现这两种行为的混合?所以说我在一个事件选项卡上,它只生成一个情节。这个情节很快呈现。我们可以告诉 Shiny 渲染这个图,将它显示给用户,然后在后台继续加载其他选项卡的所有元素吗?就目前而言,事件选项卡将不会完成绘制绘图,直到隐藏选项卡上的所有绘图也都被渲染。
总之,一个混合的 suspendWhenHidden = FALSE 和 TRUE:
首先呈现事件标签元素,显示给用户,然后
继续渲染隐藏选项卡上的元素
我认为设置优先级可能会实现这一点,但它似乎不起作用。有什么想法或建议吗?
这是一个最小的可重现示例。目标是让第一个绘图(在选项卡 1 中)在开始渲染第二个绘图(在选项卡 2 中)之前呈现并出现 - 但绘图应该在选项卡 2 中开始呈现,而无需单击选项卡 2。
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
numericInput('n', 'Size', 10)
),
mainPanel(
tabsetPanel(
tabPanel("Tab1", plotOutput("plot1")),
tabPanel("Tab2", plotOutput("plot2"))))
)
)
# Define the server code
server <- shinyServer(function(input, output, session) {
output$plot1 <- renderPlot({plot(1:input$n)},height = 400,width=800)
output$plot2 <- renderPlot({ Sys.sleep(5); plot(1:input$n,col="red")},height = 400,width=800)
outputOptions(output, "plot2", suspendWhenHidden = FALSE)
})
# Return a Shiny app object
shinyApp(ui = ui, server = server)
最佳答案
有两种方法可以实现这一点
outputOptions(output, "plot1", suspendWhenHidden = FALSE)
如果你想要 react 性写
eventReactive
每个选项卡的功能。
关于r - 使用选项卡和 suspendWhenHidden = FALSE 优化 Shiny 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684756/
我有一个基于 Flexdashboard 的 Shiny 应用程序,它有几个选项卡,在每个选项卡中,有多个绘图的网格。性能有点问题,尤其是在免费的 Shiny Server 上部署时。 最初,主要问题
我是一名优秀的程序员,十分优秀!