Что произошло с момента публикации демонстрационной версии сайта (показывать особо нечего, потому стена текста):
1. Отловил несколько косяков. Часть из них решил и залил на сайт, часть решил, но не залил (например вы не можете посмотреть вопросы, ответы, комменты того, чьё имя пользователя состоит только из цифр), а часть просто отметил для себя (буду решать в будущем).
2. Запилил рекламу. Сервер разработки (та часть, которая фронт) крутится на нестандартном порту, видимо это не нравится Яндексу и реклама на сервере разработки просто не работает (в отличие от сервера разработки текущей версии - она крутится на стандартном порту, и там проблем с отображением рекламы никогда не было). Это в общем то не проблема - при желании мог бы поменять порты, но просто как данность.
Развернув демонстрационный сервер я смог прикрутить к нему рекламу и выработал примерную концепцию, по которой она будет показываться (чтоб быть эффективной и при этом не бесить людей, как сейчас).
Идея в том, что реклама встраивается в прокрутку. Вы прокручиваете комменты к своему ответу (например), и каждый 10-й коммент видите рекламный блок. При этом у вас на экране не более 1 крупного рекламного блока находится.
Ещё я поэкспериментировал с маленьким блоком непосредственно под вопросом, но то, что есть в текущий момент меня не устраивает (особенно на мобильнике). Тут ещё ковырять нужно.
Итого - маленький блок под вопросом (возможно только под случайным вопросом), большой блок после первого ответа (или коммента), далее большой блок после каждого 10-го коммента. В блогах аналогично, только после 5-го поста.
3. Прикрутил текущие уведомления к блогу (это уже на сервере разработки, в демонстрационной версии этого нет). Правда не до конца. Уведомления о новых постах в блогах (на которые вы подписаны) пока не снимаются.
Как вы возможно заметили, я хочу блоги превратить в некое подобие ленты (типа как Реддит или Пикабу). Есть некий поток постов, который вы прокручиваете. Если пост длинный - часть его скрывается, если вы хотите его прочитать целиком - нажимаете на "показать ещё" и читаете. Если хотите почитать или оставить комментарий - проваливаетесь в пост. Собственно этот момент там уже реализован - кто этого не заметил - сходите, посмотрите :) https://2.0.otvechai.com/blog/best
Чего не реализовано, так это отметки о просмотрах. Когда вы проваливаетесь в пост, там отметка о вашем просмотре ставится (+1 к количеству просмотров, плюс отметка о том, что вы уже этот пост посмотрели). но когда вы листаете ленту - ваши просмотры также должны отмечаться. Прошёл пост через ваш экран - посту отметка должна ставиться. Ну и если у вас есть уведомление об этом посте - оно также должно сниматься.
Если вы зашли в популярные посты, прокрутили несколько постов, ушли оттуда, потом вернулись - вы не должны видеть в ленте посты, которые уже просмотрели. То есть можете продолжить читать ленту (ну и должна быть кнопка "показать/скрыть просмотренные посты").
Уведомления о новых постах (в блогах, на которые вы подписаны) также должны быть лентой (оно уже есть, просто на демонстрационной версии не доступно, так как вы не можете в неё залогиниться).
4. Самое интересное (ага, представляю, как вам интересно 😁) -довелось мне как-то с админом спрашки пообщаться. Рассказал ему про свою задумку (имею в виду архитектуру новой версии - SPA - Single Page Application), спросил, почему у него новая версия сайта не SPA (он назвал некоторые проблемы этой архитектуры, но меня они на данный момент не сильно пугают). Он в свою очередь посоветовал мне использовать вебсокеты.
Сейчас, когда вы открываете окно с сайтом - сайт каждые 10 секунд спрашивает у сервера, нет ли для вас новых уведомлений. Сервер проверяет и отвечает. Если уведомлений нет - он всё равно проверит и ответит. И так для каждого пользователя на сайте (а ведь некоторые пользователи ещё и несколько окон открывают с сайтом - и такое для каждого окна происходит). Использование кэша ситуацию облегчает - серверу не нужно каждый раз дергать базу (в большинстве случаев объект берётся из кэша), но всё равно, это лишняя нагрузка на сервер. А когда вы в личку заходите, помимо этого ваше окно начинает каждые 2 секунды слать запрос на проверку новых личных сообщений от пользователя, в диалог с которым вы зашли (и тут уже без кэшей).
В случае с вебсокетами ваш браузер устанавливает соединение с сервером и держит его. Далее происходят события и реакции на них. В какой-то момент вы что-то серверу можете послать, а в какой-то сервер вам. То есть пришло новое уведомление - сервер вам его тут же прислал. Во первых - сокращается лаг между приходом уведомления и его доставкой до вас, во вторых - сокращается количество бесполезных запросов на сервер. С личкой аналогично.
Часть с уведомлениями я уже даже умудрился реализовать (на уровне "ну вроде работает" :) ). Также начал делать личку, но пока застрял на этапе вёрстки (это мне труднее всего даётся).
Ну и онлайн. Сейчас после каждого вашего действия (в том числе запроса уведомлений) в базу записывается время, когда эта активность была совершена. Именно по этому времени и определяется, онлайн вы или нет.
Момент постоянной записи в базу меня уже давно сильно напрягает. На новой версии уже даже реализовывал перенос этого дела в Redis. Очень криво в итоге получилось. Думал надо будет переделывать, и потом внедрять ту же систему на текущую версию (чтоб совместимость была), но с вебсокетами концепция поменялась. Когда вы соединяетесь с вебсокетом, в базу записывается время вашей активность, в Redis вы добавляетесь в список онлайн пользователей (если вас там ещё нет). Также у вас есть личный счётчик, который увеличивается на 1. Этот счетчик показывает количество окон, которое у вас открыто в данный момент (количество окон с сайтом в браузере или на разных девайсах - на компе и мобильнике, например). При закрытии соединения с сокетом проверяется этот самый счетчик. Если он 1 - значит это последнее ваше окно, счетчик обнуляется, вы удаляетесь из списка онлайн, у вас обновляется время последней активности.
Такая схема даст сбой, если сервер был некорректно завершён (упал). Чтоб такого не было - при старте сервер проверит и обнулит список онлайн, обнулит у тех пользователей счетчики, обновит их время последней активности (до старта сервер не был онлайн, следовательно и пользователей онлайн быть не должно).
Такую систему не получится реализовать на текущем сайте, но оно и не нужно. Просто текущий сайт помимо базы будет читать список из Redis, а новый - данные из базы. Потом оба списка будут объединяться и получаться общий список тех, кто онлайн (зато будет видно, кто где сидит :) ). Когда новый сайт станет основным, а текущей перестанет существовать - этот атавизм из него будет удалён.
5. Ну и последнее - переделал "прочие уведомления" (колокольчик) на текущем сайте. Нужно ещё потестировать, и возможно к концу следующей недели выкачу обновление. А после того, как оно "приработается" (будут найдены и устранены возможные косяки) я перенесу его в новую версию. Короче ещё один шаг на пути полной совместимости старой и новой версии (с базой).
Про уведомления будет отдельная статья, как только я с ними полностью закончу (остаются ещё уведомления об ответах и комментах).
Вроде на этом всё. Те, кто до сюда дочитал и не уснул - Вы лучшие 😁
1. Отловил несколько косяков. Часть из них решил и залил на сайт, часть решил, но не залил (например вы не можете посмотреть вопросы, ответы, комменты того, чьё имя пользователя состоит только из цифр), а часть просто отметил для себя (буду решать в будущем).
2. Запилил рекламу. Сервер разработки (та часть, которая фронт) крутится на нестандартном порту, видимо это не нравится Яндексу и реклама на сервере разработки просто не работает (в отличие от сервера разработки текущей версии - она крутится на стандартном порту, и там проблем с отображением рекламы никогда не было). Это в общем то не проблема - при желании мог бы поменять порты, но просто как данность.
Развернув демонстрационный сервер я смог прикрутить к нему рекламу и выработал примерную концепцию, по которой она будет показываться (чтоб быть эффективной и при этом не бесить людей, как сейчас).
Идея в том, что реклама встраивается в прокрутку. Вы прокручиваете комменты к своему ответу (например), и каждый 10-й коммент видите рекламный блок. При этом у вас на экране не более 1 крупного рекламного блока находится.
Ещё я поэкспериментировал с маленьким блоком непосредственно под вопросом, но то, что есть в текущий момент меня не устраивает (особенно на мобильнике). Тут ещё ковырять нужно.
Итого - маленький блок под вопросом (возможно только под случайным вопросом), большой блок после первого ответа (или коммента), далее большой блок после каждого 10-го коммента. В блогах аналогично, только после 5-го поста.
3. Прикрутил текущие уведомления к блогу (это уже на сервере разработки, в демонстрационной версии этого нет). Правда не до конца. Уведомления о новых постах в блогах (на которые вы подписаны) пока не снимаются.
Как вы возможно заметили, я хочу блоги превратить в некое подобие ленты (типа как Реддит или Пикабу). Есть некий поток постов, который вы прокручиваете. Если пост длинный - часть его скрывается, если вы хотите его прочитать целиком - нажимаете на "показать ещё" и читаете. Если хотите почитать или оставить комментарий - проваливаетесь в пост. Собственно этот момент там уже реализован - кто этого не заметил - сходите, посмотрите :) https://2.0.otvechai.com/blog/best
Чего не реализовано, так это отметки о просмотрах. Когда вы проваливаетесь в пост, там отметка о вашем просмотре ставится (+1 к количеству просмотров, плюс отметка о том, что вы уже этот пост посмотрели). но когда вы листаете ленту - ваши просмотры также должны отмечаться. Прошёл пост через ваш экран - посту отметка должна ставиться. Ну и если у вас есть уведомление об этом посте - оно также должно сниматься.
Если вы зашли в популярные посты, прокрутили несколько постов, ушли оттуда, потом вернулись - вы не должны видеть в ленте посты, которые уже просмотрели. То есть можете продолжить читать ленту (ну и должна быть кнопка "показать/скрыть просмотренные посты").
Уведомления о новых постах (в блогах, на которые вы подписаны) также должны быть лентой (оно уже есть, просто на демонстрационной версии не доступно, так как вы не можете в неё залогиниться).
4. Самое интересное (ага, представляю, как вам интересно 😁) -довелось мне как-то с админом спрашки пообщаться. Рассказал ему про свою задумку (имею в виду архитектуру новой версии - SPA - Single Page Application), спросил, почему у него новая версия сайта не SPA (он назвал некоторые проблемы этой архитектуры, но меня они на данный момент не сильно пугают). Он в свою очередь посоветовал мне использовать вебсокеты.
Сейчас, когда вы открываете окно с сайтом - сайт каждые 10 секунд спрашивает у сервера, нет ли для вас новых уведомлений. Сервер проверяет и отвечает. Если уведомлений нет - он всё равно проверит и ответит. И так для каждого пользователя на сайте (а ведь некоторые пользователи ещё и несколько окон открывают с сайтом - и такое для каждого окна происходит). Использование кэша ситуацию облегчает - серверу не нужно каждый раз дергать базу (в большинстве случаев объект берётся из кэша), но всё равно, это лишняя нагрузка на сервер. А когда вы в личку заходите, помимо этого ваше окно начинает каждые 2 секунды слать запрос на проверку новых личных сообщений от пользователя, в диалог с которым вы зашли (и тут уже без кэшей).
В случае с вебсокетами ваш браузер устанавливает соединение с сервером и держит его. Далее происходят события и реакции на них. В какой-то момент вы что-то серверу можете послать, а в какой-то сервер вам. То есть пришло новое уведомление - сервер вам его тут же прислал. Во первых - сокращается лаг между приходом уведомления и его доставкой до вас, во вторых - сокращается количество бесполезных запросов на сервер. С личкой аналогично.
Часть с уведомлениями я уже даже умудрился реализовать (на уровне "ну вроде работает" :) ). Также начал делать личку, но пока застрял на этапе вёрстки (это мне труднее всего даётся).
Ну и онлайн. Сейчас после каждого вашего действия (в том числе запроса уведомлений) в базу записывается время, когда эта активность была совершена. Именно по этому времени и определяется, онлайн вы или нет.
Момент постоянной записи в базу меня уже давно сильно напрягает. На новой версии уже даже реализовывал перенос этого дела в Redis. Очень криво в итоге получилось. Думал надо будет переделывать, и потом внедрять ту же систему на текущую версию (чтоб совместимость была), но с вебсокетами концепция поменялась. Когда вы соединяетесь с вебсокетом, в базу записывается время вашей активность, в Redis вы добавляетесь в список онлайн пользователей (если вас там ещё нет). Также у вас есть личный счётчик, который увеличивается на 1. Этот счетчик показывает количество окон, которое у вас открыто в данный момент (количество окон с сайтом в браузере или на разных девайсах - на компе и мобильнике, например). При закрытии соединения с сокетом проверяется этот самый счетчик. Если он 1 - значит это последнее ваше окно, счетчик обнуляется, вы удаляетесь из списка онлайн, у вас обновляется время последней активности.
Такая схема даст сбой, если сервер был некорректно завершён (упал). Чтоб такого не было - при старте сервер проверит и обнулит список онлайн, обнулит у тех пользователей счетчики, обновит их время последней активности (до старта сервер не был онлайн, следовательно и пользователей онлайн быть не должно).
Такую систему не получится реализовать на текущем сайте, но оно и не нужно. Просто текущий сайт помимо базы будет читать список из Redis, а новый - данные из базы. Потом оба списка будут объединяться и получаться общий список тех, кто онлайн (зато будет видно, кто где сидит :) ). Когда новый сайт станет основным, а текущей перестанет существовать - этот атавизм из него будет удалён.
5. Ну и последнее - переделал "прочие уведомления" (колокольчик) на текущем сайте. Нужно ещё потестировать, и возможно к концу следующей недели выкачу обновление. А после того, как оно "приработается" (будут найдены и устранены возможные косяки) я перенесу его в новую версию. Короче ещё один шаг на пути полной совместимости старой и новой версии (с базой).
Про уведомления будет отдельная статья, как только я с ними полностью закончу (остаются ещё уведомления об ответах и комментах).
Вроде на этом всё. Те, кто до сюда дочитал и не уснул - Вы лучшие 😁