gpt4 book ai didi

r - 使用选项卡和 suspendWhenHidden = FALSE 优化 Shiny 性能

转载 作者:行者123 更新时间:2023-12-04 13:02:56 24 4
gpt4 key购买 nike

我有一个基于 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)

最佳答案

有两种方法可以实现这一点

  • 加载所有选项卡,然后显示输出
  • 使用 eventReactive 激活其他选项卡

  • 对于第一个选项,只需在下面添加
    outputOptions(output, "plot1", suspendWhenHidden = FALSE)
    如果你想要 react 性写 eventReactive每个选项卡的功能。

    关于r - 使用选项卡和 suspendWhenHidden = FALSE 优化 Shiny 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684756/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com