先看代码
views.py:
def vms(request):
user = request.user
servers = List.objects.all()
return render_to_response(
'vmserver/all_vms.html', {
'list': servers,
'user': user,
}
)
template:
<p class="dataTable_wrapper">
<table class="table table-striped table-bordered table-hover" id="dataTables-example" width="100%">
<thead>
<tr>
<th>主机名</th>
<th>IP地址</th>
<th>应用名称</th>
<th>CPU</th>
<th>内存</th>
<th>磁盘</th>
<th>操作系统</th>
<th>电源</th>
<th>配置项</th>
</tr>
</thead>
<tbody>
{% for vm in list %}
<tr class="odd gradeX">
<td><a href="/vmserver/vms/{{ vm.id }}/$">{{ vm.list_name }}</a></td>
<td>{{ vm.ip }}</td>
<td>{{ vm.app_name }}</td>
<td>{{ vm.cpu }}</td>
<td>{{ vm.mem }}</td>
<td>{{ vm.total_hard_disk }}</td>
<td>{{ vm.os }}</td>
<td>{{ vm.power_status }}</td>
<td>
'''
由于我的List表中有2000多条数据,通过datatables插件渲染数据的时候,响应非常慢,需要10秒左右前端才能渲染完成,请问有什么优化的方法,能让速度更快。
ページングはバックグラウンドで完了する必要があります。これは、
2000
の複数のデータをすべてバックグラウンドで取得し、フロント デスクに渡しているためです。フロント デスクは、生成時にこれらの2000
の複数のデータをロードします。ページングがバックグラウンドで完了している場合、各50
個のデータなど、データがフロント デスクで現在のページに渡されるだけであれば、ページのレンダリングは自然に高速になります。私が言ったことが正しいかどうかを確認するために、まずこれを試してみてください:
リーリー上記のコードには
[:50]
を 1 つだけ追加しました。.all()
メソッドは引き続きすべての2000
部分を取得しますが、これによりフロントエンドに渡されるのは50
部分だけです。フロントエンドのレンダリング速度が速くなります。はい、これは速度自体はobjects.all()
とは関係がなく、フロントエンドが受信するデータ量にのみ関係していることを証明しています。実際のプロセスでは、バックグラウンド ページングはこれよりも少し複雑です。上記の結論が問題なければ、もう一度更新します。
キャッシュの追加、インデックスの追加、ページングの追加
Django Restframework を使用する場合は、フレームワークによってネイティブに提供されるページング関数を使用できます。
参照: http://www.django-rest-framew...