
Рефакторинг Yii: замеры до и после, где текут запросы
Что реально даёт рефакторинг Yii-приложения в цифрах: N+1 в ActiveRecord, ленивая загрузка, тяжёлые события. Как замерить прирост, а не поверить на слово.

Что реально даёт рефакторинг Yii-приложения в цифрах: N+1 в ActiveRecord, ленивая загрузка, тяжёлые события. Как замерить прирост, а не поверить на слово.

Медленный контроллер редко ломается в проде внезапно — его пропускают на ревью. Разбираем, какие места в коде на Yii 2 указывают на проблему до того, как она станет инцидентом.

Кеш на TagDependency и Cache::getOrSet выглядит безобидно, пока трафик низкий. Под нагрузкой оба дают эффекты, которые заметны только на графиках Redis и времени ответа.

Один вызов $model->save() превращается в связку из событий, валидации, dirty-атрибутов и SQL. Разбираем, как ActiveRecord в Yii 2 хранит состояние записи и где это состояние ломается под нагрузкой.

Yii1 не обновлялся с 2015 года, а Yii2 — не патч, а другой фреймворк. Разбираем стратегии перехода: переписать сразу, мигрировать частями или жить на двух ядрах, и чем платит каждая.

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

Проект на Yii2 растёт пять лет, контроллеры разрослись до тысячи строк, а любое изменение ломает соседний модуль. Разбираем, какие места ревьюить и рефакторить первыми.

Старый проект на Yii2 держал сотню запросов в минуту, а на распродаже упал при трёхстах в секунду. Разбираем, какие места приложения отваливаются раньше остальных и почему.

Очередь на yii2-queue держалась до 200 задач в минуту, потом воркеры начали падать по памяти, а в БД повисли задачи в статусе reserved. Разбираем, что отваливается раньше всего и почему.

Расширение yii2-queue выглядит как одна команда push, но между постановкой задачи и её выполнением проходит сериализация, брокер, retry и обработка ошибок. Разбираем механизм, чтобы понимать, что ломается под нагрузкой.

На проекте с рассылкой писем очередь yii2-queue копила по 40 тысяч задач в час пик, а отправка одного письма занимала 2,5 секунды. Разбираем, где узкое место и что дал тюнинг воркеров.

Приложение на Yii2 держало 40 запросов в секунду, а на пике пошли таймауты. Разбираем, что тормозит первым — ORM, компонент кеша или сама инициализация фреймворка — и как это профилировать.