Отключить «занятый статус» в приложении R Shiny - PullRequest
0 голосов
/ 25 сентября 2018

Как я могу запретить серверу приложений RStudio Shiny отправлять обновления статуса "занято / бездействует"?

Наблюдая за трафиком веб-сокета в моем приложении, я заметил, что сервер постоянно отправляет обновления о его текущем состоянии («занято» / «бездействует») .

Состояние сервера: занят / неактивен

Событие «блестящий»: занято, запускается, когда что-то происходит на сервере (например, работает наблюдатель), и событие «блестящий»: неактивный указываеткогда сервер простаивает.Объект события не несет никаких специальных свойств, связанных с Shiny.

Использование Shiny версии 1.1.0 на стороне сервера, Chrome 66 на стороне клиента.

Фонмоего вопроса

У меня такое ощущение, что эта функция может замедлить мое приложение, потому что клиент, похоже, блокируется на несколько секунд после отправки информации на сервер.Трудно воспроизвести, но что происходит (в соответствии с журналом трафика веб-сокета):

  1. Клиент: пользователь нажимает кнопку действия.
  2. Клиент: информация действия отправляетсяна сервер без задержки.
  3. Клиент: Все JavaScript-выполнения останавливаются / пауза на несколько секунд.В этот период взаимодействие с пользователем невозможно.
  4. Тем временем сервер: пока клиент ожидает, R выполняет некоторые процедуры на стороне сервера.
  5. Сервер: отправляет обратно пользовательскую информацию клиенту.
  6. Клиент: отображает информацию в журнале как «получено», но продолжает зависать.
  7. Сервер: отправляет клиенту еще одно обновление статуса {"busy":"idle"}. Это происходит через несколько секунд после появления шагов 5/6 в журнале трафика.
  8. Клиент: Наконец, клиент возвращается к жизни и продолжает выполнять JavaScript и взаимодействие с пользовательским интерфейсом.

Пример кода

Это приложение очень просто показывает проблемную связь с сервером.Я хотел бы уменьшить количество сообщений, поступающих с сервера.

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)

Журнал трафика веб-сокетов:

enter image description here

Обратите внимание:Приведенный выше пример упрощен, описанный эффект длительного периода ожидания там не виден.Тем не менее, нежелательные обновления статуса хорошо заметны.Проблема возникает по мере роста кода приложения, и отключение сообщений о состоянии Shiny потенциально может помочь мне в этих особых ситуациях.

...