К содержанию

Обновления MODX.pro - работа не всегда заметна

В августе я обещал, что реклама переедет из шаблонов в настройки и появится ротация. В октябре писал, что сайт заваливают роботы и следующая работа — кэш. С тех пор сделано довольно много, и про кэш я ошибся. Рассказываю по порядку.

Сайт стал быстрее в десять раз, и кэш тут не при чём



В октябрьской заметке я написал, что корень проблемы — страницы собираются заново на каждый запрос, и кэш для анонимов снял бы основную нагрузку. Диагноз был неверный.

После тех правок сайт всё равно отвечал 2,6–3,6 секунды. Полез смотреть, что именно делает база, и нашёл две таблицы, которые никто никогда не убирал.

Таблица сессий. 1 247 720 строк и 6,3 ГБ на диске. Каждый просмотр страницы анонимом создаёт сессию, а cookie роботы не возвращают, поэтому переиспользования нет — приток около 190 тысяч в сутки. Авторизованных сессий во всей этой горе было 404.

Реестр MODX. 45 407 сообщений, все до единого просроченные, старейшему восемь лет — токены сброса пароля и смены почты с января 2018 года. Никто их не удаляет, а читаются они на каждом запросе: в выборке активных запросов базы они занимали 83 попадания из 136. Больше половины всей работы базы уходило на перечитывание мусора.

После уборки время ответа — 0,27 секунды. Load average упал с 14 до нормы. Кэш для анонимов не понадобился вовсе, и теперь я не уверен, что он нужен.

Обе чистки поставлены в cron, так что заново это не накопится.

Поиск не находил ничего свежего восемь месяцев



Самая неприятная находка. Поисковый индекс не обновлялся с 25 февраля. Всё, что опубликовано позже, не находилось вообще — при том что поиском пользуются около 1090 раз в сутки.

Причина скучная: индекс пересобирался руками, а руки не дошли. Никто не написал, что поиск сломан, — видимо, просто решали, что на сайте ничего нет.

Теперь переиндексация идёт каждый час. Заодно поиск стал переживать перезагрузку сервера: раньше после неё он лежал до десяти минут, потому что поднимался не службой, а сторожем в cron раз в десять минут.

Если у вас сайт не открывался — возможно, дело было в этом



Часть посетителей жаловалась, что modx.pro не открывается вовсе, при этом у остальных всё работало. Хостер связал это с тем, что оборудование фильтрации ломает TLS 1.3.

Отключил 1.3, оставил только 1.2. Жалобы прекратились, и наоборот появились сообщения, что сайт стал доступен. Доказательство не идеальное — те, кто не смог подключиться, в логи не попадают по определению, мерить приходится обращениями людей. Но порядок событий говорит сам за себя.

Цена — рукопожатие в два круга вместо одного и нет HTTP/3. Взамен часть людей вообще открывает сайт. Вернусь к этому через несколько месяцев: поведение фильтрации меняется.

Реклама: обещанное сделано



Содержимое блоков переехало из шаблонов в админку, как и обещал. К этому добавилось:

  • срок показа — объявление гаснет в свою дату само;
  • ротация по весам, случайная на каждую отрисовку, так что доли показов соблюдаются точно;
  • счётчик переходов по дням;
  • крестик теперь помнит отказ по конкретному объявлению, а не отключает рекламу навсегда. Раньше первый же крестик лишал вас всей рекламы — это было неправильно.
Показы не считаю намеренно. При нашей доле роботов такому числу нельзя верить, а я собираюсь продавать это место. Считаю только переходы, и то без явных роботов и без повторного клика того же посетителя в пределах получаса.

Чужие ссылки уходят с rel=«nofollow sponsored». Без этого продажа размещения читается поисковиком как продажа ссылок, а это уже другая история.

Место пока не открывал. Сначала хочу убедиться, что счётчик показывает что-то осмысленное.

Бейджи у пользователей



У профилей появились бейджи статуса. Четыре вида:

  • Администратор и Старожил считаются сами — второй через три года после регистрации;
  • Проверенный — у автора хотя бы одной публикации в содержательных разделах: уроки, обзоры, готовые решения, инструкции, дополнения, безопасность, для разработчиков, сайты на MODX. Вопросы и объявления о работе не считаются;
  • Эксперт — по рейтингу от 300, но считанному до множителя за активность.
