2017-02-15 7 views
0

私はこの質問の話題で前提を作っているかもしれませんが、ここに状況があります。 私は、Rails 4アプリケーションの背後にあるmysqlには、540万行のかなり大きなテーブルを持っています。 私はdatatablesと検索を使用しています。そのすべては問題ありませんが、will_paginateの宝石が私たちのパフォーマンスを殺しています。私はwill_paginateとしてこれを回避する方法、これが原因で、MySQLと「後半行オフセット」の問題であると考えていますが、will_paginateと "late row offset"の問題

orders = Order.not_pending.where("azonref like :search or sales_channel like :search", search: "%#{params[:sSearch]}%") 
orders = orders.distinct.order("#{sort_column} #{sort_direction}") 

# this next line is the killer 
orders = orders.page(page).per_page(per_page) 

は、SQLを生成していますか?ここで

+0

データテーブルを使用している場合は、データソースオプションを使用してこれを処理する必要があります。データシートの上にページ番号を付けるのは良いことではありません。 – dstull

+0

注文の配列をチェックしてください。アクティブなレコードであるかどうかを確認し、配列やスムースを間違って配列してください。 –

+0

@dstull - 例(またはこの質問に対する答えを定式化すること)?私が使用しているすべてのRoR/Datatablesの例はwill_paginateです。 – phil

答えて

0

は、DataTableのをより有効に利用するためのオプションは、ここでレールには:

  1. は、DataTableの使用に全くレリ改ページを削除し、 - これは、DOMにすべてを無理に勧めの欠点を持って、スローダウンが発生しますましたそのデータを3MB以上のDOMに転送してください。これを使用する例を次に示します。specific js call - but look at entire project

  2. データソースをajaxソースまたは遅延レンダリングのajaxとして使用します。私はあなたのために多分興味の後者を考える:

    "AJAX"::{ "URL":レールに

アヤックスソースは(DataTableの初期の "AJAX" オプションを利用します「/サンプル/ GET_URL /」+ "いくつかのparams"、 "dataSrcの": '' }

延期

レンダリング:
https://datatables.net/examples/ajax/defer_render.html

+0

ありがとうございます。 300,000行のデータをクライアントに送信することはできません。すでに2番目の提案をしています。問題のコードは、ajaxを介してロードされるRailsのdatatablesオブジェクトからのものです。それは問題ではありません。問題は改ページです。多分これはdatatablesの質問ではなくwill_paginateの質問です。 – phil

関連する問題