jquery データテーブルを使用してレコードを表示しています。データベースから約 12000 レコードを取得し、それを html テーブルに追加してから、jQuery データテーブルに変換しています。
データテーブルへの変換には非常に長い時間がかかります。約 15 分間待機しましたが、まだテーブルがロードされていません。
それを解決する方法はありますか?
遅延の主な理由は、12000 レコードに対応する、ページに表示しようとしている大量の HTML 要素です。唯一の解決策は、それをできるだけ減らすことです。
レコードを html に配置しないでください。JSON 経由でページに送信してください<script>
。
データテーブルのページあたりのレコードを制限します。最初にページングを有効にしbPaginate: true
、2 番目にページごとにレコードを設定しますiDisplayLength: 25
yourDataTable.fnAddData(data)
データセットをロードするために使用します。
クエリで使用されるキー列でTrust Indexingが有効になっています。また、結果を HTML に追加して DataTable に変換するにもかかわらず、次のことをお勧めします。
$('#table_id').DataTable({
ajax: {
url: url_to_data,
dataSrc: "",
contentType: "application/json",
type: "POST",
data : function(d) {
return JSON.stringify({ param1: param1_val, param2: param2_val });
},
},
pageLength: 30,
processing: true,
serverSide: true, //server side processing for larger datasets
columns: [
{ sTitle: "col_1", data: "col_1_field" },
{ sTitle: "col_2", data: "col_2_field" },
],
});
これを試して..
<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.scrollingPagination.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#example').dataTable( {
"sPaginationType": "scrolling",
"bProcessing": true
} );
} );
</script>
2 つの反復があるため、ロードに時間がかかります。代わりに、次のようなパラメーターを使用してサーバーからデータテーブルを直接ロードします。
"sAjaxSource": '#yourServerCallHereWhichReturnsJSON#',
"fnServerData": fnServerObjectToArray(aPublicationElements),
ここで、「aPublicationElements」は、次のような JSON 要素を含む変数です。
var aPublicationElements = ['jsonParameter1','jsonParameter2','jsonParameter3','jsonParameter4'] ;
そして、これらのデータをパラメーター内で次のようにレンダリングします。
"aoColumns": [
{"sTitle":"Title1",
"render": function(data, type, oObj) {
return oObj[0];
}
},
{"sTitle":"Title2",
"render": function(data, type, oObj) {
return oObj[1];
}
},
{"sTitle":"Title3",
"render": function(data, type, oObj) {
return oObj[2];
}
},
{"sTitle":"Title4",
"render": function(data, type, oObj){
return oObj[3];
}
}
}
],
関数「fnServerObjectToArray」は、サーバー オブジェクトを配列に変換する次のようなものです。
fnServerObjectToArray = function ( aElements ){
return function ( sSource, aoData, fnCallback ) {
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": function (json) {
var a = [];
for ( var i=0, iLen=json.length ; i<iLen ; i++ ) {
var inner = [];
for ( var j=0, jLen=aElements.length ; j<jLen ; j++ ) {
inner.push( json[i][aElements[j]] );
}
a.push( inner );
}
json.aaData = a;
fnCallback(json);
}
});
}
};
お役に立てれば。
pagination
一度に少数のレコードのみを使用および表示することをお勧めします。http: //datatables.net/plug-ins/paginationをご覧ください。一度に 12000 件のレコードを表示すると、ユーザー エクスペリエンスが向上するとは言えません。ajax とページネーションを使用して、各ページのデータを読み込みます。