Подтвердить что ты не робот

Плагин 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+ записей в один ход?

Любые предложения приветствуются!

4b9b3361

Ответ 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" />