Отключить "занятый статус" в приложении R Shiny
Как я могу запретить серверу приложений RStudio Shiny отправлять обновления статуса "занято / неактивно"?
Наблюдая за трафиком веб-сокета в моем приложении, я заметил, что сервер постоянно отправляет обновления о своем текущем состоянии ("занято"/"неактивно").
Состояние сервера: занят / неактивен
Событие "Сияние: занято" запускается, когда на сервере что-то происходит (например, работает наблюдатель), а событие "Сияние: занято" указывает, когда сервер не используется. Объект события не имеет каких-либо специальных свойств, связанных с Shiny.
Использование Shiny версии 1.1.0 на стороне сервера, Chrome 66 на стороне клиента.
Предыстория моего вопроса
У меня такое ощущение, что эта функция может замедлить мое приложение, потому что клиент, кажется, блокирует себя на несколько секунд после отправки информации на сервер. Трудно воспроизвести, но что происходит (согласно журналу трафика веб-сокета):
- Клиент: пользователь нажимает кнопку действия.
- Клиент: информация о действиях отправляется на сервер без задержки.
- Клиент: Все исполнения JavaScript останавливаются / пауза на несколько секунд. В этот период взаимодействие с пользователем невозможно.
- Тем временем сервер: пока клиент ожидает, R выполняет некоторые процедуры на стороне сервера.
- Сервер: отправляет пользовательскую информацию обратно клиенту.
- Клиент: показывает информацию в журнале как "получено", но продолжает зависать.
- Сервер: отправляет еще одно обновление статуса
{"busy":"idle"}
клиенту. Это происходит через несколько секунд после появления шагов 5/6 в журнале трафика. - Клиент: Наконец, клиент возвращается к жизни и непрерывно с выполнением 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)
Журнал трафика Websocket:
Обратите внимание: приведенный выше пример упрощен, описанного эффекта длительного периода ожидания здесь не видно. Тем не менее, нежелательные обновления статуса хорошо заметны. Проблема возникает по мере роста кода приложения, и отключение сообщений о состоянии Shiny потенциально может помочь мне в этих особых ситуациях.