Пагинация уменьшает нагрузку на сервер? (Теория)


11

Мне было интересно, что является причиной пагинации? Используется ли он потому, что уменьшает нагрузку на серверы, поскольку мы технически ограничиваем количество строк, возвращаемых на страницу?

Я хотел сделать что-то без нумерации страниц, но, учитывая, что я новичок в этом (я любитель), начал задаваться вопросом, нормально ли это технически или нет.


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

3
нумерация страниц больше для людей, чем DB.
Малфист

Ответы:


10

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

Другие причины включают в себя:

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

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


2
+1 Я писал что-то похожее, но ты был слишком быстр. Позвольте мне просто добавить, что постраничный контент также (ab) используется как способ показать больше добавлений.
Яннис

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

3

Это зависит от реализации.

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


Большинство наивных алгоритмов разбиения на страницы должны сначала выполнить запрос, чтобы решить, сколько страниц должно быть : Но накопленная нагрузка на БД запроса количества и запроса результата с разбивкой по страницам почти всегда намного меньше, чем запрос получения всего в обычном сценарии. (с хорошо структурированной реляционной базой данных)
Яннис

@YannisRizos, абсолютно. Я только что видел темную сторону этого, с невероятно плохо структурированной реляционной базой данных (многие наши запросы объединяют 7 или 8 разных таблиц, чтобы получить результат).
Стив Хилл

@YannisRizos: определить «стресс на БД». Вы по-прежнему толкаете два запроса через линию. Вы разбиваете на страницы в запросе (супер-выбор количества строк) или кэшируете результаты на другом уровне? Есть слишком много переменных, чтобы сказать, что слишком много стресса от БД. Я бы сказал, что правильно выполненное в транзакционном смысле (допускаете ли вы грязное чтение / непоследовательное количество страниц?), Увеличивает «нагрузку» / нагрузку, но упрощает программирование.
Jé Queue

@Xepoch Я не сказал слишком много стресса, просто что любой счет плюс ограниченный выбор <полный выбор. И это только для распространенных сценариев на хорошо структурированных реляционных БД.
Яннис

1

Самое ценное, что вы получаете от нумерации страниц, - это повышение скорости вашего приложения за счет:

1 - Ограничение данных, передаваемых между клиентом и сервером. Нет смысла читать 1000000 клиентов, если пользователь ищет 10 из них.

2- Значительно ускорить выполнение запроса, получая только те строки, которые могут уместиться в представлении пользователя. Нет смысла читать 1000000 клиентов, если пользователь будет смотреть на первых 10 клиентов.

3 - Пагинация помогает, предоставляя более свежие данные. Если ваше приложение отображает много строк данных, а домен приложения требует большого количества обновлений строк данных в отображаемой таблице, есть вероятность, что к тому времени, когда вы перейдете на страницу 20 списка страниц, данные некоторых строк будут изменилось. Подумайте о приложении, которое читает цены на акции или свободные номера в отеле. Извлечение старых данных и размещение их на клиенте бесполезно.

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

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


-4

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

Если после выпуска вы обнаружите, что загружаете слишком много данных за один вызов, или что вашим пользователям приходится ждать информацию, которую они хотят, потому что она загружает данные, которые им не нужны, продолжайте и напишите решение Ajax который загружает страницу только при прокрутке вниз (см. Twitter, Tumblr, поиск картинок Google).

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

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

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


5
Я категорически не согласен с этим утверждением, что разбиение на страницы не для оптимизации БД, а для предоставления данных управляемыми кусками людям. Вы могли бы прочитать Гарри Поттера, если бы все это было на одной странице? Смогли бы вы подать налоги, если бы Налоговый кодекс был размещен на одной странице?
Малфист

@Malfist: Единственная причина, по которой вы не можете справиться с этими вещами на одной странице, заключается в том, что сама страница будет слишком большой. Это не проблема на веб-страницах. Следовательно, сайты, которые я цитировал, нашли лучшие решения для нумерации страниц, в то время как Lolcats в настоящее время насчитывает около 2000 страниц, которые невозможно разбить на страницы любым разумным способом. Но это твой отрицательный голос, используй его как хочешь.
фунтовые

1
@Malfist: Кроме того, разделение вещей на управляемые куски достаточно справедливо, если эти куски не сдвигаются. Если я читаю страницы 1-4, то я хочу вернуться в следующий раз и прочитать страницу 5. Но во многих случаях веб-сайты с нумерацией страниц представляют собой списки элементов, самые последние из которых появляются первыми. Поэтому, когда я вернусь к странице 5 позже, она фактически показывает половину страницы 3 и половину страницы 4, когда я был там в последний раз, потому что в списке есть целых 1,5 новых страницы.
фунтовые

2
-1 Как и я с этим категорически не согласен. Я даже не уверен, с чего начать объяснять почему.
Крейг,

@Craige: Хорошо, тогда хорошо. Я, конечно, не могу привести много аргументов в пользу этого.
фунтовые
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.