На чем лучше писать сайт? CodeInteger, Yii или другом фреймворке (далее Ф)? Мой ответ до этого был, однозначно на чистом пхп без фреймворка, но сейчас я понял- бесмысленно боротся с пропагандой вещающей, что “хороший продукт” должен быть написан не с нуля. Поэтому вот анонсирую свой фреймворк, название еще не придумал. Основные отличия по традиции: простота, много готовых модулей (галереи, блог, магазин, новости, доска обьявлений, переписка, поиск, социальная сеть, билинг, модули оплаты, crm, кэширование, интеграция с социалками – все это сам написал), высокая скорость работы. Я ориентируюсь на бизнес, с их KPI, GTD, немного на маректологов с их SEO, SMM, но при этом хотелки программистов с их ООП, MVC будут рассматриваться в последнюю очередь.
типичные проблемы популярных фреймворков (по материалам http://we-love-php.blogspot.ru/2012/10/php-framework-comparison.html статья хоть и старая, но сейчас это уже статус кво):
Typical problems in frameworks
- необходимо писать много кода который просто ничего не делает, но “нужен” (example)
- Слишком много абстракций (example)
- Невероятно огромное количество строк кода (e.g. ZF1 260,000, ZF2 146,000 loc, Symfony2 173,000 loc, Doctrine2 70,000 loc), очень сложно оптимизировать, сложно поддерживать
- Осень много различных функций (e.g. ZF1 13,000, ZF2 7,800, Symfony2 9,500, Doctrine2 4,400), сложно для обучения (у php я использую не более 500).
- Огромное количество переопределений переменных (когда одни и те же данные просто перемещаются в памяти) (e.g. ZF2 4,080, Symfony2 3,800 (analysis from nikic))
- Тяжелая документация (e.g. ZF2 1000 pages and 500 examples)
- Очень много include (example)
- плохое форматирование кода (e.g. ZF2 echo StaticFilter::execute($str, “HtmlEntities”, array(“quotestyle”=>ENT_QUOTES)); echo (new ZendFilterHtmlEntities(array(“quotestyle” => ENT_QUOTES)))->filter($str);)
- навороченный код (например, чтоб сделать запрос к базе нужно писать несколько строк кода, хотя это делается одной функцией)
- несовместимость различных версий одного Ф, если вы написали сайт знакомств на yii 1+, то уже сейчас вышла версия 2
- постоянное желание разработчиков “написать все с нуля” или выпустить “другой более легкий фреймворк”
Тесты показывают, что тот же YII в самом базовом варианте потребялет (за один заход посетителя) не менее 3 мб. оперативной памяти, когда например сайт знакомств на чистом пхп 0.5 мб. Это значит, что где обычному пхп понадобится один сервер, фреймворк затребует не менее 6ти. Конечно можно и нужно использовать кэширование и оптимизацию, но и для фремйворка и для чистого пхп это будет внешнее решение, например memcache и nginx
Существует так же большое заблуждение, что большой плюс Ф уже сразу идет с валидацией форм, проверкой входящих данных, автоматически подключает jquery. jQuery уже давно подключают верстальщики прямо в верстку одной строчкой (о боже, верстальщики делают то, для чего программистам нужен фреймворк! я сваливаю). Валидация форм так же подключается одной строкой, а проверка на заполненность форм по стандарту HTML 5 уже давно выполняется самим браузером (то есть вообще ничего кодить не надо). Остается проверка входящих данных и прочая безопастность и защита.
Почему же Ф так популярны? Основная причина, в том, что люди ищут “золотую пулю”, одним выстрелом убить всех зайцев и ускорить разработку, мой личный опыт говорит ровно об обратном. Кодер тратит в 5-10 раз больше времени на исправление глюков, 90% из которого вслепую блуждая по файлам Ф и документации пытаясь понять “почему он работает не так”.
Вывод, фреймворки это отличная штука, чтоб покапатся пару вечеров, посмотреть, чем заняты программисты когда у них нет работы, для боевых проектов лучше использовать собсвтенные наработки.
Сейчас у меня уже сформировался дизайн собственного фреймворка, началось все с того, что два файла кочевали у меня из проекта в проект это
db.php – подключение к базе, позже туда добавились две основный функции работы с базой “q” (выполнить запрос) и “r” (получить данные)
func.php – рабочие функции, а именно
-dod($unixtime) время между датами со склонениями числительных
-pager($sql) функция генерации “пагинатора” который анализируя sql запрос на его основе выдает постраничную навигацию
-me($txt) функция делает данные “безопастными”, ну там кавычки и прочее.
-sendmail отправка html сообщения на почту
-getsitebyid($id) получить пользователя по id
-balance_change($user,$summ,$descr,) изменить баланс пользователя с сохранением лога транзакции (незаменима для проектов пропускающих бабки)
-cache($src,$w,$h) выдает уменьшенную картинку заданного размера, правильно закешированную
-getk,setv функции для работы с key-value хранилищем, проще говоря кэширование
-declination склонение числительных
Остальные функции дописываются и удаляются, но эти используются почти всегда.
Структура базы данных так же практически всегда одинаковая, есть одна основная таблица users с полями id,email,fio,pass,datareg,balance
Если работаем с баблом то еще обязательно transactions
Так как большинство моих проектов коммерческие, цикл их следующий:
1. прототип + одновременно работа дизайнера
2. завершение прототипа + верстка дизайна
3. натягивание верстки
4. плотное тестирование
5. запуск
6. отладка и оптимизация
Далее если проект по фрилансу ищется начинающий php’ник для поддержки и мелких улучшений. Спасибо, что мой фреймворк очень прост и не нужно читать 2000 страниц документации, чтоб что то исправить.
Стоимость фреймворка $10 000, шучу. Не спешно ищется сильный менеджер, для доведения продукта до коробочной версии, пиара и зарабатывания миллионов.
PS: Я в