Jan 05

Уже 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, страничку с показом всех записей в таблице:

Symfony

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. Очень нравится.

written by fxposter \\ tags: , ,


11 Responses to “Немного о Symfony”

  1. 1. ACID Jesus Says:

    Ну вот именно по этой причине, как правило, всегда и говорят что если и проводить тестирование сравнительное – то в боевых условиях, а не на простейших страничках. Ещё вроде нигде не видел сравнения фреймворков, где был бы реализован на них реальный рабочий, хоть и простой, сайт…. 8( Да это и понятно – временныз и трудозатрат было бы прилично, зато результат был бы намного более объективным… 8-)

  2. 2. FX Poster Says:

    Ну мне тратить пару дней на создание проектов неохота. :)

  3. 3. mihailt Says:

    Во, кстати. Есть книжечка – “The Definitive Guide to symfony” от Apress надо?

  4. 4. FX Poster Says:

    Она и в онлайне есть. Вот тут. Я её как раз сейчас читаю.

  5. 5. mihailt Says:

    не знал..у меня в pdf если что

  6. 6. Zeke Fast Says:

    Привет!

    Ребят, а вы не пробовали 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 программистам) придётся вложить много сил в понимание концепций и решений. К слову заметить из-за большой иерархии классов и хорошей структурированности фреймвёрка он работает довольно медленно, но системами многоуровневого кеширования и оптимизацией вашего кода можно вывести работу приложения на приличный уровень – проверено.

  7. 7. FX Poster Says:

    Прадо я смотрел давно довольно. Слизан с ASP.NET целиком и полностью. Если нравиться программить в терминах контролов – ваше право. Мне обычный MVC ближе, и контролы я свои создам, если мне нужно будет, сам.

    Насчет вьюх в симфони – не знаю, меня обычный PHP в качестве View-слоя устраивает целиком и полностью. Насчет Model – найди мне реализации Model-слоя лучше, чем в Propel/Doctrine на PHP. Не найдешь – нет таких. Есть быстрее, но продуманней нет. А если уж нужнен полный контроль – то никакой ORM не подойдет в принципе.

    хуже продуманная архитектура чем в Прадо
    Чем в ASP.NET, ты имел ввиду? :) Я не изучал прадо и сравнивать не могу. Могу сказать, что архитектурные решения в симфони отнюдь не на последнем месте. :) Лучше я видел лишь в ZF.

    Интересно сделана валидация
    Валидация форм в Symfony 1.1 гораздо лучше. И вообще вся работа с формами. Только не закончен этот момент еще, на мой взгляд.

    А у тебя, по-моему, какая-то нездоровая любовь к прадо. :) Будь обьективнее. ;)

  8. 8. Zeke Fast Says:

    Это не любовь, объективный опыт и симпатия … Потому как действительно удобно, использовать то, что уже имеется, а не создавать одно и то же по 10 раз. Ruby например обладает кучей разноуровневых классов и интерфейсов к ним. Почему его все так любят? Потому что можно взять и использовать. Та же разница между Symfony & Prado если нужны оригинальные архитектурные решения, то вам к Symfony, а если вам ваять Enterprise систему на PHP (потому что заказчки его предпочёл Java решению), то на мой взгляд лучше прадо не найдёшь. Так как кол-во потраченного времени на создание своих контролов или компонентов и их тестирование несоизмеримо увеличит рамки проекта с тем же решением на Prado. Где контролы оттестированы почти на 99,9%.

    А вообще правду говорят, надо средство выбирать под задачу, а не то что знаем на том и лабаем. К слову упомяну о Picora для супер маленьких проектов и PHPOpenBiz для быстрого создания интерфейсов к БД и доступа к табличным данным. Посмотрите, если будет время эти 2 довольно интересных решения.

  9. 9. FX Poster Says:

    для супер маленьких проектов я рекоммендую Frog Framework. Просто отличный фреймворк! :)

  10. 10. Zeke Fast Says:

    Спасибо …. до этого ещё не добирался. Буду рад ознакомиться! :)

  11. 11. mihailt Says:

    да уж много фреймворков хороших и разных выбирай на вкус :)
    насчёт продуманности действительно ZF Рулит.

Leave a Reply