Ответы пользователя по тегу PHP
  • Как лучше всего передавать и хранить, просмотры и лайки на PHP?

    @IgorAlentyev
    Добрый день! Попробую предложить решение, как бы я сделал.
    Во первых, я бы не писал на чистом PHP, а использовал бы фреймворк, тот же Laravel, там есть функционал который вам нужен, и он поможет грамотно организовать всё и удобно работать с кешем. Но если хочется без фреймворков и у вас не планируется прям highload, то я бы делал как то так:
    Для хранения лайков вам в принципе написали вариант, для новых постов храните в редисе/мемкеше, да где угодно, можно и прямо в базе, если у вас не будет огромной посещаемости, то и проблем не будет.

    Что касается организации таблиц - как вариант, вот у вас есть пользователь, у него есть ID. Создаете таблицу, в неё user_id, liked_post_id. Это, если вам например нужно будет отдельно выводить лайкнутые посты конкретного юзера, ну и это поможет, если вам нужно отображать в ленте уже лайкнутые посты. (Главное не говнокодить, то есть не нужно на каждый пост в цикле делать отдельный запрос в БД. Получите сначала все лайкнутые посты пользователеля в массив, и при выводе в цикле постов, через array_search просто ищите нужный пост)

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

    По поводу просмотров - логика примерно такая же, если вам нужно считать просмотры только с "детальной страницы поста", то при заходе на страницу поста увеличиваете значение views_count в БД у этого поста.
    Если вам нужно отлавливать просмотры в списке, то есть JS библиотека, которая это умеет, скорее всего даже не одна, к сожалению я не помню как называется, но можно посерчить так - "js div в области видимости". Соответственно когда сработает событие JS библиотеки, делаете ajax на пхп файл, в который передаете ID поста, ну а дальше всё как выше написал.

    Что касается производительности - не слушайте новичков, если у вас НЕ лютый highload, то всё у вас будет летать. MySql - очень быстрая БД, и несколько легких запросов не будут проблемой.

    В ленте выводите не все посты сразу, используйте LIMIT offset, и выводите через постраничку или бесконечный скролл, что в принципе одно и то же, только в случае с бесконечным скроллом, вы ajax-ом подгружаете данные и вставляете в DOM.

    Если у вас большое количество данных и будут тормоза, то есть куча статей с решениями таких проблем.
    Одна из них - https://habr.com/ru/post/217521/

    В любом случае, удачи и успеха!
    Ответ написан
    Комментировать