我是 Javascript 新手,并且对 Django 有很好的经验。我为我的公司构建了一个图表平台来跟踪指标——它最初是作为学习 Javascript 的业余爱好项目,但后来演变成了更多东西。该网站正确加载和显示数据,但在移动设备上速度慢得令人难以置信。所有的计算都是在客户端由JS完成。有很多指标需要计算,因此思考过程是“以对象格式向客户端发送所有 Django 查询,并在那里处理它们,以免减慢服务器速度。” 我也不希望有大量的代码块来处理服务器上的每个指标(我这样做是错误的吗?)。这里有一些问题:一般来说,我应该在哪里处理数据,服务器端还是客户端?我该如何优化这段代码?我运行 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')
添加回答
举报
0/150
提交
取消