За последние 2 месяца у начальства компании развился серьёзный интерес к разделению бэка и фронта. Не знаю с чем это конкретно было связано, но надеюсь я в этом сыграл не последнюю роль
Так как фронтом теперь занимаются отдельные люди, я подумал, а почему бы и в бэке не привнести существенные изменения? например, сменить фреймворк🤡
Звучит смешно и слишком радикально, однако я так просто от этой идеи отказываться не захотел и попросил дать мне шанс испытать symfony, сделав небольшой проект (реально небольшой — одна апи точка + одна страница для отображения хранимых данных)
Естественно, я убил на этот проект в 3 раза больше времени, чем если бы делал на yii2, но я для себя много чего нового узнал
Например, symfony — это очень удобно, это разделение всего и вся на компоненты, это грамотно, но это ОЧЕНЬ медленно
Я взял 2 демо-проекта, yii2 и symfony, развернул их и начал закидывать запросами через утилиту hey. В итоге оказалось, что yii2 до 5 раз быстрее при запросе обычной странички, которая выводит hello, $_GET['name']. Понятно, что я не могу прийти на собрание и сказать — давайте-ка перейдём на новый фреймворк, он в 5 раз медленнее, но удобство разработки в разы выше. Меня просто засмеют — я пока не привил должного отношения к хорошему коду в компании.
Но это дало повод задуматься — что я могу стащить из symfony, чтобы получить скорость yii2 и удобство symfony?
Самое очевидное удобство, которое бросается в глаза в первый час разработки — валидация на атрибутах. При чём не на старющих аннотациях через комментарии, а на нормальных, уже нативных в php атрибутах.
Подумано — сделано. За полтора часа накидал систему валидации и простецкие валидаторы, типа not null, equals и тд. Написал тест, сравнивающий нативную валидацию yii2 и самописную. Не знаю, чего я ждал, но получил, что моя реализация в 7 раз быстрее нативной. Я не знаю что творится за кулисами валидаторов в yii2 и уже не хочу выяснять.
На этом однако процесс не остановился — я часто пишу апи, часто пишу консольные команды. Все они должны быть транзакционными от и до, и в лог должно падать сколько время каждый процесс занял. Это огромная куча кода, который постоянно дублируется. Выход? 2 простых атрибута — #[Timed] и #[Transactional]. Вешая их на любой экшен я теперь получаю весь нужный мне функционал, не тратя ни капли сил.
Следующий шаг логичен как ничто другое — вынести всё это дело в композер-пакеты и использовать их в текущих проектах. Это заняло около часа может, не более, но я по итогу в проектах занимаюсь нужными вещами, а не написанием бойлерплейтов, получаю чистейшие исходники, которые не заляпаны кучей дублирования и читаются как книга. Детский восторг и всё такое.
Выводы очень простые:
1. Просите давать вам возможность пробовать что-то совершенно новое в обмен на опыт и обучение коллег. Это может быть фреймворк, может быть язык, может быть новая БД (я смотрю на тебя, SurrealDB), что угодно — важен факт обучения и познания.
2. Что-то понравилось? Тащите себе в проект, адаптируйте, расширяйте функционал. Это бесценный опыт, который в итоге упростит жизнь вам и вашим коллегам.
3. Атрибуты — огонь
Добавить комментарий