(на стороне клиента или на стороне сервера) для разбивки на страницы и сортировки столбцов?

У меня есть 3000 записей в таблице сотрудников, которые я выбрал из своей базы данных с одним запросом. Я могу показать 20 записей на странице. Таким образом, на каждой странице будет отображаться 20 страниц. У меня есть два вопроса о разбиении на страницы и сортировке столбцов:

1) Если я реализую простую разбивку на страницы без сортируемых столбцов, должен ли я отправить все 3000 записей клиенту и сделать клиентскую часть страницы с помощью javascript или jquery. Поэтому, если пользователь нажимает вторую страницу, вызов не будет идти на сервер, и он будет быстрее. Хотя я не уверен, что повлияет на отправку 3000 или более записей на стороне браузера/клиента? Итак, каков наилучший подход - либо отправлять все записи клиенту в один проход, либо выполнять сортировку там или по щелчку страницы, отправлять вызов на сервер, а затем просто возвращать результаты этой конкретной страницы?

2) В этом случае мне нужно предоставить разбиение на страницы вместе с сортируемыми столбцами (6 столбцов). Таким образом, пользователь может щелкнуть любой столбец, как имя сотрудника или название отдела, а затем имена должны быть упорядочены в порядке возрастания или убывания. Снова я хочу узнать лучший подход с точки зрения ответа времени/памяти?

Ответ 1

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

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

Ответ 2

Я предполагаю, что у вас есть класс bean, представляющий записи в этой таблице, с экземплярами, загруженными из любого ORM, который у вас есть.

Если вы еще этого не сделали, вы должны реализовать кэширование этих beans в своем приложении. Это можно сделать локально, возможно, используя Guava CacheBuilder или удаленно используя вызовы Memcached (последнее необходимо для нескольких серверов приложений/балансировки нагрузки). Кэш для этих beans должен быть привязан к уникальному идентификатору, скорее всего, сопоставление с столбцом первичного ключа соответствующей таблицы.

Переход к разбивке на страницы: просто напишите свои запросы, чтобы возвращать только идентификаторы выбранных записей. Включите LIMIT и OFFSET или ваш язык DB, эквивалентный paginate. Вызывающий запрос может также фильтровать/сортировать по желанию с помощью WHERE, ORDER BY и т.д.

Вернитесь на уровень Java, повторите полученные идентификаторы этих запросов и создайте List beans, вызвав кеш. Если кеш пропустит, он вызовет ваш ORM для индивидуального запроса и загрузки этого bean. После создания List его можно обрабатывать/сериализовать и отправлять в пользовательский интерфейс.

Ответ 3

Я знаю, что это напрямую не отвечает на разбивку страницы на стороне клиента и на стороне сервера, но я бы рекомендовал использовать DataTables.net для отображения и разбивки ваших данных. Он обеспечивает очень хороший дисплей, позволяет сортировать и разбивать на страницы, встроенные функции поиска и многое другое. В первый раз я использовал его для первого веб-проекта, над которым я работал, и я, как полный нуоби, смог заставить его работать. Форум также предоставляет очень хорошую информацию/помощь, и создатель ответит на ваши вопросы. Таблицы данных могут использоваться как на стороне клиента, так и на стороне сервера и могут поддерживать тысячи строк. Что касается скорости, у меня было всего несколько сотен строк, но я использовал обработку на стороне клиента и никогда не замечал задержки.

Ответ 4

ИСПОЛЬЗУЙТЕ ПОСТАВКУ СЕРВЕРА!

Конечно, вы могли бы уйти с отправкой массива JSON из 3000 элементов и с помощью JavaScript на страницу/сортировку на клиенте. Но хороший веб-программист должен знать, как записывать и сортировать записи на сервере. (Они должны действительно знать пару способов). Итак, подумайте об этом как о хорошей практике:)

Если вам нужен гладкий пользовательский интерфейс, подумайте об использовании компонента сетки JavaScript, который использует AJAX для извлечения данных. Как правило, эти компоненты передают следующие параметры (или их вариант):

  • Начать индекс записи
  • Количество записей для возврата
  • Сортировка столбца
  • Направление сортировки
  • Столбцы для извлечения (иногда)

Разработчик должен реализовать обработчик или интерфейс, который возвращает набор результатов на основе этих входных параметров.