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

Что лучше всего использовать для разбивки на страницы? На стороне сервера или делать это динамически с помощью javascript?

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

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


person jrutter    schedule 02.01.2009    source источник


Ответы (9)


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

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

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

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

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

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

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

person Cory House    schedule 02.01.2009
comment
Что такое данные малого размера - вопрос сейчас - person Pushpendra; 11.07.2018
comment
@Pushpendra Достаточно маленький, чтобы вы могли практически все это отправить пользователю и ожидать, что его браузер сможет фильтровать и сортировать данные по мере необходимости. Поэтому тестирование ваших целевых платформ важно. - person Cory House; 12.07.2018
comment
Я бы добавил, что если ожидается, что пользователь будет смотреть на первую страницу, а затем двигаться дальше (как в случае использования результата поиска), то разбиение на страницы на стороне сервера будет менее ресурсоемким. - person Aheho; 26.02.2021

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

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

person mmx    schedule 02.01.2009
comment
Если время загрузки имеет значение, было бы неплохо предварительно загружать следующую страницу всякий раз, когда она загружается. Это приведет к нулевому времени загрузки, если кто-то не перейдет на две страницы очень быстро. - person ThiefMaster; 02.12.2010

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

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

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

person Diodeus - James MacFarlane    schedule 02.01.2009

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

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

person user50705    schedule 02.01.2009

На стороне сервера - отправьте клиенту контент, достаточный для текущего просмотра.

person Otávio Décio    schedule 02.01.2009

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

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

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

person Sam    schedule 02.01.2009

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

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

person JW.    schedule 02.01.2009

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

G-Man

person GeoffreyF67    schedule 02.01.2009

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

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

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

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

person usr28765526    schedule 02.03.2019