Про последнее стоит пояснить, потому что решение неочевидное. Итоговый рейтинг умножается на множитель за активность, и он давит тех, кто взял паузу. На живых данных автор с 44 статьями оказывался ниже автора с тремя. Для места в списке это правильно — там и должны быть те, кто пишет сейчас. Для признака экспертизы нет: она не исчезает, если человек год не публиковал.

Бейджи уже расставлены: 244 проверенных и 22 эксперта. Эксперт — это меньше тысячной доли аккаунтов, и так и задумано. Если считаете, что кого-то обошли незаслуженно, напишите.

Есть решение



В разделе «Вопросы» автор темы и администратор могут отметить комментарий как решение. У заметки в ленте появляется значок, так что видно сразу, разобрались там или нет.

Вещь, которой не хватало годами. Работает только в вопросах — в остальных разделах смысла нет.

Что ещё заметно изменилось



  • Значок непрочитанных комментариев в шапке со списком тем. Считаются только темы, где вы участвовали или подписаны: открытая из ленты чужая тема больше не будет полгода напоминать о себе.
  • Подписка на автора. В профиле появился чекбокс «Уведомлять о новых заметках». Подписаны и на раздел, и на автора — письмо придёт одно, а не два.
  • Галереи. Подряд идущие картинки собираются в одну ленту с общим просмотром, а не растягивают заметку столбцом на всю высоту.
  • Отмена голоса. Повторный клик по плюсу или минусу снимает голос. Раньше его можно было только сменить на противоположный.
  • Черновики. У черновика появилась ссылка «Открыть». Раньше после сохранения автор оставался в редакторе и не видел, что получилось, пока не находил заметку в списке.
  • Подтверждение публикации показывается уже на странице заметки, а не в форме. Двойная отправка отсекается.
  • Закреплённые заметки снимаются сами через семь дней.
  • Компоненты в профиле. Разработчик может сам выбрать до пяти своих дополнений вместо автоматического топ-5 с Modstore.
  • Ссылка на GitHub в шапке и подвале — исходники сайта открыты.
  • Доступность с клавиатуры: ссылка перехода к содержимому, видимый фокус.
  • Вёрстка: шапка прилипает при прокрутке, страница сузилась с 1600 до 1440 пикселей, подвал перестал висеть посередине на коротких страницах, анонс в ленте снова обрезается по вашему тегу cut, а не по 180 символам.

Что ломалось, пока вы не видели



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

Страницы со списками падали целиком из-за заголовка с фигурной скобкой. Ломалась не сама заметка, а любая страница, где она выводилась. За пять дней это дало 945 ошибок и 166 МБ упавших страниц в кэше. Виновных заметок было три, и добавить такую мог любой — достаточно назвать свой вопрос с фигурной скобкой, а на сайте, куда приносят примеры кода, это происходит само.

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

Подписчики раздела не получали писем, если автор публиковал черновик кнопкой. А подписка на автора первые сутки вообще не сохранялась.

Голос за избранную заметку визуально снимал звезду. В базе она оставалась, но до перезагрузки выглядела потерянной.

Письма застревали: одно неотправляемое держало всю очередь. И ссылка в письме подтверждения регистрации вела на неверный поддомен.

Удалённые заметки продолжали считаться в рейтинге автора — мягкое удаление не снимало признак публикации, и спам оставался в счёте.

Под капотом, коротко



Иконки переехали с платного Font Awesome Pro на свободный SVG-спрайт, и страницы полегчали на 7,3 КБ. Стили и скрипты сайта наконец попали в репозиторий — до этого main.css существовал в единственном экземпляре на сервере, без резервной копии. Зафиксирован план переезда сборки на Vite. Закрыты две возможности внедрить скрипт через заметку и имя профиля. PHP обновлён после октябрьских уязвимостей, приложения панели уведены с версии, которая исправления не получила.

Если что-то из перечисленного работает не так, как описано, — напишите в комментариях. Правок было много, и часть из них затрагивает все страницы сайта.
Николай Савин
Николай Савин
3 часа назад
modx.pro
135
Реклама

Комментарии: 6

Артур Шевченко
3 часа назад
Спасибо, что ты всё ещё с нами!!!
    Андрей Шевяков
    Андрей Шевяков Проверенный
    2 часа назад
    Круто, спасибо!

    Можно еще пофиксить эти моменты, очень глаз режут?))))

    1) У некоторых заметок есть скролл, который явно не должен быть:



    2) Дерево комментариев только на 4 уровня показывает красиво, потом что-то с отступами у полосок:



    Все можно посмотреть наглядно в этой заметке modx.pro/components/25808
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    6