在R Shiny应用程序中停用“忙碌状态”

时间:2018-09-25 12:22:01

标签: r session shiny blocking busyindicator

如何防止RStudio Shiny应用程序服务器发送“忙/闲”状态更新?

在我的应用程序中观察Websocket流量时,我注意到服务器不断发送有关its current status ("busy"/"idle")的更新。

  

服务器状态:忙/闲

     

当服务器上发生某些事情(例如,观察者正在运行)时,将触发Shiny:busy事件,而Shiny:idle事件则指示服务器何时处于空闲状态。事件对象没有任何与Shiny相关的特殊属性。

在服务器端使用Shiny版本1.1.0,在客户端使用Chrome 66。

我的问题的背景

我觉得此功能可能会降低我的应用程序的速度,因为在将信息发送到服务器后,客户端似乎在阻塞自己几秒钟。很难复制,但是会发生什么(根据websocket流量日志):

  1. 客户端:用户单击操作按钮。
  2. 客户端:操作信息会立即发送到服务器。
  3. 客户端:所有JavaScript执行都会冻结/暂停几秒钟。在此期间,无法与用户互动。
  4. 同时服务器:在客户端等待时,R正在服务器端执行一些过程。
  5. 服务器:将自定义信息发送回客户端。
  6. 客户端:将日志中的信息显示为“已接收”,但保持冻结状态。
  7. 服务器:向客户端发送另一个状态更新{"busy":"idle"}在流量日志中显示步骤5/6后几秒钟会发生这种情况。
  8. 客户端:最后,客户端恢复了活力,并继续执行JavaScript和进行UI交互。

示例代码

此应用程序以非常简单的方式显示有问题的服务器通信。我想减少来自服务器的通信。

library(shiny)

ui <- fluidPage(

   titlePanel("Test"),

   sidebarLayout(
      sidebarPanel(
         actionButton(inputId = "testButton",
                      label = "Click me")
      ),

      mainPanel(
         textOutput(outputId = "testText")
      )
   )
)

server <- function(input, output) {

  observeEvent(input$testButton,{
    output$testText <- renderText({
      Sys.time()
    })
  }) 


}

shinyApp(ui = ui, server = server)

Websocket流量日志:

enter image description here

请注意:上面的示例已简化,此处无法看到所描述的等待时间长的效果。尽管如此,不需要的状态更新还是可以观察到的。问题随着应用程序代码的增长而出现,在这些特殊情况下,关闭“闪亮”状态消息可能会对我有帮助。

0 个答案:

没有答案