Модуль "Кто онлайн" (оптимизация + аякс)

1727
Приветствую!

Продолжу тему аякса на сайте рассмотрением одного очень популярного модуля - "Кто онлайн?". Модуль популярный, но очень не оптимизированный.

А вы знаете как он работает? - если кратко, то вот:
1. Получает авторизованных посетителей онлайн (1 запрос)
Проверяет каждого на принадлежность к администраторам (N запросов, по количеству посетителей)
Проверяет не админов на принадлежность к редакторам (N-a запросов, где а - количество админов)
2 Считает гостей онлайн (1 запрос)
3 Считает авторизованных посетителей за сегодня (1 запрос)
Проверяет каждого на принадлежность к администраторам (M запросов, по количеству посетителей)
Проверяет не админов на принадлежность к редакторам (M-b запросов, где b - количество админов)

Если в данный момент на сайте 10 человек онлайн, то получится порядка 40 запросов(а может и больше). Согласитесь, что такое количество запросов к базе данных от одного модуля - это явно перебор. Вариант с кэшированием отпадает - если посетитель зашел на сайт и не попадает сразу в список "онлайн" - то мало толку от такого модуля.

Я переписал запросы в этом модуле - получилось 3 запроса (вместо +40 для хорошо посещаемого сайта) (теперь их количество не зависит от количества юзеров) и добавил возможность обновления через аякс с заданным интервалом.

Установка:
1. распаковать архив
2. раскидать файлы по нужным папкам
3. установить в админке (для проверки работы можете установить его рядом со старым модулем "Кто онлайн" - и показать только админу)
4. Если нужно - поменять период обновления, по умолчанию он равен = 60 секунд(если 0 - обновляться не будет)

1. Ссылка для скачивания.
2. Языковой файл - положить в папку languages/ru/modules/

PS Дизайн блока остался такой же (тестировался на версии 1.9). Замечания, баги и предложения жду в комментариях smile
Плагин "Новые сообщения" | Хак "Оптимизация вывода комментариев"
Комментарии (50)
GarikKR 2 марта 2012 в 17:56 +2
Подскажите пожалуйста ,почему у меня вот так показывает?

SJen 2 марта 2012 в 18:00 +3
Дело в кодировке, у вас же сайт на cp1251?
GarikKR 2 марта 2012 в 18:04 +1
Ну да.А какя кодировка нужна?UTF8?
SJen 2 марта 2012 в 18:09 +3
Да все верно, cp1251.
у меня то же самое, так и прописано при обновлении контента. Подумаю, что можно сделать.
GarikKR 2 марта 2012 в 18:15 +1
Спасибо за отклик,Просто я подумал это у меня что то не то.Спасибо за ваши полезные полезности!
SJen 2 марта 2012 в 18:19 +3
Может я двусмысленно написал
У меня на сайте тоже cp1251 - но отображается все корректно. Вы гляньте, пожалста, файлик update - может там убились сообщения при архивации
GarikKR 2 марта 2012 в 18:18 +1
У меня ЗАПОКАЗЫВАЛО!!!!У меня в базе было сравнение cp1251,Я поставил еще и сопоставление
GarikKR 2 марта 2012 в 18:20 +1
А нет(((при перезагрузке страницы опять тоже самое,видно новерное когда аякс обновляет тогда становится нормальный вид
SJen 2 марта 2012 в 18:21 +3
Понял, это я не докинул один файлик - сейчас кину (языковой файл)
SJen 2 марта 2012 в 18:26 +3
Уфффф, пропустил языковой файл при публикации - добавил в первый пост, скачайте. Один файлик "mod_whoonline_ajax.php", надо положить в /languages/ru/modules/
SJen 2 марта 2012 в 18:20 +3
отлично)
GarikKR 2 марта 2012 в 18:25 +1
Он в архивчике будет?заного перекачать
GarikKR 2 марта 2012 в 18:25 +1
Все увидел
GarikKR 2 марта 2012 в 18:28 +1
Работает!!!Спасибо огромное.!!
Atid 2 марта 2012 в 19:42 +1
Продолжайте в том же духе,;)
FreeLancer 2 марта 2012 в 20:41 0
Не увидел там пункта: Сегодня были :(
SJen 2 марта 2012 в 20:44 0
в админке посмотрите настройки модуля. Вообще, автоматом ставится показывать кто был сегодня.. Но все-таки.
Patriot 2 марта 2012 в 23:15 0
То же самое, "Сегодня были" отсутствует...
SJen 2 марта 2012 в 23:28 0
Откройте настройки модуля, проверьте что стоит галочка "Показывать кто был сегодня" и сохраните.
Patriot 2 марта 2012 в 23:32 0
Стоит галочка, но в модуле "сегодня были" никого нет...
SJen 2 марта 2012 в 23:35 0
попробуйте пересохранить настройки - просто открыть и затем сохранить.
Patriot 2 марта 2012 в 23:39 0
Странно, теперь появились и работает нормально Но около 20 минут было в модуле пусто. )
SJen 2 марта 2012 в 23:51 0
да есть там один баг при установке)
пересохранение настроек помогает(убрать-поставить флаг и записать).
CozaNostra 2 марта 2012 в 21:24 0

