jqgrid carga un gran conjunto de datos sin paginación

Me preguntaba si hay una mejor manera de cargar grandes conjuntos de datos Json desde el servidor.

Estoy usando jqgrid como loadonce: verdadero. Necesito cargar alrededor de 1500 registros a la vez y tampoco utilizo las opciones de paginación. ¿Hay alguna forma mejor de lograr esto? Gracias de antemano.

Este es mi código de cuadrícula

$(function(){ $("#testgrid").jqGrid({ url:getGridUrl, datatype: 'json', mtype: 'GET', height: 250, colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], colModel:[ {name:'id',index:'id', width:60, sorttype:"int",search:false}, {name:'invdate',index:'invdate', width:90, sorttype:"date",search:false}, {name:'name',index:'name', width:100,search:false}, {name:'amount',index:'amount', width:80, align:"right",sorttype:"float"}, {name:'tax',index:'tax', width:80, align:"right",sorttype:"float",search:false}, {name:'total',index:'total', width:80,align:"right",sorttype:"float",search:false}, {name:'note',index:'note', width:150, sortable:false,search:false} ], multiselect: true, multiboxonly:true, caption: "Manipulating Array Data", pager: '#testgridpager', //Auto load while scrolling //scroll: true, //to hide pager buttons pgbuttons:false, recordtext:'', pgtext:'', loadonce: true, sortname: 'id', sortorder: 'asc', viewrecords: true, multiselect: true, jsonReader : { root: "rows", //page: "page", //total: "total", records: "records", repeatitems: false, cell: "cell", id: "id" }, loadComplete: function(data) { var rowId; //alert(data.length); //alert('load complete'+data.rows.length); //set checkboxes false if mode is set to true if(mode){ for(var i=0;i<data.rows.length;i++){ rowId=data.rows[i].id; disableRow(rowId); var searchVal = $("#gs_amount").val().trim(); if(searchVal ==data.rows[i].amount){ jQuery("#testgrid").jqGrid('setSelection',rowId); //heighlightSearch(); } } } } }); //toolbar search $("#testgrid").jqGrid('filterToolbar',{stringResult:true,searchOnEnter:false}); }); function disableRow(rowId){ $("#testgrid").jqGrid('setRowData', rowId, false, {color:'gray'}); var trElement = jQuery("#"+ rowId,$('#testgrid')); trElement.removeClass("ui-state-hover"); trElement.addClass('ui-state-disabled'); trElement.attr("disabled",true); } 

En el ejemplo de esta demostración , puede ver el momento de cargar 1500 filas para su cuadrícula en caso de uso de gridview: true .

El problema de mayor rendimiento de su ejemplo se encuentra dentro de la función loadComplete . Si necesita hacer algunas modificaciones en la cuadrícula, debe usar jQuery para manipular la cuadrícula contener. El mejor rendimiento que puede archivar si usa los elementos DOM de la cuadrícula directamente como en el ejemplo

 loadComplete: function() { var i=0, indexes = this.p._index, localdata = this.p.data, rows=this.rows, rowsCount = rows.length, row, rowid, rowData, className; for(;i 

Puedes ver el ejemplo correspondiente en vivo aquí .

En la implementación de la función loadComplete utilizo el hecho de que jqGrid tiene el parámetro loadonce:true y usa parámetros internos _index y data que pueden usarse para acceder al contenido de la grilla. En el ejemplo, desactivé las filas que no contienen "200" en la columna de amount .

ACTUALIZADO : La respuesta describe cómo usar la callback de rowattr para simplificar la solución y obtener el mejor rendimiento (en el caso de gridview: true de la causa).

Me sentiría tentado a buscar en la función de carga automática en desplazamiento de jqGrid. Nunca cargaría 1500 filas por adelantado. ¿Alguna razón por la que no puedes buscar?