2013-02-16 5 views
0

Я использую флажки, чтобы показывать или скрыть столбцы в jqGrid, и поскольку у меня есть много, много строк, каждый со многими значениями в своих ячейках, это займет много времени, чтобы этот флажок завершил проверку при проверке Это.checkbox slow to check

Я хочу, чтобы чекбокс был немедленно проверен, а затем выполняйте длительные операции jqGrid. Например,

$('input[type="checkbox"]').click(function(e) { 
    // First render/unrender the checkmark  
    // Next do some very time-consuming jqGrid operations 
} 

Как я могу это достичь? Как бы то ни было, он сначала выполняет вызовы jqGrid и только проверяет checkox в самом конце. Для проверки флажка требуется полные ДВА секунды!

+0

Не могли бы вы более точно уточнить, какие флажки вы имеете в виду? Это флажки [columnChooser] (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jquery_ui_methods#column_chooser), или вы используете какой-либо другой пользовательский интерфейс, где вы просто вызываете 'showCol' или' hideCol' ? – Oleg

+0

Привет, Олег. Я использую пользовательский интерфейс, где я вызываю showCol и hideCol. Проблема возникает, даже когда я использую showCol для одного colName. Я использую jqGrid 4.4.1, так что у вас есть оптимизация iOS. – ktm5124

ответ

3

Попробуйте положить на трудоемком кода тайм-аута:

// immediate stuff here 
setTimeout(function() { 
    // time-consuming stuff here 
},1); 

В идеале, вы хотите, чтобы положить, что трудоемкий материал в Web Worker, чтобы не замерзнуть интерфейс.

1

Вы можете сделать оптимизацию на своей странице и в скрипте.

  1. Поместите ваши скрипты до конца <body> тега.
  2. Использование Толс для повышения производительности: Лучший инструмент, который я могу рекомендовать для этого dynaTrace AJAX Edition, это профайлер для IE (как правило, самый медленный в исполнении JS, так что на самом деле хорошую тестовую среду для запуска оптимизации). Это даст вам полную разбивку, покажет вам повторяющиеся вызовы методов, дерево вызовов и где идут циклы вашего процессора. Check out their tutorials on usage/features, чтобы начать.
  3. Improving jQuery Performance with Large Data Sets темы включают в себя:
  1. Использование JavaScript родной для() петли вместо JQuery в $ .each() помощник
    функция.
  2. НЕ добавляйте элемент к DOM в свой цикл.
  3. Если у вас есть много элементов для вставки в DOM, окружите их
    с родительским элементом для улучшения производительность.
  4. Не используйте конкатенацию строк, вместо этого используйте метод join() массива для очень длинных строк.
  5. Используйте функцию setTimeout() для вашего длинного цикла и конкатенации списка
    функции.

  6. Минимизировать сценарии

Надеюсь, это будет достаточно, чтобы получить более высокую производительность

0

Я считаю, что вы можете сделать/ООН вынести галочку в одной .click() функции, то сделать ваш Операции jqGrid в другом .click(). то есть

$('#selector').click(
    function(){//rendering stuff} 
).click(
    function(){//computational stuff} 
); 
+0

Но как? Я весь день пытался понять это. – ktm5124

+0

Я считаю, что это правильно, хотя второй '.click', возможно, должен быть' .done' – gilbertbw