Уже 3-й день играюсь с Symfony. Впечатления сугубо положительные, за исключением одного - скорости работы. По сравнению с CodeIgniter‘ом со включенной в autoload’е базой данных Symfony где-то в 5-6 раз медленнее.
На чем сравнивал
Hardware: Athlon XP 2500+, 512 RAMSoftware: Ubuntu Linux 7.10 Desktop, Apache 2.2.4, ab 2.0.40-dev, PHP 5.2.3, MySQL 5.0.45, Symfony 1.0.10, CodeIgniter 1.5.4
Database Table:
CREATE TABLE IF NOT EXISTS `post` ( `id` int(11) NOT NULL auto_increment, `title` varchar(128) NOT NULL, `slug` varchar(64) NOT NULL, `body` text NOT NULL, `created_at` datetime default NULL, `updated_at` datetime default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Symfony: создавалась таблица из yml-файла, для неё генерировалась модель (Doctrine), для таблицы генерировалась админка. Для теста использовал product environment, страничку с показом всех записей в таблице:
CodeIgniter: использовался стандартный Scaffolding (никаких дополнительных моделей не делалось - использовал “голый” класс работы с бд). Страничка была выбрана такая же, как и в случае с Symfony - список записей.
Command Line:
ab -n 200 -c 10 <адрес>
Результаты
В общем-то всё предсказуемо - CodeIgniter выиграл:
- CI: 32-36 request/sec
- Symfony with Doctrine: 6-7 request/sec
- Symfony with Propel 1.2: ~9 request/sec
- Symfony with Propel 1.3: 9-10 request/sec
Если честно, думал, что разница будет больше… Т.к. если добавить в CI всякие проверки, навесить дополнительные компоненты - скорость упадет до ~20-25 запросов в секунду, но до уровня функциональности Symfony ему всё равно будет очень далеко. Да и удобнее пользоваться Symfony - автоматические CRUD и админка очень удобные и привыкаешь к ним очень быстро… Аж отвыкать не хочется. :)
PS. В работе пользоваться Doctrine’ой намного удобнее, чем Propel’ом…
Общие впечатления
Теперь немного впечатлений о Symfony в общем…
Навороченная… На первых порах вообще удивляешься как все эти парсеры, кучи файлов и обьемные ORM’ы не ложат сервак нафиг. После прочтения книги о ней становиться понятнее, что и как (я еще не дочитал, кстати). Нужно, кстати, попробовать будет APC поставить… Какой от него прирост будет, интересно.
ORM’ы - самые крутые из всех, что я видел на PHP. Doctrine’ой пользоваться - вообще сказка.
На первых порах теряешься в тонне файлов проекта… Потом постепенно начинаешь привыкать. Причем теряешься не в конфиг-файлах (которых, к слову, действительно очень много), а во View’хах и Controller’ах (может это только я такой…).
При использовании Doctrine приходится учитывать что всякие туториалы типа этого нифига не работают. Особенно расстроила разница в соглашениях в авто CRUD’е (в Propel автоCRUD генерирует поля с именами <имя поля из таблицы>, а в Doctrine - <название таблицы>[<имя поля из таблицы>]), и передавать во вьюхи и контроллеры приходиться немного другие параметры (в вобщем, naming convention соблюдается только в пределах одного вида ORM). Хотя, кстати, взаимозаменяемость ORM’ов и не предполагалась, так что это я, возможно, придираюсь. :)
А вообще, несмотря на мелкие недостатки для меня, впечатления весьма и весьма положительные… Нравится мне Symfony. Очень нравится.







