Этап
Готова
Тип
Задача
Приоритет
Обычный
Трудоемкость
Обычная
Создана
Дата создания
4 года назад
Назначена
Обновлена
год и 9 месяцев назад

У меня появляются разные интересные сервисы, которые порой работают очень сложно. По хорошему надо бы продумать и прикрутить к ним профайлинг, который и так есть в симфони. https://symfony.com/components/Stopwatch

Например Dicitonary по описанию типа справочника находит его в проекте, распаковывает, назодит и забирает значение, строит объекты и и возвращает значение. Для страниц со списком задач он делает это для каждой задачи. А когда справочников будет несколько, еще и для каждого справочника. И очень хочется построенные справочники и методы закешировать, как минимум в данных класса. Но не факт, что это имеет какой-то смысл.

Панель управления

Комментарии могут оставлять только авторизованные пользователи
 demius год и 9 месяцев назад

Ну, некий профайлинг мы собирать начали. Пока, правда, слишком малые объемы, чтобы проверить скорость (надо сделать тестовые жирные БД)

 demius год и 9 месяцев назад

Он в общем-то готов, но если его сейчас принять, его изменения, в том числе большой рефаторинг по перемещению окажется в tndt-153, который и так не маленький, так что сначала его, потом эту задачу.

 demius год и 9 месяцев назад

я думаю пок ана этом остановимся, дальше будет понятнее, что делать

 demius год и 9 месяцев назад

Может сразу и зарелизить, с ней работать с кешами гораздо удобнее и понятнее

 demius год и 10 месяцев назад

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

 demius 2 года назад

Кстати, Domain-service отвечают за обработк значимого события, поэтому они вполне могут инъектировать логгер, на проде этот логгер будет кидать в лог значимое событие, напримре только по завершению. А на дев цеплять и начало и окончание, и кидать в stopWatch

 demius 2 года назад

К Dictionary/Fetcher еще Security/Voter, причем их у нас несколько, надо бы закрыть все, чтобы определить, когда выяснение полномочий стало дорогим

 demius 2 года назад

Чтобы добавить в наш проект профалинг без вмешательства в бизнес-логику и прод,

  • Убедиться, что на деве у нас именно TraceableEventDispatcher - это частично поможет для некоторых тяжелых событий, но у нас они все только даты в сущностях обновляют, т.е. легкие, но это пока с введением вики все усложнится.
  • Сделать Traceable обертку потенциально тяжелых сервисов, вроде DictionaryFetcher
  • Подумать над Domain-сервисами, они с одной стороны должны быть обернуты, с другой у них не едный интерфейс и для каждого делать обертку такое себе. С третьей они инициируются бизнес-евенты и смешивать их с евентами логирования тоже такое себе. В общем со всех сторон некрасиво
 demius 2 года назад

https://symfony.com/doc/current/performance.html#profiling-symfony-applications вот здесь реальный пример введения профайлинга. Как это делает симфони в своих сервисах можно посмотреть ищу по папке пакетов симфони фразу stopwatch.

в общем и целом происходит это так, Либо сервис за которым происходит профайлинг вызывает логгер, реализация которого для дева дергает профайлер. Symfony\Bridge\Doctrine\Logger/DbalLogger.php Либо тяжелая задача обрабатывается листенером. В дев режиме используется TraceableEventDispatcher, он оборачивает каждый листенер, TraceableListener’ом который замеряет время обработки.

 demius 3 года назад

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