В виду некоторых обстоятельств (пока не буду говорить, каких) полностью перейти на Python + Django и забить на PHP не получается. В связи с этим вопрос - какой из PHP-фреймворков выбрать для изучения и последующего использования.
Кандидаты:
- Zend Framework - в принципе, если его основательно помучать, то за пару недель-месяц из него можно сделать неплохой каркас для быстрой разработки сайтов. Преимущества - красивый код, продуманность в архитектуре, гибкость (хотя во многих случаях она и не нужна). Недостатки - относительно медленный, нет всякой “помощи” разработчикам (типа скаффолдинга и прочего), нет реализации ActiveRecord.
- CodeIgniter - хороший, простой, и, самое главное, быстрый фреймворк. По скорости обгоняет все остальные (вчера был тест ZF/CakePHP/CI на линуксе с помощью ab - CI выиграл, причем с ощутимым отрывом). Есть скаффолдинг, есть куча плагинов, некоторые - достаточно интересные (в частности, rapyd).
- CakePHP - у этого фреймворка куча поклонников, много материалов по использованию и рабочих приложений. В недостатки можно записать жесткую тормознутость - он чуть ли не в 1,5-2 раза тормознее ZF (интересно, с чего бы это?).
- Советовали еще Limb, Solar, но пока их не смотрел. Еще что-нибудь предложите?
PS. Пока что склоняюсь к CI…
One Ping to “Выбор PHP фреймворка”
67 Responses to “Выбор PHP фреймворка”
-
1. mihailt Says:
December 18th, 2007 at 20:32Посмотри
Kohana - основанный на CI.
Если дружишь с pear то Solar может понравится, правда пока альфа.
Если нужно что-то совсем легковесное то frog фреймворк подойдёт. ;) -
2. FX Poster Says:
December 18th, 2007 at 20:35Нужно то, чем я буду пользоваться и не испытывать больших проблем.
-
3. Sam Says:
December 18th, 2007 at 20:36#1. Я тоже думал, что если его помучать, можно что-то вымучать… Возможно оно и можно, но:
1. Мучать придётся кучу либ, а не разрабатывающийся проект. Это надолго. У меня за пару месяцев не вышло (мучал конечно в свободное время).
2. ZF будет постоянно ставить палки и мешать мучению.
#2. CodeIgniter. Штука занятная. Работает быстро. Мануал покрывает 80% возможностей. Код ядра - лапша ещё та… Если что сбойнёт - не разберёшься просто так. rapyd штука довольно бажная…
#3. Cake. Не сказал бы, что тормознутый. Особенно если юзать кэш и вовремя откусывать ассоциации у моделей. Минус - есть довольно стабильная в работе пре-бэта 1.2. Всё время тянет на неё перейти (я уже). Но на неё нет внятной документации (у 1.1 с этим делом всё отлично).
p.s. тестирование проводилось без кэширования на “hello, world!”? Кстати, cake в дефолтном отладочном режиме работает на порядок медленней, чем в продуктивном.
-
4. FX Poster Says:
December 18th, 2007 at 20:45Кстати, cake в дефолтном отладочном режиме работает на порядок медленней, чем в продуктивном.
А чем они отличаются? :))) Если по манам судить - ничем кроме расположения директорий. :-DТестил на кейке 1.2. Кеширование вырублено. Дока по 1.2 есть тут.
-
5. FX Poster Says:
December 18th, 2007 at 20:53Гм. Щас запустил тесты на 1.2 vs 1.1. Оба кейка - out-of-box.
CakePHP 1.1: 21 запрос в секунду
CakePHP 1.1: 11 запросов в секунду -
6. FX Poster Says:
December 18th, 2007 at 21:00Кстати, установка debug в разные значения принципиально картины не меняет. В CakePHP при DEBUG == 0 - 21 запрос/сек, при DEBUG == 2 - 20 запрос/сек.
-
7. Sam Says:
December 18th, 2007 at 21:05Я не про это. Есть режим отладки, есть продуктивный. Это к папочкам никак не относится.
app/config/core.php
Configure::write(’debug’, 0);p.s. Это не дока, а наброски.
-
8. Sam Says:
December 18th, 2007 at 21:08Так всё-таки на “hello, world!” тестирование было? ;)
-
9. FX Poster Says:
December 18th, 2007 at 21:12Configure::write(’debug’, 0);
см. выше. практически не роляет.Это не дока, а наброски.
А разница?Так всё-таки на “hello, world!” тестирование было?
Да, статическая страница размером 1.3кб. -
10. Sam Says:
December 18th, 2007 at 21:28Нашёл на чём тестировать :)
-
11. FX Poster Says:
December 18th, 2007 at 21:31Разница видна невооруженным глазом даже на таком примере. Что еще нужно-то?
-
12. Sam Says:
December 18th, 2007 at 21:37:)
Потестируй на чём-нибудь более реальном: пара связанных моделей, одна вьюшка, пара-тройка выборок. Хотя бы так.
-
13. mihailt Says:
December 18th, 2007 at 23:09У меня основной это фреймворк это CI, зенд встроить не проблема ( а куда его встроить проблема? ), да и сам CI куда угодно встраивать можно, плюс достаточно быстрый а в связке с memcached так вобще летает, с ораклом правда у него не всё в порядке и ещё минус не очень он с ajax’ом дружит.
Насчёт rapyd - сначала тоже нравилось, но глюков там как сказал Sam действительно много. ;)
Теперь про Kohanu( хотя упоминал уже) - ребята переработали CI и заточили его под пхп5 получилось очень хорошо,плюс постовляется в двух видах -minimal и standard набор минус доки мало, хотя там понятно всё в основном. :)
CakePHP - ну, не знаю я, но почему-то я его очень не люблю
ZF - как раз пару дней назад начал каркас делать, ну не выглядит что скоро всё будет и если чего-то быстро надо, то с тем же CI всё гораздо быстрее, хотя вещи на ZF точно делать можно взять хотя бы magento :)
-
14. FX Poster Says:
December 18th, 2007 at 23:28Magento - жесткая штука. Пример того, сколько нужно написать, чтобы сделать хорошее приложение. А понаписано там… Дай боже…
Kohana (кстати, по украински “кохана” - любимая ;)) - по скорости проигрывает CI. ;) А вообще - попробую, и наверно на нем и останусь. Совместимость с PHP4 мне нафиг не нужна.
-
15. FX Poster Says:
December 18th, 2007 at 23:30Кстати, насчет Framework.php от Frog’а - тем же CI и CakePHP поучиться бы у него, как нужно делать ActiveRecord.
-
16. mihailt Says:
December 18th, 2007 at 23:48дык я ещё в первом комменте про него сказал ;)
-
17. crash Says:
December 19th, 2007 at 00:43А symfony почему выбросил? Да, у него Propel надо менять на Doctrine, но зато админка часто очень помогает с мозгоимением такой рутинной задачи :)
У Limb ORM неплох, но все только-только начинается. -
18. FX Poster Says:
December 19th, 2007 at 00:48Доктрина только с виду хороша…
Создай в ней запись. Создай экземпляр записи, не присваивая записи никаких значений (типа, пустая запись). И сделай записи save. ;)По доктриновской логике запись сохранится, только в бд она не добавится. А по идее - тут должен быть Exception.
-
19. FX Poster Says:
December 19th, 2007 at 00:49Над симфони я думал… Нужно будет попробовать как-нить.
PS. А чем пропел-то не нравится? Yaml - прикольная штучка ;)
-
20. crash Says:
December 19th, 2007 at 00:58Ну после джанго писать запросы с Criteria - полнейший пиздец. Ну и YAML хз, к нему немного привыкнуть надо. И ситуация похожа на твою - хочется работать полностью на джанго, но некоторые обстоятельства требуют пхп :(
-
21. FX Poster Says:
December 19th, 2007 at 01:07Да вот так и живём…
А Yaml, кстати, очень даже популярен в ruby и rails ;) -
22. Sam Says:
December 19th, 2007 at 13:14На ror тут ориентироваться не стоит особо. Особенно если ror не нравится :)
Наиболее близки к ror сейчас CakePHP 1.2 и PHPonTrax.
-
23. Nikita Says:
December 19th, 2007 at 13:34CodeIgniter выигрывает в скорости отчасти из-за отсутствия собственного парсера структур типа YAML, а так же темплейтов. Только PHP. Active Record почти ничем не отличается от запросов MySQL, только на PHP основе. Имхо, этот фреймворк подойдёт тем, кто не хочет сильно заморачиваться с YAML, дополнительным синтаксисом шаблонов в View и т.п. Для новичков в framework’ах — идеально. Для больших проектов — не знаю.
Symfony — комбайн. Но тормоз.
ROR неплохая штука, но тоже тормоз. Плюс надо учить новый синтаксис.
-
24. FX Poster Says:
December 19th, 2007 at 14:06Sam
Я никогда не говорил, что мне ROR не нравится.
А по поводу симфони - ты на это погляди. Мне охрененно понравилось.Nikita
Эх… Все твердят - тормоз, тормоз. А в каких приложениях это проявилось? Разницы между рендерингом страницы за 0.2 секунды или за 0.01 - для конечного пользователя нет. Браузер эту страницу будет отображать ой как дольше. -
25. mihailt Says:
December 19th, 2007 at 14:13Насчет темплейтов в CI - они там хоть и хиленькие но есть ;)
-
26. Nikita Says:
December 19th, 2007 at 14:16FX Poster, с большой нагрузкой нужно больше мощного железа.
mihailt, в CI темплейты есть, но данные вставляются простым PHP. Нет лишнего синтаксиса для меток которые потом обрабатываются парсером. Соответственно скорость обработки меньше.
-
27. FX Poster Says:
December 19th, 2007 at 14:23Nikita
Нет лишнего синтаксиса для меток которые потом обрабатываются парсером.
На самом деле есть. Догадайся, как работает <?= в CI с отключенными short_open_tags.с большой нагрузкой нужно больше мощного железа.
Ну и что? CI быстр, согласен. Но мне вот интересно, есть ли такие приложения в вебе, которые бы на Symfony ложили сервер, а переписанные на CI - нормально работали бы. Я сильно сомневаюсь в том, что такие приложения вообще существуют.
Те же тесты на ab - это обычная “писькомерялка”. Если проект неоправданно тормозит - нужно искать баги/рефакторить код. А сравнение фреймворков по сути не дает ничего - в реальных приложениях разница будет малозаметной. -
28. Sam Says:
December 19th, 2007 at 14:26Скринкаст вообще по Propel :) Symfony там как-то сбоку. Propel - да. Вещь. Но немного заморочно с ней на shared-хостинге.
-
29. Nikita Says:
December 19th, 2007 at 14:29На самом деле есть. Догадайся, как работает <?= в CI с отключенными short_open_tags.
А что, работает? А я не знал ))
Ну, в принципе, ты прав. Если писать серьёзное приложение то нужно расчитывать нагрузку в соответствии с используемым софтом.
-
30. crash Says:
December 19th, 2007 at 14:39>Скринкаст вообще по Propel :) Symfony там как-то >сбоку. Propel - да. Вещь. Но немного заморочно с >ней на shared-хостинге
эм, генератор админки разве входит в поставку propel? :)
Но то что с админкой не надо писать запросы через Criteria - это да, большой плюс :) -
31. FX Poster Says:
December 19th, 2007 at 14:39Sam
А типа в симфони больше ничего нет, кроме propel? :) Вообще говоря, разница в подходах симфони и того же кейка впечатляет - в симфони всё сделано более продумано и профессионально. Тот же Doctrine в симфони подключается на ура через плагин. Сегодня пробовал.В симфони вообще применяется подход “тише едешь - дальше будешь”. Т.е. учишь долго - программишь потом быстро.
Nikita
Ага, работает. ;) Так что что-то он там все же делает. Что именно - не разбирался особо. -
32. mihailt Says:
December 19th, 2007 at 15:08Ага, работает. ;) Так что что-то он там все же делает. Что именно - не разбирался особо.
Да собственно не особо много:
if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE){
echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents($path))).'<?php ');
}
-
33. Sam Says:
December 19th, 2007 at 15:25FX Poster, а нафига тебе этот недоделанный AR Doctrine, когда есть нормальный ORM Propel?
В Symfony много всего интересного. Но блин тяжеловесно очень…
-
34. bewhite Says:
December 19th, 2007 at 18:55На CI заканчиваю второй проект. Работать можно. Не понравилась примитивность Active Record (по сравнению с RoR). Понравилось простота в установке и эксплуатации. Обязательно изучать плугины: сильно облегчают жизнь.
Symfony не понравился своей монументальностью. Здоровенные структуры каталогов густо посыпанные по всей площади конфигурационыыми файлами раздражают. Хотя для монструозных проектов может быть и оправдано.
Из портов RoR на PHP могу посоветовать глянуть на PHPonTrax и Akelos.
Ну а RoR - это RoR. Не холивар же здесь начинать :)
-
35. bewhite Says:
December 19th, 2007 at 18:58Кстати CI скаффолдинг в продакшене не советуют использовать даже авторы фреймворка.
-
36. FX Poster Says:
December 19th, 2007 at 19:02Ты погляди скринкаст симфони выше в комментах. Это вам не простой скаффолдинг. ;)
А вообще, имхо, с симфони можно добится очень быстрой разработки проектов. Вот только учить и пробовать его прийдется долго.
-
37. Sam Says:
December 19th, 2007 at 19:03Хе… доктрину чуть доделали… не заметил.
-
38. Sam Says:
December 19th, 2007 at 19:0870% проектов небольшие. Скорее всего их быстрее будет сделать на CI, Kohana или Frog…
-
39. FX Poster Says:
December 19th, 2007 at 19:10Ну тут как знать. Я считаю, что работа с симфоней в любом случае лишней не будет. ;)
-
40. Alex Says:
December 23rd, 2007 at 08:23Кто-нибудь рассматривал-тестировал-использует Prado Framework? Какое впечатление? Интересны отзывы об этом фрейворке.
http://www.pradosoft.com -
41. FX Poster Says:
December 23rd, 2007 at 14:06Я смотрел, правда давно и очень поверхностно. Тогда показался вполне нормальным. Но копать глубже не стал.
-
42. ACID Jesus Says:
December 24th, 2007 at 14:58К CI приделываем Smarty, вставляем ZF в качестве third-party компонентов - получаем в итоге быстрый , удобный и достаточно лёгкий для освоения фреймворк, который может подойти не только для небольших проектов, но и для вполне крупных… ;)
-
43. FX Poster Says:
December 24th, 2007 at 22:23Если честно, Model в CI мне не нравится.
-
44. mihailt Says:
December 25th, 2007 at 18:14хмм.. а чем именно??
-
45. FX Poster Says:
December 25th, 2007 at 21:28Как ни странно, но логикой. :) Хочется красивый ActiveRecord, а получаем фиг знает что.
Ведь что собой ActiveRecord представляет - класс, обьекты которого полностью представляют из себя записи таблицы - их можно сохранять, на них навешиваются валидаторы и прочее. И набор методов, которые бы возвращали обьекты этого класса. В PHP-фреймворках это есть разве что в симфони.
-
46. FX Poster Says:
December 25th, 2007 at 21:29Вру, в cakephp есть, но тоже как-то… Неправильно…
-
47. Andrey Says:
December 25th, 2007 at 22:39В Symfony тоже убогий ORM(Propel, Doctrine). А вообще многим надо от FW, тока адекватную модель, а всё остальное ставится на 2-ой план.
-
48. FX Poster Says:
December 25th, 2007 at 22:43Покажи, где убогость. ;) Что Propel, что Doctrine - лучшие из тех, что я видел ORM’ы на PHP.
-
49. Andrey Says:
December 25th, 2007 at 23:21PDO в качестве DBAL, всё же накладывает некие ограничения(поддержка хостерами, PDO не может учитывать реализацию конкретного драйвера, к Oracle например и т.д.).
Отношения 1 к 1, я так и не увидел.
к примеру в Propel отношения сделаны вообще убого….
Выбор драйвера всё же должен быть доступен разработчику… -
50. FX Poster Says:
December 25th, 2007 at 23:27Андрюх, ну обсуждали ж уже. :) PDO поддерживается большинством нормальных хостеров.
PDO не может учитывать реализацию конкретного драйвера
В смысле?Отношения 1 к 1, я так и не увидел.
Может быть. Не смотрел. В Doctrine есть.к примеру в Propel отношения сделаны вообще убого….
Аргументируй? Имхо - вполне даже ничего. Вчера игрался с симфоней - всё там норм.Выбор драйвера всё же должен быть доступен разработчику…
Он доступен. Но только через PDO. :) -
51. FX Poster Says:
December 25th, 2007 at 23:29Почитай, кстати. Достаточно интересно. Проблема в том, что рассказывать, какие они хорошие, они умеют. А вот удобства я от Limb’а по сравнению с Symfony не увидел.
-
52. Andrey Says:
December 25th, 2007 at 23:49Посмотри oci_*, намного больше функционала чем в PDO_OCI…
да вроде в PDO нет mysqli драйвера((((
Many-to-Many Relationships in Propel вот 1+n запросов мне и не нравится….P.S. вот LImb, мне ближе по структуре, чем Symfony!
-
53. FX Poster Says:
December 26th, 2007 at 00:25Ну, для начала - ты реализуй DBAL, чтобы абсолютно все возможности каждого драйвера были задействованы. ;)
Many-to-Many Relationships in Propel вот 1+n запросов мне и не нравится
Тут двояко можно рассматривать. Для начала 1+n запросов могут быть не намного медленнее, чем 1, но очень большой:SELECT book.*, reader.* FROM book LEFT JOIN book_reader_ref ON(book_reader_ref.book_id = book.id) LEFT JOIN reader ON(reader.reader_id = book_reader_ref.reader_id)БД тоже нужно время, чтобы это всё обработать. Это раз. И два - А если тебе join’ить не нужно будет, то что, тоже всё выбирать?
-
54. Andrey Says:
December 26th, 2007 at 00:55Ну, для начала - ты реализуй DBAL, чтобы абсолютно все возможности каждого драйвера были задействованы.
планирую на конец января, но поддержка Oracle будет наврятли )))
Тут двояко можно рассматривать. Для начала 1+n запросов могут быть не намного медленнее, чем 1, но очень большой
не буду спорить, просто опять же нету выбора((((
+ IN() тут разве не пойдет? -
55. FX Poster Says:
December 26th, 2007 at 01:05планирую на конец января, но поддержка Oracle будет наврятли )))
Если реализовывать все возможности каждого драйвера - про легкую смену баз данных можно забыть.IN() тут разве не пойдет?
SELECT reader.* FROM book_reader_ref LEFT JOIN reader ON(reader.reader_id = book_reader_ref.reader_id) WHERE book_reader_ref.book_id IN(<тут список book.id>)Можно, но первый вариант более гибкий.
-
56. mihailt Says:
December 26th, 2007 at 01:23кстати есть такая штука как junction ( http://www.junctionphp.com) достаточно легко интегрируется в любой проект
-
57. FX Poster Says:
December 26th, 2007 at 01:32Документации нормальной нет? :(
-
58. FX Poster Says:
December 26th, 2007 at 01:41Да и чем она лучше Propel’а и Doctrine’ы?
-
59. Sam Says:
December 26th, 2007 at 12:55Junction в дремучей бэте.
-
60. mihailt Says:
December 26th, 2007 at 15:46доки у неё немного в странные, но почитав wiki
всё быстро становится ясно.установка на мой взгляд очень простая да и работает довльно шустро
beta - это факт, но при этом работает стабильно
-
61. Zeke Fast Says:
January 30th, 2008 at 07:1445. FX Poster
В PHP-фреймворках это есть разве что в симфони.Посмотри Prado - замечательная реализация AR, выполняющая возложенные на неё задачи! Не больше ни меньше. С Propel её сравнивать без смысла ориентация у неё другая. Propel претендует на глобальную замену запросам, AR в Prado представляет же альтернативу маленьким и простым запросам к бд. В Prado для монстрообразных запросов есть SQLMap.
52. Andrey
P.S. вот LImb, мне ближе по структуре, чем Symfony!Ознакомься с Prado они очень похоже, как я понял. Оба WACT подобные темплейты используют если мне не изменяет память ….
-
62. FX Poster Says:
January 30th, 2008 at 22:47Нет, Limb больше на симфонию похож как раз. :) Только гораздо менее доделанный, ИМХО.
-
63. Sam Says:
January 31st, 2008 at 19:54Но сами Limb-овцы утверждают обратное… :)
-
64. Tamerlan Says:
February 28th, 2008 at 23:20А как вы тестите скорость работы?
-
65. FX Poster Says:
February 29th, 2008 at 00:07Apache Benchmark
-
66. Yevgeniy Says:
June 25th, 2008 at 14:06Seagull PHP Framework, особенно для тех кто “очень” дружит с pear ;)
-
67. FX Poster Says:
June 27th, 2008 at 02:52Спасибо, я уже выбрал Symfony. :)






April 3rd, 2008 at 19:15
[...] Продолжение, а самое главное камменты читаем тут [...]