PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Jetro
Отправлено: 25 Января, 2020 - 02:27:09
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




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

Собственно, есть страница, которая отображает пользователю 100 записей. При нажатии на кнопку "хачу ищо" с помощью Ajax подгружается еще 100 записей, потом еще 100 и еще. Собственно стандартная ситуация. Решается все прости и красиво с помощью:
CODE (text):
скопировать код в буфер обмена
  1. SELECT * FROM table where owner=user_id ORDER BY id DESC LIMIT 100*X, 100

А теперь усложняем задачу - пока открыта страница, и отображено 100*Х записей, может добавиться, допустим, 5 новых записей. Новые записи я подгружаю на страницу с помощью сокетов. Но теперь, если пользователь захочет подгрузить еще 100, и у нас выполнится запрос, который выше, у нас подгрузяться дублирующие записи, ака 5 штук старых, уже загруженных, и 95 новых.
Как правильно решать подобную ситуацию?
У меня по этому поводу только одна мысль - сохранять в переменных JS количество новых записей, которые были подгружены с помощью сокетов, а потом уже делать запрос на 105 записей. В целом работать то оно будет, но что-то меня терзают сомнения об адекватности такого решения.
 
 Top
LIME
Отправлено: 25 Января, 2020 - 12:10:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 10542
Дата рег-ции: Нояб. 2010  


Помог: 313 раз(а)




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


-----
DDD
 
 Top
Jetro
Отправлено: 25 Января, 2020 - 14:11:02
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




По старинке к сожалению не канает, увы. Нужно резать количество выводимых данных. Раньше я как раз и сделал тупо вывод данных при загрузке страницы. Пользователь открыл личный кабинет - все его данные с базы дернулись, обработались и вывелись на странице, а новые через аякс подгружаются. "Вроди все супер, все работает" думал я, пока не появились пользователи, у которых накопилось этак тыщ 10 записей. И все, при загрузке ЛК все скрипит и трещит. А потом появились пользователи, у которых эдак с десяток веток с записями, и в каждой ветке по тех-же 10 тыщ записей. Результат - если сайт все-же прогрузился, и например его загрузку браузер по таймауту не отрубил, то сайт у пользователя из-за простыни текста так тормозит... Вот кстати, по этой причине простой рефреш и не подходит.
Эх... а что такое Ajax знаю прекрасно. Сейчас на сайте большинство манипуляций происходят именно через Ajax. И как результат - переделываю вот. Ajax Подходит для небольшого количества данных, но если количество растет - все, вешайся...
Ajax, кстати, оставил для удаления записей. Тут он подходит идеально - отправил post с id записи, если вернулся ответ 200 - удалил через JS запись у пользователя. В данном случае маловероятно что что-то пойдет не так.
Блочить страницу тож не вариант. В целом главный функционал это вывод новых данных, полученных пользователем или пока открыт ЛК, или пока пользователь отсутствует на сайте. Большинству пользователей старые записи не нужны, но все-же есть те, которые периодически их используют. Вот по этому и приходится извращаться.
Спасибо за информацию, изучу то что советуете, а там уже буду думать дальше.
 
 Top
LIME
Отправлено: 25 Января, 2020 - 14:25:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 10542
Дата рег-ции: Нояб. 2010  


Помог: 313 раз(а)




Jetro ну поздравляю че
велкам таксказать
тут явно надо не делать так как делаешь
в лоб не решать
надо пошурупить серым содержим черепа(замечено присутствие оного факт)
LIME пишет:
начать и кончить

зависит от данных и логики
может не всю портянку грузить
кэш наше всё
решает ситуацию но еще одна точка отказа и надо продумывать отказ сервера итд итп
Jetro пишет:
по тех-же 10 тыщ записей
для практики не есть возможно
никто в здравом мозгу не будет с таким работать
значит на вскидку фильтр данных как простейшее решение
ну а дальше думай башкой
в нее не только пищу толкать да?))
----
отпиши решение потом плз
или подробнее ставь задачу
по моему не очень скромному опыту - решает обсуждение с бизнесом - переиначить задачу для достижения цели
имхо самое то обсудить еще раз цель и сделать шаг назад
рассмотреть проблему а не решение
(Добавление)
ну и раз у тебя реально пошли сложные задачи - гуглить: cap теорема
чисто для развития
щас не вкуришь - просто знай что есть оное
боюсь придется тебе это познать раз есть такая сложноя задача
и еще знай что твоя проблема сложнее чем ты сейчас думаешь
а именно на вскидку думай что каждый раз на асинхронный запрос может прийти что угодно или вооще таймаут
(Добавление)
вот для развития https://habr[dot]com/ru/company/tinkoff/blog/483756/
в общих чертах
(Добавление)
не поленись прочти


-----
DDD
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB