先看代码
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]
하나만 추가했습니다..all()
메서드는 여전히 모든2000
데이터를 가져오지만50
조각만 프런트 엔드로 전달됩니다. 프런트 엔드 렌더링 속도가 빨라집니다. 예, 이는 속도 자체가objects.all()
과 관련이 없고 프런트 엔드에서 수신하는 데이터의 양에만 관련이 있음을 증명합니다.실제 과정에서 백그라운드 페이징은 이보다 조금 더 복잡합니다. 위의 결론이 괜찮다면 다시 업데이트하겠습니다...
캐시 추가, 인덱스 추가, 페이징 추가
Django Restframework를 사용하는 경우 프레임워크에서 기본적으로 제공하는 페이징 기능을 사용할 수 있습니다.
참조: http://www.django-rest-framew...