亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何優化該算法的速度?Django 和 JavaScript

如何優化該算法的速度?Django 和 JavaScript

胡子哥哥 2023-12-14 16:42:23
我是 Javascript 新手,并且對 Django 有很好的經驗。我為我的公司構建了一個圖表平臺來跟蹤指標——它最初是作為學習 Javascript 的業余愛好項目,但后來演變成了更多東西。該網站正確加載和顯示數據,但在移動設備上速度慢得令人難以置信。所有的計算都是在客戶端由JS完成。有很多指標需要計算,因此思考過程是“以對象格式向客戶端發送所有 Django 查詢,并在那里處理它們,以免減慢服務器速度?!?nbsp;我也不希望有大量的代碼塊來處理服務器上的每個指標(我這樣做是錯誤的嗎?)。這里有一些問題:一般來說,我應該在哪里處理數據,服務器端還是客戶端?我該如何優化這段代碼?我運行 3 個查詢,需要查找每天每個指標的點擊次數(頁面瀏覽量、選擇加入和計劃調用)。例如,我想顯示一個圖表,顯示一個月內的頁面瀏覽量,其中 x 軸是日期,y 軸是計數。為了做到這一點,我運行一個嵌套的 for 循環來迭代查詢,然后計算該日期的頁面瀏覽量。當我針對三個不同的指標運行此函數時,速度非常慢。數據通過 ajax 調用接收(這是最佳的嗎?)。以下是計算當天點擊次數的 Javascript 代碼:var endpoint = "/my/url/";        var opt_ins = [];        var schedules = [];        var page_views = [];        $.ajax({            method: "GET",            url: endpoint,            success: function (data) {                opt_ins = data.opt_ins;                schedules = data.audit_calls;                page_views = data.page_views;            },            error: function (error) { console.log("ERROR -->  " + error); },            async: false        });async function getDateCounts(data) {            dates = [];            count_dates = [];            let i = 0;            for (const element of data) {                let date = new Date(element.date_created).toLocaleDateString("en-US");                if (!dates.includes(date)) {                    dates.push(date);                    let count = 0;                    for (const item of data) {                        let check_date = new Date(item.date_created).toLocaleDateString("en-US");                        if (check_date === date) {                            count++;                        }                    }                    count_dates.push(count);                    count = 0;                }            }            return [dates, count_dates];每個查詢都會返回一個不同長度的對象。以下是包含示例數據的最終圖表的示例
查看完整描述

1 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

數據庫是聚合這些數據的好地方,并將減少需要傳遞的數據量。


該aggregate()方法將使您獲得如下數據集:


[{'date':COUNT},{'date':COUNT},...]

TruncDate()如果您有日期時間,則允許按天分組。


from django.db.models import Sum

from django.db.models.functions import TruncDate



models.AgentPageViews.objects.filter(date_created__gt=self.time_period).

    values(date=TruncDate('date_created')).

    order_by("date_created").annotate(Sum('views')


查看完整回答
反對 回復 2023-12-14
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號