The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Разумная пагинация, !*! CHIM, 28-Окт-22, 10:35  [смотреть все]
Доброго времени суток уважаемые форумчане!

Вопрос мой заключается вот в чём. Я довольно давно занимаюсь простенькой разработкой WEB приложений и сайтов на php и всегда пытаюсь что-либо делать по другому и усовершенствовать свой код, сделать его более правильным и функциональным. Сейчас делая очередной проект меня посетила идея об изменении принципа пагинации. Как обычно происходила пагинация в моих проектах?
1. Был обычный запрос в базу данных с количеством записей,  делился на количество записей на странице и формировалось общее количество ссылок на страницы
2. Ссылки с переходом по GET на другие страницы передавали номер страницы для дальнейшего запроса в базу и среза offset, после чего выдавал новый срез данных и формировались страницы.

Всё просто до безобразия.
Но тут мне понадобилось сделать различные фильтры и поиск по всем(или определённым) полям, необходимой информации и динамически выводить это всё в таблицу. С этим проблем не возникло:
1. JS отслеживал ввод в поле поиска, селекты и выбор дат. Проверял все эти параметры в совокупности и отправлял через AJAX к PHP файлу
2. В PHP фале формировалось два запроса, первый был со всеми фильтрами и критериями поиска на количество записей, а второй с теми же критериями поиска, но с offset.

Данные в таблице успешно заполнялись, ссылки формировались, но при поиске или фильтрации я заполнял таблицу через innerHTML и вариантов добавить пагинацию не было, так как заполнялся один только id, а пагинация была в другом id. Соответственно пагинация не обновлялась. Было решено заносить данные для пагинации в сессии, но они срабатывали только после перехода или при перезагрузке страницы. В общем всё это выглядело  довольно-таки коряво. Я задумался, ведь я видел, как на многих сайтах страницы меняют содержимое при пагинации без перезагрузки. Начал копать в этом направлении и понял что в большинстве случаев, осуществляется полная загрузка данных в память, а далее просто js нарезается по странично. Если честно я сомневаюсь в разумности данного подхода, ведь если взять те же смартфоны и скажем таблицу из 1 миллиона строк, то загрузив это всё разом, всё будет ужасно тормозить. Всё-таки это огромный объём данных, который пусть сразу и не выводится на страницу, но хранится в памяти в виде массива данных.
Начал искать другие способы и наткнулся что сейчас многое делается на node.js + vue.js или react.js. Начал смотреть более подробно что за зверь такой этот node.js и везде русским по белому написано что это фактически замена любому серверному языку вроде php, python, perl, ruby и прочим. Тогда у меня появляется разумный(как мне кажется) вопрос, неужели нельзя создать динамическую пагинацию страниц без перезагрузки страницы на php+js без использования node.js? Или задумываясь об отзывчивых динамических интерфейсах уже нет речи о php и теперь нужно переучиваться на node.js?

  • Разумная пагинация, !*! Аноним, 12:38 , 28-Окт-22 (1)
  • Разумная пагинация, !*! abi, 16:13 , 28-Окт-22 (3)
    • Разумная пагинация, !*! CHIM, 10:22 , 31-Окт-22 (4)
      >[оверквотинг удален]
      > Когда я потыкал такой фреймворк ради интереса (quasar) я вообще не
      > увидел там особого программирования на js.
      > А принцип отдельного запроса для получения числа строк вообще не живёт на
      > нагрузке/большом числе записей. Точное число строк так же мало кому нужно,
      > не говоря уже о том, что пока навигируют туда-сюда, список может
      > поменяться.
      > На мой взгляд, правильно запрашивать в базе данные с окном + 1
      > и если вернулось число записей > окна, рисовать ссылку на следующую
      > страницу + разместить на контроле навигации возможность запросить точное число строк,
      > если у кого-то будет такое желание.

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

      • Разумная пагинация, !*! abi, 11:40 , 31-Окт-22 (5)
        • Разумная пагинация, !*! CHIM, 16:12 , 02-Ноя-22 (6)
          >[оверквотинг удален]
          > или затратно - удвоив нагрузку на БД (запрос посчёта количества занимает
          > столько же времени, сколько и запрос строк, минус накладные расходы на
          > отсылку результата, так как в первом случае это число). Я ему
          > говорю, что могу дать только признак, что есть следующая страница +
          > по отдельному запросу дам точное число строк, чёрт с тобой.
          > В результате при навигации пользователь видит не 1.... 100500, а "туда сюда
          > ..." или как там фронт это обыграет. Нажав на ... пользователь
          > увидит точное число страниц, если дождётся, а если ему просто потыкать,
          > то он нажмёт на следующую/предыдущую, не скушав ни ресурсы сервера, ни
          > ресурсы своего компа.

          А стрелки типа "|<" и ">|" Вы никогда не применяете для перехода на первую и последнюю страницу?

  • Разумная пагинация, !*! анонимомус, 17:31 , 02-Ноя-22 (7)
  • Разумная пагинация, !*! wwwebc, 17:07 , 03-Дек-22 (12)
  • Разумная пагинация, !*! Oleg, 20:26 , 04-Дек-22 (15)
  • Разумная пагинация, !*! dcc0, 12:15 , 14-Дек-22 (17)



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру