0

私はこの状況に直面しています。約3500行のグリッドがあります。そして、このグリッドは、特にIE6(クライアントのブラウザーです...残念ながら)ではクロスブラウジングする必要があります。

IE6でテストを行うと、他のブラウザよりも読み込みに時間がかかります。これを確認した後、クエリを最適化することにしました。必要なdbフィールドのみが読み込まれますが、IEでの読み込みはまだ遅くなります。私のデータ型はJSONです。

この不便さに加えて、すべてのブラウザーでフィルタリングが遅いことがわかりました(IE6では他のブラウザーよりもはるかに時間がかかります)。フィルタでオプションを使用していsearchOnEnter : falseます。IE6の列による並べ替えも遅いです。

読み込み時間を短縮するために、また列によるフィルタリングと並べ替えを使用する場合、どうすればよいですか?私はまだ可能な解決策を得るためにサーフィンをしていますが、アイデアが不足しています。

前もって感謝します。

更新:jQGridコード

var myGrid = $('#bookingsList');
myGrid.jqGrid({
    jsonReader : { root: "rows", repeatitems: false, id: "0", cell: ""},
    url:'/WebBooking/json/bookingListAct.action',
    datatype: 'json',
    mtype: 'POST',
    colNames:['Id','Site','CompanyId','Created'],
    colModel :[
    {name:'bestillingId', index:'bestillingId', width:45, sorttype: 'int'}, 
    {name:'stedName', index:'stedName', width:90},
    {name:'firmaId', index:'firmaId', width:200, hidden:true}, 
    {name:'creationDate', index:'creationDate', width:105, search:false}
    ],
    pager: '#pager',
    rowNum:10,
    rowList:[10,50,100,150,200,250,500],
    sortname: 'bestillingId',
    sortorder: 'desc',
    viewrecords: true,
    gridview: true,
    loadonce: true,
    sortable: true,
    rownumbers: true,
    autoencode: true,
    ignoreCase: true,
    shrinkToFit:false,
    width: 1050,
    height: '100%'
}); 

更新:JSON文字列(一部)

{"page":"1","records":"3180","rows":[{"stedName":"Mongstad","bestillingId":"2","firmaName":"Reinertsen AS","creationDate":"13.09.11 09:01"}],"total":"318"}

4

1 に答える 1

1

現在のコードの主な問題は、loadonce: true. の実装url:'/WebBooking/json/bookingListAct.action'は非常に簡単です。すべてのデータだけを jqGrid に返します。それにもかかわらず、データをソートする必要がある場合のイベントは、サーバー上でおよびパラメータとして表示されるsortname: 'bestillingId'およびに対応します。sortorder: 'desc'bookingListAct.actionsidxsord

loadonce: true使用する場合、データの並べ替え、ページング、およびフィルタリングは、JavaScript コードでクライアント側に実装されることを理解する必要があります。JavaScript はほとんどがインタープリターであり、コードはコンパイルされません (少なくとも古い Web ブラウザーでは)。そのため、クライアント側でのデータの並べ替えは、コンパイルされたネイティブ コードのサーバーの場合と比べて、何倍も (または何千倍も) 遅くなります。データベースにデータを保持し、並べ替えまたはフィルター処理を許可する列にインデックスがある場合、サーバー側の実装では並べ替えとフィルター処理がより高速になります。

したがって、私の主な提案は、サーバー側の並べ替え、ページング、およびフィルタリングを実装することです。

サーバー側でソートを実装するには、対応する SQLステートメントで構築する必要がsidxあります。sordORDER BYSELECT

サーバー側でページングを実装するには、pageおよびrowsパラメータからの情報を使用する必要があります。SELECT TOPand LEFT OUTER JOINor LIMITandは、使用SKIPする SQL の方言に応じて使用できます (ここを参照) いくつかの詳細。

フィルタリングを実装するには、最初にfilterToolbarstringResult: trueのオプションを使用して、フィルタに関する情報を Advanced Searching 形式で送信する必要があります (こちらを参照)。JSON 文字列の形式の完全なフィルターは、パラメーターとしてサーバーに送信されます。さらに、ブール値のパラメーターを送信します。サーバー側では、パラメーターを JSON 文字列からオブジェクトに変換し、情報を解析する必要があります。次に、その情報を使用して、対応するステートメントの一部を構成する必要があります。filters_searchfiltersWHERESELECT

サーバーへのリクエストにすべての情報の並べ替え、ページング、およびフィルタリングが存在する場合は、最初にデータをフィルタリングし、結果を並べ替えて、結果から要求されたページを取得する必要があります。サーバー応答のrecordstotalの値は、フィルタリングを考慮する必要があります。したがって、フィルタリングされたデータがたとえば 12 行で構成され、ページ サイズが 10 の場合、フィルタリングされていないデータ"records": 12, "total": 2の代わりに返す必要"records": 3180, "total": 318があります。

私自身は Java を使用していません。それが役立つかどうかはわかりませんが、答えでは、ページング、並べ替え、およびフィルタリングを実装する Visual Studio C# プロジェクトを見つけてダウンロードします。

最後の発言。現在、サーバーから返されるデータの行は次のようになります

{"stedName":"Mongstad","bestillingId":"2","firmaName":"Reinertsen AS",
    "creationDate":"13.09.11 09:01"}

データのデフォルトrepeatitems: true形式を一緒に使用するid: "0", cell: ""場合は、行に必要なデータを置き換えることができます

["Mongstad","2","Reinertsen AS",:"13.09.11 09:01"]

これにより、データのサイズが縮小され、パフォーマンスがさらに向上します。さらに、個人的には date を のような形式で使用するのは好きではありません"13.09.11 09:01"。このようなフォームはローカライズされており、文字列として解釈されるため、正しい並べ替えやフィルター処理を行うことができません。データをISO 8601形式の形式で返す方がよいでしょう:2011-109-13T08:01Zまたは2011-109-13T09:01+01:00. formatter: 'data'で使用できますformatoptions: { srcformat: 'ISO8601Long', newformat: 'd.m.y H:i' }

于 2012-05-15T10:23:38.327 に答える