2016-05-15 8 views
1

Ich habe als eine Aufgabe erhalten 2 Anwendungen erstellen, eine optimierte und eine nicht optimiert und ich verwende freie jqGrid, um die Daten aus der DB anzuzeigen.jqGrid - Wie kann ich die Geschwindigkeit der lokalen Operationen verfolgen

Ich habe erfolgreich beide erstellt, aber ich möchte die Geschwindigkeit verfolgen, bei der die lokalen Operationen ausgeführt werden (Paging, Suche, Sortierung).

Ich habe versucht, Ereignisse für jede Schaltfläche einzurichten, die die Operationen auslöst, aber sie scheinen nicht auszulösen ... Ich fragte mich, ob es etwas Besseres gibt, das in jqGrid eingebaut ist, das ich verwenden könnte oder einen Ratschlag hilf mir, das zu lösen.

Mein jqGrid Code geht so:

$(function() { 
    var colModelSettings = [ 
     {name:'id', label:'id',key: true, hidden: true, width:10,sorttype:'number',editable: true},  
     {name:'judet',label:'Judet',width:70, align: 'center',editable:true}, 
     {name:'localitate',label:'Localitate',width:80,editable:true,searchoptions: {sopt: ['eq','bw','ew','cn']},align: 'center'}, 
     {name:'tipStrada',label:'tipStrada',editable:true,searchoptions: {sopt: ['eq','bw','ew','cn']},width:100,align: 'center' }, 
     {name:'denumire',label:'denumire',editable:true,width:100,searchoptions: {sopt: ['eq','bw','ew','cn']},align: 'center'}, 
     {name:'cod',label:'cod',width:90,editable:true,align: 'center'} 
     ]; 
    var beforeEvent = 0;  
    $("#gridAdrese").jqGrid({ 
     pager: $("#pagerGrid"), 
     url: "/UnoptimizedProject/rest/fetchData", 
     datatype: "json", 
     mtype: "POST", 
     loadonce: true, 
     forceClientSorting:true, 
     height: window.innerHeight-250, 
     sortname: 'id', 
     ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
     serializeGridData: function (postData) { 
      if (postData.searchField === undefined) postData.searchField = null; 
      if (postData.searchString === undefined) postData.searchString = null; 
      if (postData.searchOper === undefined) postData.searchOper = null; 
      return JSON.stringify(postData); 
     }, 
     rowNum: 5000, 
     viewrecords: true, 
     loadComplete: function(){ 
      if(beforeEvent !== undefined){ 
       var afterEvent = new Date().getTime(); 
       console.log(afterEvent- beforeEvent); 
       beforeEvent = 0; 
      } 
     }, 
     sortorder: 'asc', 
     caption:'Coduri Postale Neoptimizat' , 
     autowidth: true, 
     colModel: colModelSettings, 
    }); 
    $("#gridAdrese").jqGrid('navGrid', "#pagerGrid", {edit:false, add:false, del:false, save:false, cancel:false, search:true, searchtext: 'Search', refresh: false}); 

    $("#jqgh_gridAdrese_judet, #jqgh_gridAdrese_localitate, #jqgh_gridAdrese_tipStrada, #jqgh_gridAdrese_denumire, #jqgh_gridAdrese_cod ").on("click",function(){ 
     beforeEvent = new Date().getTime(); 
     console.log("Sorting"); 
    }) 
    $("#fbox_gridAdrese_search").on("click",function(){ 
     beforeEvent = new Date().getTime(); 
     console.log("searching"); 
    }); 

    $("#next_pagerGrid , #last_pagerGrid, #prev_pagerGrid, #first_pagerGrid").on("click",function(){ 
     beforeEvent = new Date().getTime(); 
     console.log("paging"); 
    }) 
}); 
+0

Sie schreiben über "2 Anwendungen, eine optimiert und eine nicht optimiert". Was ist "optimiert"? Nur die Antwortzeit von der 'URL'? Sie verwenden 'loadonce: true, forceClientSorting: true'. Dies bedeutet, dass Sortieren, Paging und Suche ** lokal ** von jqGrid durchgeführt werden. Somit ist der Zeitpunkt des Sortierens, Paging und Suchen bei optimiertem und nicht optimiertem Backend identisch. – Oleg

+0

Die optimierten und nicht optimierten Unterschiede liegen hauptsächlich im Backend und den dort verwendeten Technologien. Die optimierte Anwendung macht alle Operationen wie Suchen, Sortieren, Seitenumbruch auf dem Backend und die nicht optimierte App macht es lokal. – IvanSt

+0

Sie können den id-coulumn entfernen, der überhaupt nicht benötigt wird. Sie können alle 'label' entfernen, wenn der Wert von' label' mit dem Wert von 'name' übereinstimmt (zB' name: 'tipStrada', label: 'tipStrada'', 'name:' denumire ', label: 'denumire'', ...) – Oleg

Antwort

1

Sie können über folgende Möglichkeiten:

var startTime, measureTime = false, timeInterval, 
    startMesure = function() { 
     startTime = new Date(); 
     measureTime = true; 
    }; 

startMesure(); 
$("#gridAdrese").jqGrid({ 
    url: "/UnoptimizedProject/rest/fetchData", 
    ... 
    onSortCol: function() { 
     startMesure(); 
    }, 
    onPaging: function (pgButton, options) { 
     //if (pgButton === "records") { 
      startMesure(); 
     //} 
    }, 
    searching: { 
     closeAfterSearch: true, 
     closeAfterReset: true, 
     closeOnEscape: true, 
     searchOnEnter: true, 
     beforeSearch: function() { 
      startMesure(); 
      return false; // allow filtering 
     }, 
     onSearch: function() { 
      startMesure(); 
     }, 
     onReset: function() { 
      startMesure(); 
     }, 
    }, 
    loadComplete: function() { 
     if (measureTime) { 
      timeInterval = new Date() - startTime; 
      setTimeout(function() { 
       alert("Total loading time: " + timeInterval + "ms\nFull time: " + 
        (new Date() - startTime)); 
      }, 50); 
      measureTime = false; 
     } 
    } 
}).jqGrid("filterToolbar").jqGrid("navGrid"); 

Wir zurückgesetzt startTime mit Bezug auf startTime = new Date(); auf die aktuelle Zeit zu Beginn der Sortierung, Paging oder filtern.

Verwandte Themen