+

SJen 2 марта 2012 в 23:42 +2
У кого не показываются "посетители за сегодня" - откройте в админке настройки модуля, уберите флаг "Показывать кто был сегодня", поставьте обратно и сохраните
mrDON 3 марта 2012 в 10:14 0
на самом деле да, в инстант очень кривые запросы к базе, у меня на сайте бывает до 30 онлайн и обин мой сайт ложит скрвак. Было бы замечетельно если бы тс пересмотрел и оптимизировал запросы к базе.... Выдь из 40 запросов сделать 3 разработчики инстанта не могли. Автору спс за полезный хак, продолжай в том же духе.
st.Puh 3 марта 2012 в 12:11 +1
А вывод поисковых ботов забыли добавит в ваш хак
SJen 3 марта 2012 в 12:34 0
Я переписывал модуль mod_whoonline - по крайней мере в моей версии модуля вывода поисковых ботов не было. Да и, честно говоря, для меня вывод ботов не несет какой-то полезной информации (а для простых юзеров так вообще никакой), только лишний запрос к БД.. Но опционально можно добавить.
vitalson9 3 марта 2012 в 21:04 0
После установки модуля вкладки в профиле пользователя не открываются после отключения модуля всё нормально. Где то конфликтует
SJen 3 марта 2012 в 21:23 0
файл для таймера закинули в includes?
джин 4 марта 2012 в 01:15 0
+ Естественно)
ByMind 4 марта 2012 в 15:05 0
наблюдение:
исправно показывает появление новых пользователей в онлайне, а вот в офф провожает только опосля перезагрузки страницы?
наблюдение верно, или всеже нет?
SJen 4 марта 2012 в 15:57 +1
Неверно в том плане, что "пользователи онлайн" берутся из таблицы cms_online - что там есть, то и отображается. Но если есть сомнения, кидайте сайт - разберемся)

