Laravel-datatables: 行数が多い場合、データの読み込みは非常に遅くなります。

作成日 2017年03月08日  ·  14コメント  ·  ソース: yajra/laravel-datatables

問題または機能のリクエストの概要


LaravelでDatatableを実装しようとしましたが、Datatableが1つのリクエストでALLを取得し、ページ付けがJS側で行われるため、テーブルに多数の行がある場合に問題が発生します。 Laravelのページ付けを使用できますか、それともajaxメソッドのEloquentからpaginate()メソッドでページ付けされた行を返すことができますか? これは私のプロジェクトにとって大きな問題だからです。 データの読み込みは非常に遅いです。 検索すると、ワードプロセッシングも非常に遅く、 sortsearchなどの操作の後、ページがフリーズして何も起こりません。
誰かがこのような同じ問題を抱えていることを願っています。

問題のコードスニペット

                serverSide: true,
                processing: true,
                render: true,
                columns: [
                    {data: 'code'},
                    {data: 'name', "defaultContent": "<i>Not set</i>"},
                    {data: 'native_name',  "defaultContent": "<i>Not set</i>"},
                    {data: 'action'}
                ],
                ajax: '{!! route('dt-languages') !!}'

システムの詳細

  • オペレーティングシステムLinux
  • PHPバージョン7.0.4
  • Laravelバージョン5.4
  • Laravel-Datatablesバージョン7.2

最も参考になるコメント

クエリビルダーを使用するには、getを削除する必要があります。

return $this->languages->select('languages.*');

全てのコメント14件

クエリの代わりにコレクションを使用している可能性がありますか? サーバー側のコードを貼り付けることはできますか? ありがとう!

私はリポジトリパターンを使用しており、LanguageRepository.phpには次のものがあります。
return $this->languages->select('languages.*')->get();

クエリビルダーを使用するには、getを削除する必要があります。

return $this->languages->select('languages.*');

オーケー。 今は良く見えます。 もう一度テストして、結果を書き込みます。
しかし、その間にもう1つの問題があります。 単語を検索しようとすると、次のエラーが発生します。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'languages.action' in 'where clause' (SQL: select count(*) as aggregate from (select '1' as `row_count` from `languages` where (LOWER(`languages`.`name`) LIKE %m% count_row_table)

列が追加されたため、アクションを検索不可/注文不可として設定します。

どうもありがとうございました! @yajra
テストが終了したら、結果を送信します

私のテスト結果:

最初のクエリ:
select count(*) as aggregate from (select '1' as row_count from languages where languages.deleted_at is null and languages.deleted_at is null) count_row_table -> 3.64ms

2番目のクエリ:
select languages.* from languages where languages.deleted_at is null order by code asc limit 10 offset 0 -> 1.05ms

助けてくれてありがとう@yajra

手伝ってよかった! ありがとう!

私はその問題に苦しんでいます。 レンダリングが遅い。 私のサーバー側のクエリ。

 $products = DB::connection("mysql2")->table('products')->
        join('products_description', 'products.products_id', '=', 'products_description.products_id')
            ->select(['products.products_id', 'products_description.products_name', 'products.products_isbn13', 'products.products_distributor', 'products.products_price', 'products.products_status']);
 return Datatables::of($products)->make(true);

助けて。 ページ付けするために独自のスクリプトを作成する必要がありますか? 私は何をすべきか?
私は4,000,000以上の製品の記録を持っています。
@yajraあなたが私を助けてくれたらとても感謝しています。

私もこれを手に入れました、データテーブルリクエストがページネーションパラメータをクエリにチェーンしていない可能性がありますか?

@pnghaiどうすれば確認できますか?

@hsaliごめんなさい。 誤警報。 私のロジックには、行き止まりのサーバーにリンクし、各レコードが誤った404接続をフェッチするように強制する、リモートイメージフェッチが含まれていることが判明しました。これは、レコード数* 60(タイムアウトの数秒前)を占めます。 私はその論理を一時停止し、物事は今非常にうまく機能しています。

どうもありがとうございました
(p / s:pnghaiニックネームは私自身の別のgithubアカウントです)

@pnghaiどうすれば確認できますか?

これを解決できましたか? はいの場合、どのように?

読み込みが遅くなる人のために、フェッチされたレコードを何らかの方法でループする、コントローラー関数にある種のループがあるかもしれません。

このページは役に立ちましたか?
0 / 5 - 0 評価