January 7th, 2008 at 12:48
Ну вот именно по этой причине, как правило, всегда и говорят что если и проводить тестирование сравнительное - то в боевых условиях, а не на простейших страничках. Ещё вроде нигде не видел сравнения фреймворков, где был бы реализован на них реальный рабочий, хоть и простой, сайт…. 8( Да это и понятно - временныз и трудозатрат было бы прилично, зато результат был бы намного более объективным… 8-)
January 7th, 2008 at 13:12
Ну мне тратить пару дней на создание проектов неохота. :)
January 16th, 2008 at 10:44
Во, кстати. Есть книжечка - “The Definitive Guide to symfony” от Apress надо?
January 16th, 2008 at 10:47
Она и в онлайне есть. Вот тут. Я её как раз сейчас читаю.
January 16th, 2008 at 10:50
не знал..у меня в pdf если что
January 29th, 2008 at 21:00
Привет!
Ребят, а вы не пробовали Prado 3.1.1?
У меня есть опыт работы на Prado 3.xx на реальных проектах(6) - довольно больших и сейчас почти сделали 2 на Symfony 1.0 .
Могу сказать, что Prado более стабильный framework. Как мне показалось комьюнити там более отзывчевое. На форуме Прадо на вопросы отвечают core разработчики. На ирке от symfony большей частью общался с людьми такими же как я … только познающими симфони и с меньшим опытом, как я понял.
Что не понравилось в Symfony:
- низкое качество плагинов. Народ пишет на скорую руку выкладывает, ты думаешь всё чики-пики, а оказывается что его ещё надо дорабатывать. В частности, это коснулось sfSmartyView & sfPropel13. У первого была левая интеграфия с компонентами и мылом. Так что пришлось дорабатывать его для того что бы компоненты и пашелы (подкючаемые шаблоны) работали как надо. С мылом тоже весело было, оказалось что в симвони ~1.0.6 название mailview класса забито наглухо (читай хардкод). Пришлось создавать кое-где извращённый способ наследования и кое-где сделать хаки во фреймвёрке для нормальной работы. С Пропилом 1.3 оказалось, что у него или у плагина проблемы с датами, он их не правильно распознавал, т.е. типы дат (один из типов или DATETIME || TIMESTAMP не хотел ни в какую работать), после определённого времени проведённого за изучением кода Пропила оказалось, что в нём проблема. Всё завелось … потом обновились до последнего снапшота с свн. Баги с датами вроде исчезли, но перестала генериться схема и какая-то ошибка с null - делолтным значением начала выскакивать. Нашли место, подправили. Заработало!
- хуже продуманная архитектура чем в Прадо. Опять та же проблема с подменой вью слоя
- были ещё мелкие проблемы с автозаполнителем форм sfFillInFilter который. Но они тоже решаемы….
- Уровень компонентов не дотягивает до нормального автономного использования. В частности, не продуманности с айдишниками компонентов (который вообще нет похоже) и как сдедствие составив компонент содержащий несколько, надо писать специально код, что бы обратиться ко вложенным компонентам. Возможно я избаловано Прадо …. :) В 1.1 версии решили отказаться от идеи хелперов в симфони и ввели виджеты, может там ситуация улучшеться …. посмотрим релиз похоже не за горами….
+ для symfony:
- Очень богатые возможности по расширению: plugins, filters, components, slots, component slots, partials … Понравилась идея плагинов как автономной части приложения … в прадо такого нет, а хотелось бы …
- Интересно сделана валидация … возникают трудности с автоматизацией вывода ошибок. Может правда я чего-то не понял … но хелперы form_error надоедало писать на больших формах. А так валидация в файлах понравилась.
- Конечно же генераторы …. слизанные как мне кажется с Rails.
- Система интернационализации позаимствованная из Прадо.
- Возможность подмены View & Model слоёв обеспечиваемая MVC - архитектурой.
В принципе фреймвёрк не плохой … но надо привыкнуть к стилю. Посоветовал бы его для проектов которые тебуют больших возможностей по интеграции с подменой слоём приложения. Или разработчикам которые только переходят от php\html\smarty приложений к системам all-in-one.
Относительно прадо могу сказать, что если вы знаете патерны, И ООП, то проблем не будет, если же вы с этим всем не очень хорошо знакомы, то могут возникнуть проблемы с пониманием что и откуда берётся и как все эти компоненты устроены в Прадо.
Но продуманность архитектуры Прадо и полнота реализованных в нём решений и Контролов думаю не оставит вас равнодушным! Прадо подойтёт тем кто знаком с событийно-ориентированным программированием, кто работал с настольными системами MFC например или Delphi, ASP.NET большенству остальных (php\html программистам) придётся вложить много сил в понимание концепций и решений. К слову заметить из-за большой иерархии классов и хорошей структурированности фреймвёрка он работает довольно медленно, но системами многоуровневого кеширования и оптимизацией вашего кода можно вывести работу приложения на приличный уровень - проверено.
January 29th, 2008 at 22:50
Прадо я смотрел давно довольно. Слизан с ASP.NET целиком и полностью. Если нравиться программить в терминах контролов - ваше право. Мне обычный MVC ближе, и контролы я свои создам, если мне нужно будет, сам.
Насчет вьюх в симфони - не знаю, меня обычный PHP в качестве View-слоя устраивает целиком и полностью. Насчет Model - найди мне реализации Model-слоя лучше, чем в Propel/Doctrine на PHP. Не найдешь - нет таких. Есть быстрее, но продуманней нет. А если уж нужнен полный контроль - то никакой ORM не подойдет в принципе.
хуже продуманная архитектура чем в Прадо
Чем в ASP.NET, ты имел ввиду? :) Я не изучал прадо и сравнивать не могу. Могу сказать, что архитектурные решения в симфони отнюдь не на последнем месте. :) Лучше я видел лишь в ZF.
Интересно сделана валидация
Валидация форм в Symfony 1.1 гораздо лучше. И вообще вся работа с формами. Только не закончен этот момент еще, на мой взгляд.
А у тебя, по-моему, какая-то нездоровая любовь к прадо. :) Будь обьективнее. ;)
January 29th, 2008 at 23:32
Это не любовь, объективный опыт и симпатия … Потому как действительно удобно, использовать то, что уже имеется, а не создавать одно и то же по 10 раз. Ruby например обладает кучей разноуровневых классов и интерфейсов к ним. Почему его все так любят? Потому что можно взять и использовать. Та же разница между Symfony & Prado если нужны оригинальные архитектурные решения, то вам к Symfony, а если вам ваять Enterprise систему на PHP (потому что заказчки его предпочёл Java решению), то на мой взгляд лучше прадо не найдёшь. Так как кол-во потраченного времени на создание своих контролов или компонентов и их тестирование несоизмеримо увеличит рамки проекта с тем же решением на Prado. Где контролы оттестированы почти на 99,9%.
А вообще правду говорят, надо средство выбирать под задачу, а не то что знаем на том и лабаем. К слову упомяну о Picora для супер маленьких проектов и PHPOpenBiz для быстрого создания интерфейсов к БД и доступа к табличным данным. Посмотрите, если будет время эти 2 довольно интересных решения.
January 29th, 2008 at 23:42
для супер маленьких проектов я рекоммендую Frog Framework. Просто отличный фреймворк! :)
January 29th, 2008 at 23:44
Спасибо …. до этого ещё не добирался. Буду рад ознакомиться! :)
January 30th, 2008 at 00:05
да уж много фреймворков хороших и разных выбирай на вкус :)
насчёт продуманности действительно ZF Рулит.