2016-12-01 12 views
0

私はdatatablesをajaxデータ要求(json形式)と動的列の読み込みで使用しています。これは私の実際のコードです:データ型:動的な列と大量のデータ

var tableData; 
var tableName='#iuprTable'; 

$(document).ready(function(){ 

    jQuery.ajax({ 
     type : "GET", 
     url : "table/"+document.getElementById("hiddenIdCar").value, 
     headers: {'Content-Type': 'application/json'}, 
     beforeSend: function() { 
      waitingModal.showPleaseWait(); 
     }, 
     success: function(data,status,xhr){ 
      //No exception occurred 
      if(data.success){ 
       tableData = data.result; 
       $.each(tableData.columns, function (k, colObj) { 
        var str = '<th data-html="true" data-toggle="tooltip" title="<b>NAME</b>:'+ colObj.parName + '<br><b>DESCRIPTION</b>:' + colObj.description + '<br><b>NOTE</b>: ' + colObj.note + '"></i>' + colObj.parName + '</th>'; 
        $(str).appendTo(tableName+'>thead>tr'); 
       }); 
      } else { 
       waitingModal.hidePleaseWait(); 
       notifyMessage(data.result, 'error'); 
      } 
     }, 
     error: function(xhr,status,e){ 
      window.location.href = "/500"; 
     } 
    }).complete(function() { 
     //initialize datatable 
     if (! $.fn.DataTable.isDataTable(tableName)) { 
      var iuprTable = $(tableName).DataTable({ 
       scrollCollapse: true, 
       scrollX:  true, 
       scrollY:  '60vh', 
       paging:   false, 
       "data": tableData.data, 
       "columns": tableData.columns, 
       fixedColumns: { 
        leftColumns: 4 
       }, 
       "initComplete": function(settings){ 
        //TOOLTIP cell 
        $(tableName+ ' tbody td').each(function (k, cellObj){ 
         this.setAttribute('title', cellObj.innerText); 
         this.setAttribute('data-toggle', "tooltip"); 
        }); 
        $('[data-toggle="tooltip"]').tooltip({ 
         container: 'body' 
        }); 
        //add timeout because otherwise user could see a too fast waiting modal 
        setTimeout(function(){ 
         waitingModal.hidePleaseWait(); 
        }, 1000);  
       } 
      }); 
     } 
     else { 
      iuprTable.ajax.url("table/"+document.getElementById("hiddenIdCar").value).load(); 
     } 
    }); 
}); 

function notifyMessage(textMessage, typeMessage){ 
    $.bootstrapGrowl(textMessage, { 
     type: typeMessage, // (null, 'info', 'error', 'success') 
    }); 
} 

私は300行300列を持つかもしれないので、この数字はページが遅くなります。私はサーバー側の処理について読んで、どのようにパフォーマンスを向上させることができるのだろうかと思っていました。 私は2つのソリューションを発見した:

1)サーバ側の処理を:のみ示した行サーバーに

2)クライアント側に尋ねる:JSONはすべての行を返しますが、唯一のいくつかのそれらのは、特定の時間にあったされていますユーザーがスクロールするとデータが更新されます(ページは最初の読み込み後に速くなります)。

最初の解決策は、Webサービスを変更する必要があるため、クライアント側の処理よりも複雑です。あなたは私に助言をしていますか?どのようにこれらのソリューションを実装できますか?制限と確かにパフォーマンスが向上しますそれぞれの紹介の列を持つページあたり50など

とインデックスデータベースのオフセットと感謝

+0

あなたはすでにあなたの選択を知っているようですので、#1はパフォーマンス上のメリットがあり、#2は実装が簡単です。 –

+0

はい、私は特にそれらを動的データでどのように実装できるのか分かりません – luca

答えて

0

使用し、サーバー側の改ページ..

可能な場合は、キャッシュのクエリで行くことができますmemcachedなど

+0

コード例がありますか? – luca

+0

http://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html – ishwar

+0

これはクエリ用ですが、私の問題はdatatablesです – luca

関連する問題