Пагинация:Серверная сторона или клиентская сторона?

StackOverflow https://stackoverflow.com/questions/407878

Вопрос

Как лучше всего обрабатывать нумерацию страниц?Серверная часть или делать это динамически с использованием JavaScript?

Я работаю над проектом, который сильно использует ajax и динамически извлекает данные, поэтому я работаю над системой нумерации страниц Javascript, которая использует dom, но я начинаю думать, что было бы лучше справиться со всем этим серверная часть.

Что думают все?

Это было полезно?

Решение

Правильный ответ зависит от ваших приоритетов и размера набора данных, подлежащих разбивке на страницы.

Пагинация на стороне сервера лучше всего подходит для:

  • Большой набор данных
  • Ускоренная начальная загрузка страницы
  • Доступность для тех, кто не использует JavaScript.

Пагинация на стороне клиента лучше всего подходит для:

  • Небольшой набор данных
  • Более быстрая последующая загрузка страниц

Поэтому, если вы разбиваете страницы по косметическим причинам, имеет смысл обрабатывать это на стороне клиента.А если вы разбиваете страницы на страницы, чтобы сократить время начальной загрузки, очевидным выбором будет серверная часть.

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

Другие советы

Если вы сделаете это на стороне клиента, ваш пользователь сначала загрузит все данные, которые могут не понадобиться, и лишит вас основного преимущества нумерации страниц.

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

Если у вас большие страницы и большое количество страниц, лучше запрашивать страницы частями с сервера через AJAX.Итак, позвольте серверу выполнить разбиение на страницы на основе URL-адреса вашего запроса.

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

Если страниц всего несколько, лучшим выбором может быть получение их всех заранее и разбиение на страницы на клиенте.

Даже при небольших объемах данных лучшим выбором будет разбивка на страницы на стороне сервера.Вам не придется беспокоиться позже, если ваше веб-приложение будет масштабироваться дальше.

А для больших объемов данных ответ очевиден.

Серверная часть — отправьте клиенту ровно столько контента, сколько необходимо для текущего представления.

В практическом мире ограничений я бы использовал пейджинг на стороне сервера, чтобы сохранить все ресурсы, связанные с отправкой данных.Кроме того, серверу необходимо защитить себя от вредоносного/неисправного клиента, запрашивающего ОГРОМНУЮ страницу.

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

Если клиентское программное обеспечение осуществляет такое кэширование страниц, подумайте, насколько быстро устареют ваши данные (вероятно, изменятся), и следует ли вам проверять, что ваша кэшированная страница данных все еще действительна.Возможно, запросите повторно, если оно устареет более 2 минут.Возможно, там есть «грязный» флаг.Что-то вроде того.Надеюсь, вы найдете это полезным.:)

Вы имеете в виду, что ваш JavaScript хранит все данные в памяти и показывает одну страницу за раз?Или что он загружает каждую страницу с сервера по мере необходимости, используя AJAX?

Если последнее, возможно, вам также придется подумать о сортировке.Если вы сортируете с помощью JavaScript, вы сможете сортировать только одну страницу за раз, что не имеет особого смысла.Поэтому ваша сортировка должна выполняться на сервере.

Я предпочитаю нумерацию страниц на стороне сервера.Однако при его реализации вам необходимо убедиться, что вы правильно оптимизируете свой SQL.Например, я верю в MySQL: если вы используете опцию LIMIT, индекс не используется, поэтому вам нужно переписать свой sql, чтобы правильно использовать индекс.

G-Man

Еще одна вещь, на которую следует обратить внимание, это то, что очень редко вы будете ограничены простым пролистыванием необработанного набора данных.

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

В такой ситуации вам, возможно, придется посмотреть, будет ли лучше использовать эту логику поиска и/или сортировки на стороне клиента или на стороне сервера.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top