СЕЙЧАС +23°С

Сергей Мастеров

Сергей Мастеров

Поведенческие особенности рейтинга комментариев на «Чита.Ру»

В последнее время поступило несколько жалоб от посетителей портала на то, что после рейтингования комментариев на Читинском городском портале «-») происходят непонятные вещи. Например, нажали на «+», когда на счетчике было «+3», после чего стало «-1».

В последнее время поступило несколько жалоб от посетителей портала на то, что после рейтингования комментариев на Читинском городском портале (когда пользователь кликает на «+» или «-») происходят непонятные вещи. Например, нажали на «+», когда на счетчике было «+3», после чего стало «-1».

Попытаюсь объяснить, почему такое происходит, и что мы предприняли, чтобы эту ситуацию скорректировать.

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

Кэширование - это важный момент для дальнейшего понимания происходящего.

Теперь к сути жалоб. Давайте рассмотрим на примере.

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

Итак, в момент Т у нас сформировалась страница с новостью, на одном из комментариев которой стоит рейтинг «+3».

Пользователь А в момент времени (T+1 минута) нажимает на кнопку «-».

В этот момент происходит следующее:

1. Браузер пользователя отдаёт запрос серверу на уменьшение рейтинга комментария и одновременный запрос на получение его нового значения.

2. Сервер смотрит в базе данных реальный рейтинг комментария (он у нас +3), уменьшает его, возвращает браузеру «+2»

3. Браузер новый результат меняет на экране компьютера.

Очень важно понимать, что после этого закэшированная страница осталась в том самом виде, где напротив комментария стоит рейтинг +3, при этом в базе данных уже +2.

Пользователь B в момент времени (T+2 минуты) просматривает страницу (видит рейтинг +3) нажимает на кнопку «-», ожидает получить результат (+2).

В этот момент происходит следующее:

1. Браузер пользователя отдаёт запрос серверу на уменьшение рейтинга комментария и одновременный запрос на получение его нового значения.

2. Сервер смотрит в базе данных реальный рейтинг комментария (он уже +2), уменьшает его, возвращает браузеру «+1».

3. Браузер новый результат меняет на экране компьютера.

Пользователь думает: “Странно, хотел уменьшить рейтинг на единицу, а он уменьшился на 2, ну и бог с ним, уменьшился и ладно”. Никакой паники.

Пользователь С в момент времени (T+3 минуты) просматривает страницу (видит рейтинг +3) нажимает на кнопку «+», ожидает получить результат (+4).

В этот момент происходит следующее:

1. Браузер пользователя отдаёт запрос серверу на увеличение рейтинга комментария и одновременный запрос на получение его нового значения.

2. Сервер смотрит в базе данных реальный рейтинг комментария (он уже +1), увеличивает его, возвращает браузеру «+2».

3. Браузер новый результат меняет на экране компьютера.

И вот тут пользователь страшно негодует. Было +3, нажал на +, а стало +2. Вместо увеличения он уменьшился! В “Чита.Ру” работают жулики и подлецы!

А теперь представьте, что новость одновременно читает не три пользователя A, B и С, а сотни человек. Такое на Читинском городском портале происходит постоянно.

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

Решено было одновременно с рейтингом показывать количество проголосовавших и время формирования результата. Пользователяю C в нашем примере будет видно, что после его нажатия изменилось не только значение рейтинга, но и количество проголосовавших увеличилось не на единицу (его самого), а на три. Значит было ещё два человека, которые повлияли на результат.

Количество проголосовавших также ещё интересно в тех случаях, где вроде рейтинг небольшой, например около 0, а проголосовавших 40 человек. Это означает, что голоса разделились поровну и равнодушных по этому мнению нет.

Такая интересная особенность реализовалась благодаря нашим бдительным читателям.

За что им огромное спасибо.

Мнение автора может не совпадать с мнением редакции

Станьте автором колонки.

Почитайте рекомендации и напишите нам!

  • ЛАЙК0
  • СМЕХ0
  • УДИВЛЕНИЕ0
  • ГНЕВ0
  • ПЕЧАЛЬ0
Увидели опечатку? Выделите фрагмент и нажмите Ctrl+Enter