2010-12-07 16 views
0

jqgridベースのグリッドに大量のデータ(約60,000エントリ)をロードしています(私はページングを使用して、表示しているレコードの数が3,000ページ近くになりますページ)、私はPHPが大量のメモリ(128MB以上)を使用しているためにエラーが発生することがわかりました。利用可能なメモリ容量を256MBに増やしました。今は動作しますが、何が原因かと思いますが、何ができるのでしょうか?jqGrid - PHPでのメモリ使用量が多い

私のグリッドを設定するのに使用されるコード:

jQuery("#tlister").jqGrid({ 
       url:'/foo/bar/baz', // JSON data 
       datatype: 'json', 
       mtype: 'POST', 
       colNames:['A', 'B', 'C', 'D', 'E'], 
       colModel :[ 
        {name:'a', index:'a', sorttype:'integer', width:80, editable: true, edittype:'custom', editoptions: { custom_element:custelem,custom_value:custval }}, 
        {name:'b', index:'b', sorttype:'integer', width: 80, editable: false}, 
        {name:'c', index:'c', width: 150, editable: false}, 
        {name:'d', index:'d', width: 150, editable: false, hidden:true}, 
        {name:'e', index:'e', width:200, editable: false, formatter: changeTo}, 
       ], 
       editurl:'/foo/bar/bat', 
       pager: '#pager', 
       pgtext : "Page {0} of {1}", 
       rowNum:20, 
       loadonce: true, 
       rowList:[20,40,60,80,100], 
       width: 'auto', 
       height: 'auto', 
       caption: 'Foobar' 
      }); 

EDIT: へ/ fooの/バー/ bazには、データベースにヒットし、そのグリッドのエントリのすべてをつかむAJAXリクエストすぐに。コントローラはモデル内のメソッドを呼び出し、次の結果を返します。

return $this->getTable()->fetchAll()->toArray(); 

このデータはビューに割り当てられ、グリッドはそれを使用します。私は60,000レコードをつかむことは単純に高価で、それが私の問題の原因だと思いますか?だから、おそらく各グリッドページの負荷でデータの限られたサブセットをつかむほうが効率的だろうか?

+2

サーバーサイドコードがデータの要求をどのように処理するかを示したい場合があります。 –

+0

これを提供するために私の質問が更新されました。 – Lothar

+1

はい、グリッドが元の要求でページングデータを提供している場合は、クエリをそれらの値に制限します。例えば。 –

答えて

0

こんにちは私はあなたがページを変更するたびにajax呼び出しが行われるようなページングを使うことができると思います。この方法では、最初にすべてのレコードをロードする必要はありません。

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:pager

+0

彼は彼が彼の質問にページネーションを使用していたと言いました。 –

+0

私はすでにページングを使用していますが、データのセット全体を取り出して、グリッドにロードするのではなく、小さなビットだけを取り出してから、次のセットのページされたデータが必要です。 jqgridを使ってそれを行う方法がわかりませんが、例に何かがあると仮定します。 – Lothar