Разумная пагинация, 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)
- Разумная пагинация, CHIM, 13:59 , 28-Окт-22 (2)
> Возьмите фреймворк, где уже реализована пагинация, и не мучайтесь. Ларавел вам отлично > подойдет.Весь функционал у меня уже реализован, неужели мне ради пагинации придётся весь проект переписывать на Ларавел?
- Разумная пагинация, 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)
|