python - 怎样优化models.objects.all() ?
PHPz
PHPz 2017-04-18 09:28:19
0
3
370

先看代码
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秒左右前端才能渲染完成,请问有什么优化的方法,能让速度更快。

PHPz
PHPz

学习是最好的投资!

全員に返信(3)
Ty80

ページングは​​バックグラウンドで完了する必要があります。これは、2000 の複数のデータをすべてバックグラウンドで取得し、フロント デスクに渡しているためです。フロント デスクは、生成時にこれらの 2000 の複数のデータをロードします。ページングがバックグラウンドで完了している場合、各 50 個のデータなど、データがフロント デスクで現在のページに渡されるだけであれば、ページのレンダリングは自然に高速になります。

私が言ったことが正しいかどうかを確認するために、まずこれを試してみてください:

リーリー

上記のコードには [:50] を 1 つだけ追加しました。.all() メソッドは引き続きすべての 2000 部分を取得しますが、これによりフロントエンドに渡されるのは 50 部分だけです。フロントエンドのレンダリング速度が速くなります。はい、これは速度自体は objects.all() とは関係がなく、フロントエンドが受信するデータ量にのみ関係していることを証明しています。

実際のプロセスでは、バックグラウンド ページングは​​これよりも少し複雑です。上記の結論が問題なければ、もう一度更新します。

いいねを押す +0
伊谢尔伦

キャッシュの追加、インデックスの追加、ページングの追加

いいねを押す +0
Ty80

Django Restframework を使用する場合は、フレームワークによってネイティブに提供されるページング関数を使用できます。

参照: http://www.django-rest-framew...

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!