У меня исправно работает на проекте (довольно большая текучка пользователей).
ByMind 4 марта 2012 в 16:10 0
не
показалось))
hydraq 4 марта 2012 в 15:35 0
а у меня при включении этого модуля главное меню перестает раскрывать вкладки( видимо стили как то перебивает(
SJen 4 марта 2012 в 15:55 0
сайт в личку если можно
такого не должно быть
VonKruger 4 марта 2012 в 22:25 0
Спасибо автору за проделанную работу. Но вот как и в стандартном, почему-то снова не отображается подсветка (цвет) редакторов или модераторов. В нижеприведенном скрине обведенные красным являются модераторами, а почему-то цвет ника не изменен. Может подскажите какое-нибудь решение (в настройках модуля цвета выставлены)
SJen 4 марта 2012 в 22:35 0
Есть небольшой баг. Исправляется просто - зайдите в настройки плагина, уберите флаг "Подсвечивать администраторов и редакторов?" и поставьте заново. После этого сохраните настройки. И все будет работать.

Проблема в том, что настройки по умолчанию некорректно сохранились.
VonKruger 4 марта 2012 в 23:02 0
А вот еще вопрос, в коде прописана такая строка
Код PHP:
if (!isset($cfg['color_editor'])) { $cfg['color_editor'] = '#009900'; }
я так понимаю, что эта строка определяет цвет ника редактора, но редактор в разделе "группы" записан как editors, не editor, может ли это влиять на правильность отображения?
VonKruger 4 марта 2012 в 23:05 0
уточню в каком файле \modules\mod_whoonline_ajax\module.php
SJen 4 марта 2012 в 23:13 0
Строка в коде указывает цвет по умолчанию для переменной под названием "color_editor" - это никак не связано с какими-то названиями в других местах, это просто внутреннее название переменной в модуле(ее можно было назвать и "tcvet_redaktora" - но я оставил как стандартном модуле). И никак не связано с тем, как определяется что это редактор.

Другими словами - если у вас работала раскраска в старом модуле, то будет работать и в этом. Только для этого нужно протыкать заново флажки в настройках и пересохранить.
VonKruger 4 марта 2012 в 23:27 0
К сожалению ни на старом, ни на новом модуле раскраска не работает. Пробовал воспользоваться подсказанным вами способом, результата никакого... Я в печальке :(
VonKruger 4 марта 2012 в 23:32 0
И по-моему я еще обнаружил что автообновление не работает на версии 1.7 После обновления страницы, заметил иное расположение в модуле пользователей, и один был онлайн уже как 3 минуты, а это ничего не отобразилось в режиме онлайн.
SJen 4 марта 2012 в 23:49 0
Кидайте сайт в личку если можно. У некоторых была проблема со скриптом - из-за ошибок с другими скриптами не подгружался таймер.
VonKruger 5 марта 2012 в 00:20 0
адрес кинул в личку, надеюсь на помощь.
Таня 20 марта 2012 в 10:57 +1
Я модуль этот еще не тестировала, но у меня вопрос к уважаемому разработчику: можно как-то доработать модуль, чтоб "Сегодня были" сделать кликабельным, т.е. чтоб он не отображал сразу список, а при клике на фразу "Сегодня были" раздвигался вниз к примеру, ну и при клике на "Скрыть" например, обратно задвигался?)) А то слишком много место стал занимать этот модуль.
SJen 20 марта 2012 в 11:23 0
Можно, если доберусь - сегодня выложу. Если нет, можете напомнить в личку)

Если еще мысли есть по этому модулю, пишите. Раз уж буду к нему возвращаться, то сразу бы и сделал.
Таня 20 марта 2012 в 11:38 0
ну в принципе то что я описала выше можно и не только для "Сегодня были", ну и для самого "Кто онлайн" сделать. Для тех проектов где очень большая посещаемость это было бы удобно.
В идеале было бы вообще хорошо если бы в админке в настройках модуля можно было выбирать как его отображать - либо сразу развернутый список "Кто онлайн" и списаок "Сегодня были", либо развернуть при клике, (естественно настройка и для одного и для второго списка отдельно) Но это я уже наверное нафантазировала сверх меры)))
floppox 6 августа 2012 в 10:55 0
Почему-то отладка показывает 79 запросов и с одним блоком и со вторым...
Нил™ 10 апреля 2013 в 19:50 0
Спасибо за модуль. Кто нибубдь сталкивался с тем что периодически при обновлении начинает показывать только гостей а пользователей -0, хотя на сайтеесть авторизованные пользователи. (при обновлении страницы тоже)