Как бы вы внедрили функцию «последнего просмотра» для пользователей? - PullRequest
6 голосов
/ 22 января 2009

При переполнении стека на странице профиля отображается свойство «последний раз видели». Похоже, что это не обновляется при каждом просмотре страницы (очевидно, по причинам производительности). Как бы вы реализовали это в веб-приложении с большим трафиком? Вы бы обновили его только на определенных страницах? Или кэшировать последний раз, когда вы регистрировали последний визит пользователя, и подождать определенное время перед обновлением базы данных? Или что-то совершенно другое?

Ответы [ 4 ]

6 голосов
/ 22 января 2009

На сайте с большим трафиком, таком как переполнение стека, я бы обновлял переменную "последний раз видел" только тогда, когда пользователь делает что-то. Скрываясь и читая вопросы и ответы, не следует считать пользователя "увиденным" системой. Задавать вопросы и отвечать на них или голосовать по ним должны быть действия, которые обновляются при последнем посещении пользователя.

Я не буду говорить о деталях реализации, потому что это уже покрыто другими ответами (и я, вероятно, пойму это неправильно).

3 голосов
/ 22 января 2009

Я бы использовал сессию. И только установить это первое посещение сессии. Также сбрасывайте его каждый час или около того, если люди оставляют браузер открытым. В php как то так:

if(!isset(!_SESSION['lastSeen'])){
 $_SESSION['lastSeen'] = time();
 updateLastSeenInDatabaseOrSomething();
}
else{
 if($_SESSION['lastSeen'] < time() + 2 * 60 * 60){ //2 hours
  $_SESSION['lastSeen'] = time();
  updateLastSeenInDatabaseOrSomething();   
 }
}

Что-то в этом роде, но потом с ОО и без повторения одного и того же.

3 голосов
/ 22 января 2009

Вы, вероятно, найдете «Какую стратегию вы бы использовали для отслеживания недавних действий пользователей?» , чтобы быть полезным. Проблемы похожи.

0 голосов
/ 22 января 2009

Рассмотрите возможность использования шаблона проектирования «Команда» для этого. Это поможет вам двумя способами - ответить на поставленный вопрос, а также реализовать функцию «отменить / повторить». Вы должны вести список объектов команд, разработанных в соответствии с этим шаблоном.

...