Про yii2
Всем алоха, как я и обещал где-то в комментах прошлой статьи продолжение, и в этот раз про yii2.
Снова субъективщина и минусы. От менее болезненного к более болезненному. Комменты велкам.
bower из композера
Этот минус просто обязан быть в этом списке, он даже более чем очевиден. Все очень просто, когда эта фича появилась, это было вау, но через месяц меня отпустило. По нескольким причинам.
Вы будете юзать bower
Фуллстек — это модно, но на многих проектах фронтенд даже физически может лежать в другой папке или репе. Это нормально, бекенд не хочет лезть во фронт и наоборот.
Все начинает работать медленней
Ну очень медленно, я на одном сравнительно небольшом проекте успеваю сходить налить себе воды, поцеловать жену и вернуться к компу, а там до сих пор идёт composer update. Если что, в интернетах уже ходит защита от себя, я про неё знаю, но так и не попробовал.
Это есть в ядре
Этой зависимости просто не должно быть в ядре. Инициализация приложения на сервере в итоге на команду больше, про неё можно просто забыть. Опять же, такие фичи должны быть опциональными.
Статика
Под статикой я в первую очередь понимаю класс Html и растущий от него ActiveForm и виджеты. С одной стороны удобно, но с другой стороны начинаются шаги влево-вправо и всё равно перекрывать или писать свой велосипед. Но причем тут виджеты? Потому что все это растет из Html, этим многие даже и не воспользуются (например api для мобайл приложения). То есть эта часть скорее опциональна, чем обязательна. Лучше бы вынести в отдельное репо и доставлять, когда потребуется.
Лишние “возможности” в ядре
Их очень много, первая мысль — это pjax. Это должно быть опционально, гайз. В первую очередь я про:
Yii::$app->getRequest()->getIsPjax()
Реквест круто, но вшитый pjax не круто. Кстати, pjax на сложных проектах начинает мешать и все равно люди придут к angular, emberjs, react. Если, конечно, не встанет вопрос про SEO, но там будут костыли разного вида.
А еще, я не знаю куда написать из разделов, но я бы хотел отметить, что даже во вью и лейаутинге есть подводные камни. Я считаю, что пхп — это шаблонизатор, и шаблонизаторы твиг, блэй, усы — это сахар и защита от себя. Но я видел, когда человек думает в рамках yii2 и юзает твиг с лейаутингом от yii2.
Зачем, если твиг сам умеет лейауты? Но Лейаут yii2 хорош, но кодеры привыкают к нему и начинают его юзать там, где он не нужен, то есть коробка навязывает решение и все начинают его использовать, как микроскоп для забивания гвоздей. Если я буду юзать твиг, то возможность лейатинга View не нужна. В документации на данный пример пример с yii2 лейаутингом. Опять же, если подумать, то View стоило бы отделить от основного репо. Я, пожалуй, снова приведу пример с мобайл апи — yii2 юзаю для приложения, но View не юзаю.
Чуть не забыл, ассеты :) В вопросе ассетов yii2 пытается отобрать одеяло у фронтенда. Зачем делать минификацию и конкатенацию скриптов, да стилей на php? Возможно, эта фича и востребована, но стоит помнить про gulp, webpack. PostCSS на php еще не завели.
Архитектура — AR, роутер, модули
AR — удобен, пока не начинает тормозить. Что значит тормозить? Я не про память сейчас, с памятью все ок, ничего не течет, а в php7 тем более, в AR yii2 почти нет магии, только бихейверы с приоритетами __set, __get, __call, это допущение растет из версии 1.x, но обещают уйти в трейты. Станет чуть более очевидней. Я сейчас про скорость, есть в моем опыте приложение api для фронтенда, внутри была хитрая выборка с джойнами, теггированием, группировкой. Когда контента стало больше, то все начало тормозить, в БД висели индексы, БД отрабатывала молодцом. Переделали использование AR на asArray() + ручная сборка relations и все стало летать. Мораль такова — если юзаешь, то думай головой, а не ООП.
Модули, конечно же, интересное решение, но приоритезация у них странная. В index.php мы запускаем GOD модуль, у него весь прикуп на руках. Миграции и консольные команды только в нём, иначе поиск решений, готовых компонент для фреймворка. Как по мне, в главе стола должен сидеть роутер.
Изначально хотел наругать роутер, мол нет группировки, алиасов, как у братьев и сестер (хоть и не родных) в экосистеме. Но алиасы таки есть, это controller/action, да и группировка тоже есть. Просто про это никто не писал, да и в примере базового приложения, было бы правильно показать, как правильно это готовить, или просто добавить красивый пример сюда, где ему и место, хотя упоминание я про это нашел в доках, но примеров так и нет. Из минусов остается только сабдомен роуты, на данный момент — это можно, но больно и страшновато (пример можно найти в автотестах фреймворка).
Внушение сообществу, что сильная связанность это хорошо
Сообщество — это маленький ребенок, который впитывает то, что ему говорят взрослые. Стоит рассказать, что правильно, а что нет и говорить, что сильная связанность в фреймворке это плюс — не хорошо.
Первое что вспоминаю про yii2 и связанность, это компоненты от kartik-v. Если полезешь внутрь, то вылезешь оттуда в чем-то плохом, как Винни Пух (срань господня, там гридвью требует подключеие модуля для экспорта в xls, который нахрен не нужен в 99% случаев). И есть у меня пара примеров, когда человеку объясняешь, что сильная связанность — это не гуд, а он тебя в ларавел/симфони посылает, потому что начитался, что это плюс yii2 и он поэтому работает быстро. Даже если в фреймворке всё сильно связано, то свой код не пишите таким же, как минимум.
Пользоваться нужно и надо с умом.
Сообщество
Эх, любимый мой раздел. Для начала, годноту для yii2 мониторим тут, виджеты не плодим, иначе срам. Мне не нравится в сообществе yii2, что на данный момент царит атмосфера «я научился писать под андроид», и раньше, когда заходил в стор, то видел десятки фонариков и хеллоу ворлдов.
Про что я? Про это: yii2 codemirror, yii2 imperavi redactor, yii2 fileapi. Большая часть интересных плюшек в основном от кор девелоров и активных контрибуторов yii2? Сообщества других экосистем и языков как-то чуть зрелее чтоли, у них есть действительно годные экстеншны, которыми хочется пользоваться.
Возможно, жители СНГ и Китая просто стесняются хвастать своими скиллами в сообществе :)
Отсутствие маркетинга
И тут мы подошли к основной проблеме yii2, из-за которой мне обидно. Все распространение yii2 сводится к нескольким странам из СНГ и Китаю. Эй, ты, фрилансер. Начинай продавать yii2 :D Хотя я сам грешу и в половине случаев выбираю ларавел по нескольким причинам, но часть из них в версии 2.1 практически растворятся.
От себя, хочу пожелать успехов Саше Макарову на хакатоне в Москве, лишний пиар никому не помешает, кстати, всем интересующимся про хакатон сюда. И конечно же найти своего эвангелиста на Западе, который будет работать над популяризацией за бугром :)
Вместо заключения
И по классике — не будьте хомячками, гайз. Пишите в твиттер, будем дискутировать.