django 和 dataTables - 加速查询和页面显示

Posted

技术标签:

【中文标题】django 和 dataTables - 加速查询和页面显示【英文标题】:django and dataTables - speed up query and page display 【发布时间】:2013-04-05 07:14:22 【问题描述】:

我的应用中有一个页面列出了我们所有的客户记录 - 总共大约一千条。查询很简单(实际上是两个查询),看起来像这样(一个用于商业,一个用于住宅):

all_comm = System.objects.all().filter(isRessy=False)
all_ressy = System.objects.all().filter(isRessy=True)

在我的模板中,我只是遍历两个查询,在表格中显示信息。此代码如下所示:

  <table style="width:100%;" class="field_container dt full-border">
    <thead>
      <tr>
        <th align=left width=200>Owner</th>
        <th align=center width=100>System ID</th>
        <th align=left>System Address</th>
        <th align=center width=200>Options</th>
      </tr>
    </thead>

    <tbody>

      % for System in all_ressy %
      <tr onclick="window.location.href='% url cpm.systems.views.system_overview System.systemID %'">
        <td> System.billingContact.lastName ,  System.billingContact.firstName </td>
        <td align=center> System.pk </td>
        <td> System.systemAddress ,  System.systemCity </td>
        <td align=center>
          <a href="% url cpm.work_orders.views.create_wo 'R' System.systemID %?=next% url cpm.systems.views.system_overview System.systemID %">Create Service Call</a>
        </td>
      </tr>
      % endfor %
    </tbody>
  </table>

此代码与显示所有商业记录相同。如果你注意到我在表中列出了一个dt 类。这会将表设置为dataTable 表。因此,行得到很好的突出显示,列可以排序,并且表格顶部有一个搜索框。都是好东西。

问题是整个页面的加载速度有点慢。加载时间的一半似乎是数据的原始显示(获取数据然后迭代生成基本html 表的所有记录)。加载时间的后半部分(或至少有相当一部分时间)看起来专门用于将常规表转换为dataTable

我想知道是否有什么办法可以加快整个过程。我尝试在dataTable 上使用分页,但这似乎没用,因为所有记录都已加载,只是隐藏在多个dataTable 页面中。考虑到应用程序的性质,整个页面的真正分页实际上是不可能的。我觉得查询不会变得更快,因此必须进行优化或采取一些技巧来加快此页面的加载速度。

有什么想法吗?

感谢您的帮助

编辑我指的是这个dataTable插件:http://datatables.net/index

【问题讨论】:

你需要使用datatable ajax paginatio @Garfonzo 你到底用了什么方法来加快页面加载速度? 【参考方案1】:

您可以尝试使用 ajax 将数据直接加载到 DataTable 中,这将删除 HTML 呈现步骤。

http://datatables.net/release-datatables/examples/ajax/objects.html(我假设这是您正在谈论的数据表......)

【讨论】:

是的,也许我应该更新我的问题以指出我正在谈论的“dataTables”......所以,使用你建议的方法,它看起来只会加载 10 个(或一些数量)每页的记录。因此,使用分页实际上会更快,因为它加载的页面更少。 如果您准备适当的服务器端方法来收集参数并创建 JSON,您可以使用 iDisplayStartiDisplayLength 数据表参数为一个分页页面仅填充部分数据。

以上是关于django 和 dataTables - 加速查询和页面显示的主要内容,如果未能解决你的问题,请参考以下文章

Django:模型和视图以及 jQuery DataTables,hello world 示例

django-rest-framework-datatables 和 Django Parler 的翻译字段

DataTables 无法在 Django 和 HTML 中正确显示

将 DataTables 插件与 django 框架集成

JQuery 的 DataTables Editor 插件和 Django

DataTables 在 CRUD 操作上刷新 Django Ajax 数据