【问题标题】:Django Datatables taking too long to loadDjango 数据表加载时间过长
【发布时间】:2021-02-16 16:59:04
【问题描述】:

我正在尝试将 25600 行加载到数据表中,但这大约需要 10 秒。该请求是通过 ajax API 调用。

views.py

@api_view()
def get_all_data(request):


get_all_data_ = Data.objects.values("name","contact_number","email_address","address","age",
"location_type","sector","phase","total_data","total_usage","city","district")
                 

return JsonResponse(list(get_all_data_), safe=False)

模板.html

var table = $('#data-table').DataTable({

                serverSide: true,

                "ajax": {
                "url": "/alldata/",
                "dataSrc": ""
                },

              "columns": [

                  {"data": "name"},
                  {"data": "contact_number"},
                  {"data": "email_address"},
                  {"data": "address"},
                  {"data": "age"},
                  {"data": "location_type"},
                  {"data": "sector"},
                  {"data": "phase"},
                  {"data": "total_data"},
                  {"data": "total_usage"},
                  {"data": "city"},
                  {"data": "district"}
                 
              ],

        
          });

我怎样才能让它瞬间完成?

【问题讨论】:

  • 这并不奇怪。 Python 处理不了那么快。即使没有查询,仅处理list(range(25600)) 也很容易花费大约 2-5 秒。所以你没有。通常,无论如何您都不需要(立即)HTML 页面中的所有数据。您应该对其进行分页,并让 JavaScript 仅在必要时加载块。无论如何,渲染 25600 也会对浏览器产生影响。

标签: django django-rest-framework django-templates django-datatable


【解决方案1】:

我会做什么:

  • 我会添加分页(正如@Willem Van Onsem 建议的那样),只需加载前 100 个(例如)样本并添加链接以在表格上分页(下一个/上一个)。看看 Django Paginator
  • 如果您想显示有关整个数据集的一些信息,我会计算描述数据的统计数据并显示它而不是显示整个数据。例如平均值或中值...

如果你真的想用整张桌子让它更快:

  • 您可以尝试使用更快的服务器(也许会有所帮助),
  • 您可以尝试缓存它,也许将数据存储在内存中,这样您就不需要为每个请求运行数据库查询(但您需要记住刷新/验证缓存)。

【讨论】:

  • Django Paginator 正是我想要的。它可以工作。谢谢。
  • 搜索时,显示的结果是基于当前页面的,如何返回整个数据集的结果?
  • 你需要实现一个服务器端搜索(不是客户端搜索)。
猜你喜欢
  • 2019-06-17
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 2016-06-20
相关资源
最近更新 更多