Избегайте множественных вызовов функций на сервере - PullRequest
1 голос
/ 12 апреля 2019

У меня есть следующий код в серверной функции блестящего приложения.

Чтобы построить график каждого типа, мне нужно каждый раз вызывать функцию getPlotData ().Можно ли как-нибудь избежать этого, чтобы приложение стало быстрее?

функция

 #This gets Sales data for selected client data
  getPlotData <- reactive({

    inpParam <<- input$noc 
    getSalesData(inpParam)
    End_date <<- input$endDate    

    SalesClientData <<- GetSalesClientData()
    WeeklySales <<- GetWeeklyData()
    FortNightData <<- GetFortNightlyData()
    EWS <<- GetEWSData()
    MONTHLYSALES <<- GetMonthlyData()
    wtSafetyRatio <<- round(as.numeric(crossprod(MONTHLYSALES$SafetyRatio,MONTHLYSALES$Weights)/sum(MONTHLYSALES$Weights)),2)
    wtHealthScore <<- round(as.numeric(crossprod(MONTHLYSALES$HealthScore,MONTHLYSALES$Weights)/sum(MONTHLYSALES$Weights)),2)
    wtPaymentScore <<- round(as.numeric(crossprod(MONTHLYSALES$PaymentScore,MONTHLYSALES$Weights)/sum(MONTHLYSALES$Weights)),2)
    ROLLDATA <<- GetRollingData()
    EARLY_TOPUP <<- GetEarlyTopUp()

  })

  #DPD Plots
  output$DPDPLot<-renderPlotly({

    getPlotData()

    plot_ly(data=SalesClientData, x = ~Date, y = ~DPD, name='DPD', type='scatter', mode = 'lines') %>%
      add_trace(y = ~CHECKNACHDPD, name = 'CHEQUE-NACH Payment', type='bar') %>% 
      add_trace(y = ~CHKNACHBounceDPD, name = 'CHEQUE-NACH Bounce', type='bar') %>% 
      layout(title= "DPD Pattern", legend = list(orientation = "h"))

  })

  #Sales Plot
  output$SalesPlot<-renderPlotly({

    getPlotData()

    SalesDayWise = group_by(SalesClientData,Day)
    SalesDayWise = summarize(SalesDayWise,TotalSales = sum(TotalPayRecvdAdj, na.rm=TRUE))

    plot_ly(data=SalesDayWise, x = ~Day, y = ~TotalSales, name='Total Sales', type='bar') %>%
      layout(title="Daywise Sales", legend = list(orientation = "h"))

  })

1 Ответ

1 голос
/ 13 апреля 2019

Я думаю, что у вас сложилось неправильное впечатление, что только потому, что вы снова вызываете функцию, она вычисляет каждый раз, когда она вызывается. Но на самом деле это только один раз, когда изменяются входные виджеты в реактивном выражении.

Вы можете проверить это, поместив оператор print в функцию GetSalesClientData() или любую другую функцию в это реактивное выражение.

Даже если вы вызываете реактивное выражение 100 раз, оно вычислит и получит новые результаты, только если изменятся входные виджеты, включенные в реактивное выражение.

В данном случае это input$noc и input$endDate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...