Skip to main content
 首页 » 编程设计

python之Django 页面加载速度基于变量本地查看代码减慢

2025年05月04日22duanxz

我正在使用 Django 来显示一系列测试结果。我创建了一个 View 来显示每个测试结果的最新实例。

1: results = resultTable.objects.order_by('id') 
2: latestResults = {} 
3: for res in results: latestResults[res.testcase.name] = res.id 
4: latestResultQuerySet = resultTable.objects.filter(id__in=latestResults.values()) 
5: del latestResults 
6: return HttpResponse() 

第 1 行在大约 1 秒内创建了一个包含大约 20,000 个条目的 QuerySet。

第3行在大约12秒内计算出每个测试用例的最新结果的id。

第 4 行使用这些 ID 在大约 1 秒内创建了一个包含大约 800 个条目的新查询集。

第 5 行基本上立即删除了字典。

由此我认为(空白)页面将在大约 15 秒内加载。实际上,加载大约需要 3 分钟。

删除第 3 行允许页面立即加载。

知道是什么导致了额外的 2 分钟以上的延迟吗?因为我没有向 HttpResponse 传递任何东西,所以我假设它与字典的垃圾收集有关,因此第 5 行诞生了。

请您参考如下方法:

我猜你有一个 n + 1问题

如果是这样,您将在循环遍历结果集时进行 20,000 次查询。

你可以使用select_related为了避免这种情况:

results = resultTable.objects.select_related('testcase').order_by('id')