renderHighcharts 与 renderUI;渲染多个图时哪个更快
renderHighcharts vs renderUI; Which one is faster when rendering several plots
我正在构建一个应用程序,该应用程序有时会在网格布局中呈现 7-16 个 Highcharts。
这些 Highcharts 的渲染速度很慢,我正在努力让它更快。
现在我正在使用 renderUI()、htmlOutput() 和 highcharter::hw_grid() 来渲染图形。 (见代码块 1)
我遇到了这个 Post 他们试图通过首先使用 highcharter::renderHighchart() 渲染图形然后在 renderUI() 函数中使用 highcharter::higchartOutput() 来提高性能。我稍微更改了代码,使其输出与我的第一个版本相同,但想法应该保持不变。(参见代码块 2)
我现在已经在两个闪亮的应用程序中实现了这两个版本,并尝试使用 profvis 对其进行评估。我对 profvis 很陌生,我不确定在哪里可以比较这两个选项。所以我刚刚查看了 RunApp() 花费的总时间。我使用 renderUI() 和 htmlOutput() 的第一个版本似乎比第二个版本更快。这与前面提到的 Post.
的结果相矛盾
现在我想知道哪个选项更快,为什么。我是否应该将我的代码从版本 1 更改为版本 2 以提高性能?
代码块 1
samp <- sample(5000, 100, replace = TRUE)
library("highcharter")
library(shiny)
ui <- shinyUI(fluidPage(
htmlOutput('plots')
))
server <- shinyServer(function(input, output) {
output$plots <- renderUI({
output=list()
for (i in 1:50) {
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <-
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderHighchart()") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
}
hw_grid(output,ncol=3)
})
})
app=shinyApp(ui=ui,server=server)
profvis::profvis(runApp(app))
代码块 2
samp <- sample(5000, 100, replace = TRUE)
library("highcharter")
library(shiny)
ui <- shinyUI(fluidPage(
uiOutput('plots')
))
server <- shinyServer(function(input, output) {
n.col <- 3
output$plots <- renderUI({
col.width <- round(12/n.col) # Calculate bootstrap column width
n.row <- ceiling(50/n.col) # calculate number of rows
cnter <<- 0 # Counter variable
# Create row with columns
rows <- lapply(1:n.row,function(row.num){
cols <- lapply(1:n.col, function(i) {
cnter <<- cnter + 1
plotname <- paste("plot", cnter, sep="")
column(col.width, highchartOutput(plotname))
})
fluidRow( do.call(tagList, cols) )
})
do.call(tagList, rows)
})
for (i in 1:50) {
local({
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <- renderHighchart({
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderHighchart()") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
})
})
}
})
app=shinyApp(ui=ui,server=server)
profvis::profvis(runApp(app))
我现在已经将两个选项放在一个应用程序中
samp <- sample(5000, 100, replace = TRUE)
library("highcharter")
library(shiny)
ui <- shinyUI(
fluidPage(
fluidRow(uiOutput('plots')),
fluidRow(htmlOutput('rUI')))
)
server <- shinyServer(function(input, output) {
n.col <- 3
output$plots <- renderUI({
col.width <- round(12/n.col) # Calculate bootstrap column width
n.row <- ceiling(50/n.col) # calculate number of rows
cnter <<- 0 # Counter variable
# Create row with columns
rows <- lapply(1:n.row,function(row.num){
cols <- lapply(1:n.col, function(i) {
cnter <<- cnter + 1
plotname <- paste("plot", cnter, sep="")
column(col.width, highchartOutput(plotname))
})
fluidRow( do.call(tagList, cols) )
})
do.call(tagList, rows)
})
for (i in 1:50) {
local({
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <- renderHighchart({
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderHighchart()") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
})
})
}
output$rUI <- renderUI({
output=list()
for (i in 1:50) {
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <-
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderUI") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
}
hw_grid(output,ncol=3)
})
})
app=shinyApp(ui=ui,server=server)
profvis::profvis(runApp(app))
如果我现在在 profvis 中查看 output$plots
和 output$rUi
的聚合时间,我可以看到 output$plots
的聚合时间确实更快
我正在构建一个应用程序,该应用程序有时会在网格布局中呈现 7-16 个 Highcharts。 这些 Highcharts 的渲染速度很慢,我正在努力让它更快。
现在我正在使用 renderUI()、htmlOutput() 和 highcharter::hw_grid() 来渲染图形。 (见代码块 1) 我遇到了这个 Post 他们试图通过首先使用 highcharter::renderHighchart() 渲染图形然后在 renderUI() 函数中使用 highcharter::higchartOutput() 来提高性能。我稍微更改了代码,使其输出与我的第一个版本相同,但想法应该保持不变。(参见代码块 2)
我现在已经在两个闪亮的应用程序中实现了这两个版本,并尝试使用 profvis 对其进行评估。我对 profvis 很陌生,我不确定在哪里可以比较这两个选项。所以我刚刚查看了 RunApp() 花费的总时间。我使用 renderUI() 和 htmlOutput() 的第一个版本似乎比第二个版本更快。这与前面提到的 Post.
的结果相矛盾现在我想知道哪个选项更快,为什么。我是否应该将我的代码从版本 1 更改为版本 2 以提高性能?
代码块 1
samp <- sample(5000, 100, replace = TRUE)
library("highcharter")
library(shiny)
ui <- shinyUI(fluidPage(
htmlOutput('plots')
))
server <- shinyServer(function(input, output) {
output$plots <- renderUI({
output=list()
for (i in 1:50) {
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <-
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderHighchart()") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
}
hw_grid(output,ncol=3)
})
})
app=shinyApp(ui=ui,server=server)
profvis::profvis(runApp(app))
代码块 2
samp <- sample(5000, 100, replace = TRUE)
library("highcharter")
library(shiny)
ui <- shinyUI(fluidPage(
uiOutput('plots')
))
server <- shinyServer(function(input, output) {
n.col <- 3
output$plots <- renderUI({
col.width <- round(12/n.col) # Calculate bootstrap column width
n.row <- ceiling(50/n.col) # calculate number of rows
cnter <<- 0 # Counter variable
# Create row with columns
rows <- lapply(1:n.row,function(row.num){
cols <- lapply(1:n.col, function(i) {
cnter <<- cnter + 1
plotname <- paste("plot", cnter, sep="")
column(col.width, highchartOutput(plotname))
})
fluidRow( do.call(tagList, cols) )
})
do.call(tagList, rows)
})
for (i in 1:50) {
local({
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <- renderHighchart({
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderHighchart()") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
})
})
}
})
app=shinyApp(ui=ui,server=server)
profvis::profvis(runApp(app))
我现在已经将两个选项放在一个应用程序中
samp <- sample(5000, 100, replace = TRUE)
library("highcharter")
library(shiny)
ui <- shinyUI(
fluidPage(
fluidRow(uiOutput('plots')),
fluidRow(htmlOutput('rUI')))
)
server <- shinyServer(function(input, output) {
n.col <- 3
output$plots <- renderUI({
col.width <- round(12/n.col) # Calculate bootstrap column width
n.row <- ceiling(50/n.col) # calculate number of rows
cnter <<- 0 # Counter variable
# Create row with columns
rows <- lapply(1:n.row,function(row.num){
cols <- lapply(1:n.col, function(i) {
cnter <<- cnter + 1
plotname <- paste("plot", cnter, sep="")
column(col.width, highchartOutput(plotname))
})
fluidRow( do.call(tagList, cols) )
})
do.call(tagList, rows)
})
for (i in 1:50) {
local({
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <- renderHighchart({
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderHighchart()") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
})
})
}
output$rUI <- renderUI({
output=list()
for (i in 1:50) {
n <- i # Make local variable
plotname <- paste("plot", n , sep="")
output[[plotname]] <-
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "renderUI") %>%
hc_xAxis(categories = seq_along(samp)) %>%
hc_add_series(
data = samp,
name = "Downloads"
)
}
hw_grid(output,ncol=3)
})
})
app=shinyApp(ui=ui,server=server)
profvis::profvis(runApp(app))
如果我现在在 profvis 中查看 output$plots
和 output$rUi
的聚合时间,我可以看到 output$plots
的聚合时间确实更快