рендеринг больших наборов данных на стороне сервера в таблицах данных jquery

Я использую DataTables 1.9.4 с несколькими плагинами (ColVis, ColReorderWithResize и ColumnFiltering). Параметры, которые я использую для связи на стороне сервера:

  • "bServerSide"
  • "фнсервердата"
  • "sAjaxSource"

Теперь предположим, что мне нужно отобразить 3000 строк с примерно 25 столбцами без нумерации страниц ("iDisplayLength": -1). JSON, содержащий данные, весит около 1 МБ, и серверу требуется около секунды, чтобы отправить его в таблицы данных.

Проблема в том, что рендеринг этих 3000 строк занимает несколько секунд (около 5-10, что неприемлемо). В IE это может занять гораздо больше времени, что приведет к ошибкам «Сценарий не отвечает».

Я хотел бы как-то ускорить этот процесс, т. е. показать, скажем, 100 строк, а остальные отобразить в фоновом режиме. Есть ли способ лучше? Я знаю, что есть подключаемый модуль прокрутки — Scroller, но мне нужны все доступные данные для поиска, поэтому прокрутка не вариант.


person Marcin    schedule 15.07.2014    source источник
comment
Поиск Datatables будет сканировать весь набор данных, даже если вы используете разбиение на страницы.   -  person pmandell    schedule 15.07.2014
comment
Подумайте над следующей идеей: создайте таблицу с использованием чистого jquery, показывающую 50 результатов. Затем добавьте кнопку «Показать больше результатов». Каждый раз, когда пользователь нажимает на эту кнопку, вы загружаете еще 50 строк из базы данных и добавляете их в уже существующую таблицу.   -  person EduardoFernandes    schedule 15.07.2014
comment
Мне нужно, чтобы все строки отображались для поиска в браузере (Ctrl+F), и поэтому я хочу отображать таблицу в фоновом режиме. Это не должно занять слишком много времени, и я мог бы отобразить какое-то сообщение о том, что таблица визуализируется.   -  person Marcin    schedule 16.07.2014
comment
Не лучше ли было бы ввести поиск и кнопку? это имеет больше смысла, не так ли?   -  person EduardoFernandes    schedule 16.07.2014


Ответы (1)


к сожалению, таблицы данных не предназначены для больших наборов данных. Обойти это можно с помощью обработки на стороне сервера. Это означает, что вам нужно реализовать возвращаемые данные на основе индекса страницы.

вот примеры:
http://datatables.net/forums/discussion/2651/alternative-server-side-php-script http://www.datatables.net/examples/server_side/server_side.html

person user1784014    schedule 15.07.2014
comment
Я реализовал внутреннюю логику для обработки данных на стороне сервера, гораздо более сложную, чем та, которую вы предоставили. Я также не могу использовать разбиение на страницы (в одной конкретной таблице), потому что мне нужно, чтобы все записи отображались в начале. - person Marcin; 16.07.2014
comment
пожалуйста, уточните, что вы имели в виду, когда сказали, что не можете использовать разбивку на страницы. Кроме того, если вы собираетесь отправить все записи (при условии, что 1000) в таблицу данных, для обработки данных потребуется некоторое время. ЕДИНСТВЕННЫЙ способ обойти это - отправить небольшую часть данных за раз с помощью разбивки на страницы на стороне сервера. - person user1784014; 16.07.2014