Во-первых, ваш JSON проанализирован по этому вызову на $.parseJSON()
, и я держу пари, что не медленно. Держу пари, что медленнее - это код, который интерпретирует структуру данных и обновляет ваш DOM.
Первое, что вам нужно сделать, это спрятать поиск jQuery во внутреннем цикле. Это немного поможет:
for (var j in obj) {
var cell = $('#td_' + i + '_' + j);
Теперь вы можете использовать «ячейку» вместо повторения этого поиска jQuery. (Не поможет , что много, но это что-то.)
Для настройки обработчиков событий в (потенциально большой) таблице, когда вы хотите обрабатывать щелчки (или что-то еще) в отдельных ячейках, вам будет намного лучше использовать jQuery .delegate()
функция:
case 'status':
$('table').delegate('#td_' + i + '_' + j, 'click', function() {
updateStatus(obj['id'], obj[j]);
});
break;
Обратите внимание, что ваш текущий код будет повторно присоединять этот обработчик "onClick" каждый раз, когда он получает сообщение "status" в данных. Вы можете добавить чек, чтобы убедиться, что вы без необходимости заново зарегистрируете:
case 'status':
if (!$('table').data(i + '_' + j)) {
$('table').delegate('#td_' + i + '_' + j, 'click', function() {
updateStatus(obj['id'], obj[j]);
});
$('table').data(i + '_' + j, true);
}
break;
Независимо от того, как вы это прокручиваете, перебор большой структуры данных и обновление большого количества ячеек в большой таблице могут быть довольно медленными, в зависимости от вашего CSS и т. Д., Особенно в старых браузерах (IE6).