Мое первое предложение, основанное на моем опыте, - это избегать загрузки многих тысяч записей, если это возможно. В браузере очень сложно воспроизвести ощущения Notes-клиента, и в большинстве случаев в этом нет необходимости, за исключением редких случаев. Предложите пользователям найти нужную им информацию, выполнив поиск, или классифицируйте представления в серверной части и предоставьте пользователям возможность выбора категории из раскрывающегося списка или чего-то подобного.
Но если вам абсолютно необходимо загрузить много данных, есть несколько разных направлений, по которым вы можете идти ...
Большая часть времени загрузки дляDataTables - это фактическое отображение строк и столбцов таблицы в зависимости от того, какой тип логики у вас есть для rowCallback и т. Д. Подумайте об использовании плагина скроллера, который будет отображать только видимые строки. При прокрутке таблицы будут отображаться дополнительные строки. Это значительно ускоряет время рендеринга для больших таблиц.
Если вы загружаете большой объем данных, например, 1000 строк, вы можете разделить запросы данных так, чтобы пользователи получали начальныйданные загружаются (например, 300-500 строк) быстро, а остальные данные загружаются асинхронно за сценой. Загрузите исходные данные через параметры ajax как обычно, а затем получите остальное в обратном вызове initComplete.
Другой вариант - изначально загрузить данные через ajax и сохранить их в localStorage или сеансе Storage. а затем укажите ваш параметр DataTables «данные» на ваши локальные данные. Это не обязательно обеспечивает улучшение производительности, но отвечает на ваш вопрос об «отключении» параметра ajax.
Например:
var ajaxOptions = {
type: 'GET',
"url": *your rest url*,
contentType: 'application/json',
dataType: 'json',
cache: false
}
$.ajax(ajaxOptions)
.fail(function() {
console.log("AJAX FAIL")
})
.then(function(resp){
localStorage.setItem('dtdata', JSON.stringify(resp));
})
.done(function() {
// initialize DataTable
$("#myTable").DataTable( {
"data": JSON.parse(localStorage.getItem('dtdata')),
"columns": o.columns
// other DataTable parameters
})
});
Любая комбинация № 3 и 1 или 2.