You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny应用中优先加载前2-3个图表优化加载速度

Shiny应用优先加载指定模块优化方案

你的应用加载全部图表耗时8秒,要实现优先加载前2-3个模块(比如Demographics、Trade in goods、Trade performance),核心思路是延迟初始化非优先模块的Server逻辑,让初始页面只处理前几个模块的渲染,剩余模块在后台异步加载。以下是具体修改方案:

1. 修改Server代码(核心改动)

利用shiny::delay函数,将非优先模块的server初始化逻辑延迟执行,或者等页面首次加载完成后再启动。示例中优先加载前3个模块,剩余模块延迟3秒启动(可根据实际调整延迟时间):

server <- shinyServer(function(input, output, session) {

  #Initialize color palette
  mycolor <- color_palette(id = "color")
  
  #Initialize reporter
  reporter_iso_sel <- 
    reporter_download_server(id = "reporterdownload")
  
  #Initialize trade flow parameter
  tradeflow <- tradeflow_server(id = "tradeingoods")

  #Initialize Services trade flow parameter
  services_tradeflow <- Services_tradeflow_server(id = "tradeinservices")

  #### 优先加载的模块(前3个) ####
  #### Demographics ####
  demographics_server(id = "demographics",
                      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel)
  #### Demographics ####

  #### Trade in goods ####
  tradeingoods_server(
    id = "tradeingoods",
    reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
    reporter = reporter_iso_sel$reporter,
    mycolor = mycolor,
    tradeflow = tradeflow
  )
  #### Trade in goods ####

  #### Trade performance ####
  trade_performance_server(
    id = "tradeperformance",
    reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
    reporter = reporter_iso_sel$reporter,
    mycolor = mycolor
  )
  #### Trade performance ####

  #### 延迟加载剩余模块 ####
  delay(3000, { # 延迟3秒启动,单位毫秒
    #### Logistic performance ####
    LPI_server(
      id = "LPI",
      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
      reporter = reporter_iso_sel$reporter,
      mycolor = mycolor
    )
    #### Logistic performance ####

    #### Bilateral Trade ####
    bilateral_server(
      id = "bilateral",
      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
      reporter = reporter_iso_sel$reporter,
      mycolor = mycolor,
      tradeflow = tradeflow
    )
    #### Bilateral Trade ####

    #### Trade Agreements ####
    trade_agreement_server(
      id = "agreement",
      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel
    )
    #### Trade Agreements ####

    #### Trade in services ####
    tradeinservices_server(
       id = "tradeinservices",
       reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
       reporter = reporter_iso_sel$reporter,
       mycolor = mycolor,
       services_tradeflow = services_tradeflow
     )
    #### Trade in services ####

    #### Services performance ####
    services_performance_server(
      id = "servicesperformance",
      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
      reporter = reporter_iso_sel$reporter,
      mycolor = mycolor
    )
    #### Services performance ####

    #### Macroeconomic ####
    Macroeconomic_server(
      id = "Macroeconomic",
      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
      reporter = reporter_iso_sel$reporter,
      mycolor = mycolor
    )
    #### Macroeconomic ####

    #### Digital ####
    Digital_server(
      id = "Digital",
      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
      reporter = reporter_iso_sel$reporter,
      mycolor = mycolor
    )

    trade_facilitation_server(
      id = "tradefacilitation",
      reporter_iso_sel = reporter_iso_sel$reporter_iso_sel,
      reporter = reporter_iso_sel$reporter,
      mycolor = mycolor
    )
    #### Digital ####
  })
  
  #### Download ####
  # source("server/server_download.R")
  #### Download ####
  
})

2. 可选:UI端优化(提升用户体验)

如果剩余模块加载时会出现空白,可在UI中给延迟加载的模块添加加载提示,或者初始隐藏,加载完成后显示:

# UI中修改示例:
#UI for Logistic Performance
shinyjs::hidden(tags$div(id = "LPI_container", LPI_ui(id = "LPI"))),
#End of UI Logistic Performance

# Server中延迟加载时添加:
delay(3000, {
  # ... 其他模块初始化 ...
  shinyjs::show("LPI_container")
})

原理说明

  • 初始阶段只执行前3个模块的server逻辑,这些模块会优先完成数据查询和图表渲染,让用户快速看到核心内容。
  • 剩余模块的初始化逻辑被延迟执行,在后台异步处理,不会阻塞初始页面加载。
  • 延迟时间可根据实际情况调整,比如设置为2000(2秒),确保前几个模块加载完成后再启动剩余模块。

内容的提问来源于stack exchange,提问作者akshay bholee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:15:45