Я использую jqGrid на странице ASP.NET и внедряю данные в блок скриптов на странице, а затем загружаю их оттуда. Для этого одного варианта использования необходимо, чтобы на экране было сразу видно большое количество данных. который включает в себя 300 ~ 500 записей с 30 столбцами в каждой строке. Пейджинг для этого случая не подходит. Пользователь должен иметь возможность сканировать большое количество данных, выбрать 40 ~ 60 строк и затем перейти к другому экрану.
Я не был уверен, подойдет ли это под просьбу для jqGrid, но в прототипировании все работало достаточно быстро. Однако переход к производству идет мучительно медленно в режиме множественного выбора.
Я сузил болевую точку до jQueryUI 1.8. Если я вернусь только к jQueryUI 1.7, этого будет достаточно быстро.
пример jQueryUI 1.7 ~ 17.htm
пример jQueryUI 1.8 ~ 18.htm
примечание: примеры показывают разницу больше всего в FireFox и IE, Chrome выглядит нормально
На обеих страницах используется самая последняя версия jqGrid 3.8 со всеми выбранными параметрами.
загрузка jQuery и jQueryUI из Google CDN
<base href="http://ajax.googleapis.com/" />
<link href="/ajax/libs/jqueryui/1.8/themes/start/jquery-ui.css" type="text/css" />
<script src="/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script>
<script src="/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script>
загрузка jqGrid JS / CSS с моего сервера
<link type="text/css" href="http://mymx.biz/jqGrid/ui.jqgrid.css" />
<script src="http://mymx.biz/jqGrid/grid.locale-en.js" type="text/javascript"></script>
<script src="http://mymx.biz/jqGrid/jquery.jqGrid.min.js" type="text/javascript"></script>
и мой большой локальный набор данных
<script src="http://mymx.biz/jqGrid/getGridData.js?v=1" type="text/javascript"></script>
пример строки из набора данных
var gridData = [
{id:"1",aa:"aa1",bb:"bb1",cc:"cc1",dd:"dd1",ee:"ee1", ff:"ff1",
gg:"gg1", hh:"hh1", ii:"ii1", jj:"jj1", kk:"kk1", ll:"ll1", mm:"mm1", nn:"nn1"},
{...}
];
Моя базовая настройка вызовов jqGrid
$(function () {
var gridData = getGridData(); // pulls from getGridData.js
setupGrid(gridData);
});
function SelectRow(rowid) {
// I will be firing AJAX calls here in the future
console.log("rowid: " + rowid);
}
function setupGrid(gridData) {
$("#testGrid").jqGrid({
data: gridData,
height: 'auto',
rowNum: gridData.length,
multiselect: true,
datatype: 'local',
multiboxonly: false,
gridview: true, // not sure if this is needed since jqGrid 3.6
onSelectRow: function (rowid) { SelectRow(rowid); },
colNames: ['id', 'aa', 'bb', 'cc', 'dd', 'ee', 'ff',
'gg', 'hh', 'ii', 'jj', 'kk', 'll', 'mm', 'nn'],
colModel: [
{ name: 'id', width: 40 },
{ name: 'aa', width: 40 },
{ name: 'bb', width: 40 },
{ name: 'cc', width: 40 },
{ name: 'dd', width: 40 },
{ name: 'ee', width: 40 },
{ name: 'ff', width: 40 },
{ name: 'gg', width: 40 },
{ name: 'hh', width: 40 },
{ name: 'ii', width: 40 },
{ name: 'jj', width: 40 },
{ name: 'kk', width: 40 },
{ name: 'll', width: 40 },
{ name: 'mm', width: 40 },
{ name: 'nn', width: 40 }
],
caption: "Test Grid"
});
}
Если у кого-то есть понимание, почему сетка такая медленная с jQueryUI 1.8 против jQueryUI 1.7, мы будем очень признательны.