2016-12-01 4 views
0

Ich verwende datatables mit AJAX-Datenanforderung (JSON-Format) und dynamische Spalten laden. Dies ist mein eigentlicher Code:Datatables: dynamische Spalten und riesige Datenmengen

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') 
    }); 
} 

Da ich 300 Zeilen und 300 Spalten aufweisen kann, mit diesen Zahlen der Seite langsam wird. Ich habe über serverseitige Verarbeitung gelesen und mich gefragt, wie ich die Leistung steigern kann. Ich habe 2 Lösungen gefunden:

1) Server-Seite Verarbeitung: fragen zu Server nur die zeigten Reihen

2) Kunde: die json alle Zeilen zurückgibt, aber nur einige von ihnen in einer bestimmten Zeit zeigte Wenn der Benutzer scrollt, werden die Daten aktualisiert (die Seite ist nach dem erstmaligen Laden schneller).

Die erste Lösung ist am kompliziertesten als clientseitige Verarbeitung, weil ich Webdienste ändern sollte. Hast du einen Ratschlag für mich? Wie kann ich diese Lösungen implementieren? Dank

+0

Sie scheinen, Ihre Wahlen bereits zu kennen, also kann ich nur sagen, dass # 1 mehr Leistungspotential hat, # 2 ist einfacher zu implementieren. –

+0

ja, aber ich weiß nicht, wie ich sie besonders mit dynamischen Daten implementieren kann – luca

Antwort

0

Verwenden Serverseite Paginierung mit Limit und Offset von 50 pro Seite usw.

und Indexieren Ihrer Datenbank mit entsprechenden Empfehlungs Spalten, die Leistung sicher verbessern ..

Wenn möglich kann auch mit Cache-Abfrage gehen wie Memcached usw.

+0

Haben Sie ein Codebeispiel? – luca

+0

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

+0

Dies ist für die Abfrage, mein Problem ist mit Databases – luca

Verwandte Themen