Плагин jQuery datatables слишком медленный - требуется замена
Я использую jQuery плагин datatables уже около двух лет, и до сих пор он отлично работал. Проблема возникла сейчас, когда мне нужно загрузить около 45000 записей сразу (вы нажимаете кнопку и дожидаетесь загрузки страницы) - время загрузки слишком велико, чтобы ждать.
Вот те тесты, которые я сделал с помощью веб-браузера Chrome (данные взяты из него с помощью вкладки "Сеть" ):
подключен плагин datatables:
5476:
24 requests ❘ 256.26KB transferred ❘ 19.80s
(onload: 19.80s, DOMContentLoaded: 18.58s)
45071:
34 requests ❘ 1.85MB transferred ❘ 11.1min
(onload: 11.1min, DOMContentLoaded: 11.0min)
плагин datatables отключен (инициализация datatables jQuery по достоинству оценена):
5476:
21 requests ❘ 255.84KB transferred ❘ 6.57s
(onload: 13.26s, DOMContentLoaded: 13.28s)
45071:
31 requests ❘ 1.84MB transferred ❘ 2.0min
(onload: 2.0min, DOMContentLoaded: 2.0min)
Увеличение времени загрузки, которое создает дататайт, превышает 80% для строк 45 тыс. и почти 40% для строк 5 тыс.
Итак, мне было интересно, знаете ли вы, что у вас есть похожий плагин, который обрабатывает много строк (45000+) быстрее, или я просто пропущу эту точку, пытаясь загрузить все 45000+ записей в один ход?
Любые предложения приветствуются!
Ответы
Ответ 1
Из часто задаваемых вопросов в DataTables (http://datatables.net/faqs#speed):
- Обработка на стороне клиента - данные, полученные из DOM: ~ 5'000 строк. Параметры скорости: bSortClasses
- Обработка на стороне клиента - данные, полученные Ajax: ~ 50 000 рядов. Параметры скорости: bDeferRender
- Обработка на стороне сервера: миллионы строк.
Если вы не используете отложенный рендеринг на данный момент, с вашими 45'000 рядами, я бы, несомненно, это посоветовал. В противном случае для параметров DataTables вам может потребоваться серверная обработка.
Ответ 2
Ответ Аллана хороший; но еще одна вещь, которая упоминает (что значительно влияет на время загрузки) устанавливает bProcessing
и bServerSide
значение true, как показано в приведенном ниже коде:
$(document).ready(function() {
$('#example').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "../examples_support/server_processing.php"
} );
} );
Ref. http://datatables.net/examples/data_sources/server_side.html
Мой код занимал 15 секунд для загрузки, теперь он занимает 1 секунду:)
Ответ 3
Я обнаружил, что плагины браузера также могут замедлить работу DataTable, что было в моем случае. Время загрузки для самой таблицы составляло от 15 секунд до 2 секунд.
Одна из них - панель инструментов Skype, которая автоматически анализирует данные в таблице, если вы не скажете об этом.
Это проблема для огромных таблиц. У многих пользователей есть этот плагин, и он неосознанно замедляет их загрузку больших таблиц.
Есть одно хорошее решение для этого, добавьте это в заголовок. Каждая веб-страница DataTables, которая идет публично, должна содержать следующее:
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />