shiny Plot Caching
https://shiny.rstudio.com/articles/plot-caching.html
output$plot <- renderCachedPlot(
{
# Plotting code here...
},
cacheKeyExpr = { list(input$n, dataset()) }
)
improve the performance of your plots.
- using R’s base graphics instead of a plotting package
- using JavaScript graphics that render on the client instead of static plots that render on the server
- change the type of plot
( e.g. switching from ggplot2::geom_point to ggplot2::geom_hex )
- cache plots with renderCachedPlot()
코드변경을 최소로 하여
ui <- \tfluidPage(
\tsidebarLayout(
\t\tsidebarPanel(
\t\t\tsliderInput("n", "Number of points", 4, 32, value = 8, step = 4),
\t\t\tsliderInput("alpha", "Number of points", 0, 1, value = 0.5)
\t\t),
\t\tmainPanel(
\t\t\tplotOutput("plot")
\t\t)
\t)
)
\t
server <- function(input, output, session) {
\t
\toutput$plot <- renderCachedPlot({
\t\tSys.sleep(2) # Add an artificial delay
\t\trownums <- seq_len(input$n)
\t\taV <- isolate(input$alpha)
\t\tcars [rownums,] %>% ggplot(aes(x=speed, y=dist)) + geom_point(alpha=aV) +
\t\t\t\t\t\t\t\t\t\t\t\t\txlim(range(cars$speed))+ ylim(range(cars$dist))
\t\t\t
\t},cacheKeyExpr = {c(input$alpha, input$n)})
}
shinyApp(ui, server)
cacheKeyExpr :
reactive expressions / reactive values / eventReactive() / observeEvent()
the value from cacheKeyExpr is actually serialized and then hashed,
and the resulting hash value is used as the key.
If you are hashing a large object, this may take a non-negligible amount of time