Shiny - это наш внутренний инструмент бизнес-аналитики. Для наших приложений Shiny мы загружаем данные перед запуском shinyServer:
load("afterProcessedData.RData")
# or dt = fread("afterProcessedData.csv")
shinyServer(function(input, output, session){ ...
Однако некоторые приложения загружают большие файлы, и для их загрузки требуется до 30 секунд. Многие пользователи, открывая страницу, не знают, сломана ли страница, поскольку она зависает при загрузке. Они могут закрыть его или щелкнуть фильтры, что может вызвать ошибку. В этом случае будет очень полезен индикатор выполнения. Я заметил, что withProgress()
может помочь, но это должно быть внутри reactive()
или renderXx()
.
Один из способов, которым я могу это сделать, - это сделать laod()
деформированным reactive()
внутри shinyServer(function(input, output, session){
, но меня беспокоит, что это снизит производительность. И мои пользователи очень заботятся о быстродействии.
Есть предложения по этой ситуации?
Изменить: я думаю, это не простой способ сделать это. У меня есть другая мысль. Может быть, я могу показать на экране текст «данные загружаются», но я должен заставить его исчезнуть после того, как появится первая таблица. Однако я не знаю, как настроить условие. Ниже мой код, показывающий первую таблицу:
dashboardBody(
fluidRow(
tabBox(width = 12,
tabPanel("Summary",
dataTableOutput("data1")),
Заранее спасибо!
withProgress()
внутриreactive ()
илиrender()
проблемы? . Несмотря на то, что меня не устраивает та панель состояния, которую она отображает, но у меня она работает нормально, когда я добавляюwithProgress
во все своиrender()
функции. - person user5249203   schedule 10.02.2016render
, что вышло на ShinywithProgress()
? - person user5249203   schedule 10.02.2016output$Ref_output <- DT::renderDataTable(withProgress( message = 'Processing the query', value = 5, expr = { DT::datatable(reference.table(), selection = 'multiple')
С некоторыми изменениями в файле CSS индикатор выполнения стал толще и красного цвета, чем по умолчанию. - person user5249203   schedule 10.02.2016load()
вreactive()
, так как это замедлит производительность, поскольку каждое изменение будет вызыватьload()
. Второе решение сSO solutions
каким-то образом удлиняетload()
в 3 раза, в чем обвинят клиенты. - person Z. Zhang   schedule 10.02.2016load
на каждом сеансе? для всего остального вы можете и должны использоватьwithProgress()
также нежелательные кнопки, пока люди ждут сshinyjs
пакетом, чтобы они не нажимали ни на что, пока он не будет полностью загружен - person Pork Chop   schedule 10.02.2016