| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > Польза от фреймворков |
| Автор: MyDarkSide 8.10.2009, 15:26 |
| Из практики возник такой вопрос. К примеру нужно закодировать на PHP+MySQL сложный нестандартный посещаемый проект типа социальной сети и или пошаговой стратегии и т.п. Имеет ли смысл использовать готовые фреймворки типа ZF или CakePHP (и все остальные до кучи) ? С одной стороны они дают выигрышь во времени разработки, при условиях, что задачу можно впихнуть в предлагаемую фреймворком парадигму и что все разработчиик достаточно хорошо с ним знакомы. А вот с точки зрения производительности и нагрузки на сервер ? Естественно, что код написаный под конкретную задачу лучше фреймворка с этой точки зрения, но может быть так только кажется ? |
| Автор: SamDark 8.10.2009, 16:23 |
| MyDarkSide, Есть. — Без фреймворка трудно работать в команде. — Документация уже написана. — Код оттестирован миллионами разработчиков. — При грамотном использовании кеша проблем на стороне сервера с производительностью нет. |
| Автор: brother79 9.10.2009, 06:08 |
| Ещё забыл добавить, что не надо заниматься велосипедостроением, т.к. например та же работа с mysql построенна на моделях, в тех фреймворках, в которых я работал, т.о. если будешь писать сам, полюбому при достаточно сложном проекте в голову лезут мысли организовать что-то типа этих моделей, а зачем этим заниматься - когда всё давно уже сделанно. Ну и остальные моменты - тоже также, просто я про модели заговорил, т.к. в своё время нечно подобное разрабатывал на билдере, а когда увидел фреймворк - сильно удивился, что всё давно готово для php и не надо этот велосипед изобретать. Если писать самому - то придётся делать что-то типа фреймворка, только подсебя, иначе сложный проект не построишь. |
| Автор: nerezus 9.10.2009, 09:29 | ||||
+ Не нужно изобретать велосипеды. + Не нужно изобретать Каркас приложения. + +скорость разработки. + +количество приобретенных ПРАКТИЧЕСКИХ навыков за единицу времени.
|
| Автор: SamDark 9.10.2009, 11:15 |
| MyDarkSide, 1. CakePHP (в особенности 1.1) — не очень удачный пример. 2. MVC можно применить к 90% задач под веб. ZF вообще ничего не предлагает. Он даёт средства. Один мой товарищ сделал на ZF event-driven модель с модулями. 3. Что такое «тяжёлые» модели и контроллеры? 4. Пара-тройка велосипедов, ZF, CakePHP, CodeIgniter, Yii, Drupal. Понравились: Yii, Drupal, CodeIgniter. ZF только как набор библиотек. CakePHP не понравился. Сейчас остановился на Yii. Также пробовал Kohana, Symfony, Limb, Django, но плотно с ними не работал. |
| Автор: brother79 9.10.2009, 11:50 |
| Мы осстановились на Symfony, правда я пока 1.2 и 1.3 плотно не изучал, и пишу на 1.0, ибо ограничения на хотстинге у нас по версии пхп. Меня всё устраивает, вплодь до того, что иногда возникает чувство, что не я похожую модель реализовывал, а они все мои мысли слизали |
| Автор: MyDarkSide 9.10.2009, 16:16 |
может быть не правильно назвал, где большая часть кода размещается. По производительности в инете хвалят CodeIgniter и Kohana |
| Автор: nerezus 9.10.2009, 16:55 |
| MyDarkSide, большая часть кода размещается нигде. Код равномерно распределен. |
| Автор: SamDark 9.10.2009, 17:23 |
| MyDarkSide, http://www.yiiframework.com/performance Производительность особо ни на что не влияет. PHP вместе с фреймворком редко бывает узким местом. |
| Автор: Parovoz33 22.10.2009, 01:26 |
| Мне тоже кажется что производительность мало зависит от фреймворка и PHP. Производительность сервера зависит от железа и рук программиста. Но! Мое мнение все же такое, некоторые так увлекаются ООП и фреймворками, что создаются некоторые сложности. Когда с одного проекта на другой переходишь очень сложно врубиться. Да и просто когда классов становится под сотню, то просто путаешься, где что и как. Фреймворк хорош тем, что поставляет каркас. Остальное все - это уже дело вкуса, можно найти много готовых решений на все случаи жизни в самых разных репозитариях на просторах интернета, и даже совместно их использовать. |
| Автор: LeoK 30.10.2009, 12:05 |
| имхо в больших проектах узкой частью в фреймворках являются ORM, заставляющие манипулировать БД как объектами языка, а не sql запросами. в последствии, при гориз. масштабировании (шарды,прокси) приходится извращаться и получается каша зы ничего лучше sql для sql нету, orm - это для маленьких (опять же имхо) |
| Автор: brother79 30.10.2009, 12:13 | ||
Ничего не мешает руками прописать, то, что сложно городить предоставляемыми ср-вами. Например то же условие, если простые комбинации городяться легко ср-вами фреймворка, то когда надо что-то сложное построить - пишу custom и руками условие. |
| Автор: Parovoz33 1.11.2009, 23:35 |
| В некоторых командах на некоторых проектах бывают жесткие требования - только ORM. Что хошь то и делай. |
| Автор: brother79 2.11.2009, 06:06 | ||
Ну если это административные правила так сказать, то коммандой и решать что делать, а если сам фреймворк - то даже не знаю, он на то и фреймворк, чтобы была свобода в действиях, но не изобретать велосипед, те, в которых я работал - имели классы, т.е. тот же селект, сначала вызывался коасс, тот вызывал метод, который поэтавпо сначала делал сам селект а потом фетчил, в любом месте этого процесса всегда можно было вмешаться и переписать какой-то этап, если надо что-то специфическое сделать. |
| Автор: MyDarkSide 2.11.2009, 13:52 |
| да ORM доставляет проблем, количество запросов увеличивается на порядок а SQL есть SQL, он и разрабатывался как язык для работы со множествами |
| Автор: LeoK 2.11.2009, 17:18 | ||
мне всетаки кажется, что создавать подобную "смесь" не стоит... предпочитаю работать напрямую с бд зы но конечно через минимальную прослойку |
| Автор: OXYGENE 2.11.2009, 20:06 |
| Бесспорно выгода в использовании FW есть, прежде всего это уже хорошо известная(команде) архитектура, документация... если что, то можно подпилить если не устраивает что то, но обязательно задокументировав это. Если использую фреймворк то, стараюсь делать классы как можно независимыми от самого фреймвёрка (или хотябы чтоб в дальнейшем делать как можно меньше изменений), для того чтобы их можно было использовать в других проектах или даже в других фреймворках. |
| Автор: MyDarkSide 3.11.2009, 11:04 | ||
как то это странно |
| Автор: solenko 3.11.2009, 11:28 | ||
Ну хоть бы написали почему вам так "кажется" ) А то можно подумать, что "не читал, но осуждаю" |
| Автор: LeoK 3.11.2009, 11:43 | ||
ну хотябы потому, что в случае смешанного использования orm и sql собственно теряется сам смысл использования orm. если у нас есть механизм работы с бд, то, имхо, он должен быть один... что если мы например пытаемся встроиться в "прослойку" с бд? например раскидать запросы проксиком с одного сервака на несколько? в случае описанном brother79 придется во первых встраиваться в класс, во вторых перепиысвать custom запросы... если же механизм прослойки один и он минимален, т.е. банальный $db->query($sql), то менять придётся в одном месте и у нас остается один единый интерфейс к бд. в идеале нужно предусматривать в orm логику, позволяющую вследствии использовать к примеру горизонтальное масштабирование, что не так то просто... ввиду сложности как таковой самой orm + еще механизм масштабирования, который в хайлоад проектах может иметь достаточно сложную организацию. |
| Автор: solenko 3.11.2009, 12:48 | ||||||
А кто говорит о смешанном использовании? Что мешает писать кастомные методы с кастомными запросами (в идеале построенными через конструктор ORM) с кастомным маппингом на объекты? Масштабирование обычно реализуется именно средствами СУБД. Клиент (php) просто понятия не имеет с какой именно ноды пришли данные.
В любом случае, после работы всех ORM все сводится к выполнению запроса. И выполняется он всегда в одном месте. И изменить логику в этом месте не проблемма (если уж сильно прижало, что маловероятно)
В чем сложность кроме сложности самой ORM? Как-то "сложность ORM" очень слабый аргумент, т.к.: 1. Масштабирование в них предусмотрено "из коробки" 2. Напильник никто не отменял. И, если уж вы придумали нестандартных алгоритм масштабирования -- допилите. |
| Автор: LeoK 3.11.2009, 13:03 | ||
| solenko, не думаю, что стоит поднимать холивар на тему orm vs sql Ответьте мне всего лишь на один вопрос - какой смысл городить "решающуювсезадачи" надстройку над sql? преобразовывая объекты в запросы а потом обратно? Думаю, это просто усложняет логику. База есть база, и лучше чем sql еще ничего не придумали... Добавлено через 3 минуты и 55 секунд это задача настолько уникальная для каждого проекта, что общие решения просто идут лесом
это идеальный случай... ЭФФЕКТИВНОЕ (!!!) бесконечное гориз. масштабирование невозможно без вмешательства в код!.. опять таки повторюсь, что это очень специфично для каждого проекта |
| Автор: nerezus 3.11.2009, 13:13 | ||||
А вот БЕСКОНЕЧНОЕ гориз. масштабирование - это идеализированный случай ) |
| Автор: OXYGENE 3.11.2009, 22:16 |
| MyDarkSide, |
| Автор: Alexm6 4.11.2009, 14:21 |
| 1. без фреймворка действительно сложно работать команде в случаях нехватки опыта, отсутствия опыта работы конкретной группы разработчиков , неопытном ПМе, неграмотном тех задании\ проектной документации. если вся команда неопытна, можно завалить любой проект 2. если речь идет о личном сайте Васи Пупкина, его "мегапартале" для друзей, сайта для продажи слонов и т.д. фреймворки экономят массу времени, но сами разработчики ничему не учатся, т.к. любой фреймворк ограничивает возможности для ускорения разработки ( варианты с переписыванием кусков ядра не рассматриваются, последующий апдейт ядра не должен добавлять N часов работы программисту, просто чтобы сайт работал). 3. при разработке больших сайтов фреймворк ускоряет получение беты, дает возможность быстро показать клиенту что-то готовое. Но как правило, все переписывается при первой оптимизации, т.к. в фреймворках упор делается на функциональность, а не на скорость работы скриптов 4. можно и нужно изобретать велосипеды, это процесс обучения. И пусть говорят что 1000 разработчиков отладило код фрейморка, появится 1001 и найдет в том же коде фатальный баг, 1000 обезьян могут ошибаться и как правило ошибаются. Необходимо четко знать возможности платформы, требования клиентов и так же предполагаемой нагрузки на систему. В 50% случаев хватает уже готовых модулей для друпала\кейка, еще в 40% можно что-то в них допилить. оставшиеся 10% это узкая сфера, где фреймворки\цмс не приживаются, т.к. задачи очень нестандартные и сложно вписываются в рамки любого написанного софта |
| Автор: brother79 4.11.2009, 19:52 | ||
Я не спорю, на своих ошибках учиться можно, только есть поговорка про то, кто и н чьих ошибках учится. Это я к слову нужности изобретания велосипеда. |
| Автор: SamDark 4.11.2009, 20:40 | ||
Ещё раз упомяну, что скорость работы большинства PHP фреймворков узким местом не является. |
| Автор: Alexm6 5.11.2009, 12:33 | ||||||
если не является, то скорее:
много трафа на сайт не только радость =) у Васи никогда не будет столько уников в онлайне чтобы нагрузить сервер или понадобился ровно работающий кластер серверов я не хочу сказать что фреймворк плохо, но топик стартер спросил
да, грузит немного серв имхо |
| Автор: solenko 5.11.2009, 12:58 | ||
Угу. А Yahoo answers мегапортал для друзей Джерри Янга ) |
| Автор: Alexm6 5.11.2009, 13:37 |
| ну что-ж за примеры )) а однокласники это тот-же соцэнжин... только соцэнжин убивает сервер при 1000 - 1500 юзверях в онлайне . У яху много денег, они соберут 500 серверов, наймут инженеров которые будут под фреймворк кластер затачивать, если этого требует задача. надо разумно использовать ресурсы, смотреть на поставленную задачу, если задача предполагает высокие нагрузки - цмс\фреймворки не следует рассматривать как окончательную судьбу сайта, возможно есть более быстрые решения о которых разработчик просто не знает |
| Автор: SamDark 5.11.2009, 13:51 |
| Alexm6, Да всё там нормально с фреймворками (не со всеми, конечно, но с большинством). Накладной расход на генерацию не так высок. Время загрузки страницы чаще всего выходит в десятки раз больше её генерации из за пренебрежения клиентской оптимизацией. Переход с apache на nginx/php-fpm даёт приличный прирост в количестве одновременно обслуживаемых клиентов. А введение грамотного кеша вообще списывает все мнимые плюсы работы без фреймворка на нет. |
| Автор: nerezus 5.11.2009, 13:53 | ||
Фреймвор с никакими libastral не работает, он делает только то, что нужно. Вопрос: на каком основании вы говорите, что он тормозит, если он не выполняет лишних действий? |
| Автор: Alexm6 5.11.2009, 14:40 | ||||
На основании того, что линейный код будет быстрее работать чем фреймворк. Фреймворк создан чтобы облегчить разработку\понимание системы, за счет производительности. В нем есть масса кода который нужен только для функциональности ядра или для удобства, это не может не сказываться на производительности. Потери не очень велики при малом количестве запуска кода, ведь не жаль тратить серверные ресурсы ради ускорения разработки в 2 и более раз , но ситуация меняется если количество запусков кода велико, и даже десятая % разгрузки процессора\памяти, это уже неплохо. Изменения кода ядра фреймворка - палка в двух концах, с одно стороны удобно, можно под задачу переписать, сделать более компактным и быстрым. Но в случае обновления фреймворка разработчиками, багфиксах, фиксах безопасности , придется делать изменения в своем коде, сталкиваться с несовместимостью своего кода с новым билдом. Если время много и сайт только 1 то может показаться что проблемы нет, а если сайтов много и в каждом используется своя модификация ( для увеличения производительности под каждую из задач ), то апдейт и переход на новую версию становится очень болезненным.
К примеру авторизация, её не впихнуть в кеш, придется работать кодом скриптов при каждом обращении, если при данном телодвижении надо дернуть 50-100кб библиотек фреймворка ? или быстрее будет без лишних оберток\классов сделать это ? Да, есть акселераторы, которые прекомпилят скрипт. Вопрос в обьме памяти, количестве лишних внутренних вызовов, операций и ифов в конечном исполняемом коде, чем больше, тем медленнее я кэп очевидность ? ) |
| Автор: SamDark 5.11.2009, 15:17 | ||||
| Alexm6, Разработчики дороже железа. Хорошие разработчики много дороже железа. Изменение кода ядра фреймворка — это самоубийство. Если фреймворк без изменений в ядре нельзя подстроить под себя — это плохой фреймворк.
При использовании APC/XCache не столь критично.
Сделать это будет быстрее с фреймворком. Работать немного быстрее естественно будет лапшекод с формой и её обработчиком в одном файле. То, что у любого фреймворка есть накладные расходы — это понятно. Но в более-менее сложных приложениях код самого приложения (написанный при помощи фреймворка или без него) выполняется много дольше, чем инициализируется фреймворк и отрабатывают его части. Поэтому, например, та же оптимизация работы с базой путём введения кеша даёт куда больший результат, чем переписывание кода без фреймворка. http://ru.wikipedia.org/wiki/Закон_Парето |
| Автор: nerezus 5.11.2009, 15:36 | ||||||||||
Что мешает использовать фреймворк "линейно"(кроме отсутствия знания фреймворка, конечно же)?
Если же этого не будет, то вы потеряете часть функционала, который нужен(иначе вы бы просто не использовали данные части фреймворка). Итак, я рассмотрел оба варианта(будет/не будет), в обоих случаях ваш подход проиграл.
Допустим за месяц методом спичечных оптимизаций он получит 1-10% прироста. Допустим сервер стоит 15-30у.е. И он даст 100% прироста. Считаем и делаем выводы. |
| Автор: Alexm6 5.11.2009, 16:03 | ||||||||
Затраты на парсинг не 0, ничего не делается с нулевыми затратами ресурсов Ваше высказывание очень противоречит логичному :
Говорил о том что этого не будет, о том чтобы не совершать действий которые не нужны для работы
Нормальный сервер стоит 300-500 и более убитых енотов за мес, девелопер дороже, но если серверов в связке несколько десятков накладно выходит, прирост в 10%, даст возможность не ставить лишний сервер, экономим под 5к в год ээм, я там делал цитату с пунктом про Васю и его сайты, хост за 15 баксов это для него, а не для нагруженной системы |
| Автор: SamDark 5.11.2009, 16:43 | ||||||||||
Alexm6,
При работе opcode cache они стремятся к нулю.
Естественно медленнее. Тут вопрос не в медленнее-быстрее, а в том, насколько медленнее и существенно ли это.
т.е. вы считаете, что нужно писать всё в 1 файл, совмещая получение и отображение данных?
За 1000$ можно взять очень приличные железки и за 40$/мес., если не меньше, разместить их в нормальном ДЦ.
Нормальный разработчик, который может писать приложения под высокие нагрузки стоит от 1000$ до 3000$ в месяц. Переписывать проект без фреймворка придётся не менее, чем пару месяцев. Эту пару месяцев заказчик будет терять от 960$ до 2960$ в месяц. Эти деньги можно было бы пустить на покупку серверов, которые увеличат производительность не на 10%, а как минимум на 30—40% (при грамотном проектировании, конечно). В долгосрочной перспективе у нас тоже получится не очень красиво: своего кода без фреймворка больше и его надо документировать. Это дополнительная работа и замедление общего темпа. |
| Автор: nerezus 5.11.2009, 17:16 | ||||||||
Вас под дулом пистолета же не заставляют ;)
Может быть, но где-то на просторах Сибири?) |
| Автор: SamDark 5.11.2009, 17:57 |
| nerezus, Ну почему сразу на просторах Сибири? Это нормальная нижняя планка, например, для Воронежа. Не все же в пределах МКАД-а |
| Автор: nerezus 5.11.2009, 18:06 |
| SamDark, а зачем специалисту работать за такие деньги в оффлайне, когда в сети можно достать в разы больше? И, тем более, на каких проектах? |
| Автор: SamDark 5.11.2009, 18:42 |
| nerezus, Это уже оффтоп будет. Но могу сказать точно, что работают. Могу рассказать почему в ICQ/Jabber/MSN/PM |
| Автор: Simpliest 5.11.2009, 21:22 |
Лапшу он под этим понимает. Развернутые циклы, минимум условий и вызовов функций.... все в линию. Да, памяти скушаем чуток больше (раз эдак в 10ть), но выполняться будет код быстрее примерно на целых!!! 5-15%. Я с таким столкнулся в 95м у матери. В одном из банков девушка-программист создала отчет на FoxPro. Порядка пары тысяч строк в таком стиле. В общем... тяжко это все. Когда потребовалось добавить новое поле.... Пообещали сделать не раньше чем через месяц. Мать, не зная языка, села и сделала с нуля весь отчет за 3 дня. Уместился он в 5ть строк и форму сделанную в генераторе отчетов. |
| Автор: Severyanin 3.3.2010, 10:56 |
| Alexm6, я, пожалуй, внесу свои 5 копеек. Оптимизация кода - это все, конечно, хорошо. Но здесь уже обоснованно говорили, что для большого проекта( как я понимаю, здесь обсуждаются большие системы корпоративного уровня) очень много из фреймворка тебе придется писать руками. А теперь вопрос - будет ли тебе за это платить заказчик, который покупает твое время и заинтересован в скорейшем появлении результата, так как это часть его бизнеса и часто достаточно существенная? Или он просто пошлет тебя подальше и купит более мощный хостинг? Насколько я знаю, заказчики обычно делают какой-то портал или систему под новый бизнес, который открывают. Следовательно, задержка разработки ведет к задержке ввода на рынок некого нового продукта/услуги, которую предоставляет заказчик, и косвенные убытки от такой задержки могут на порядок превосходить затраты на железо. |
| Автор: brother79 14.5.2010, 08:24 | ||
Открою страшную тайну, но без фреймворка - руками писать придётся ещё больше |
| Автор: Severyanin 10.6.2010, 17:28 |
| brother79, мы друг друга не поняли))) Я наоборот пытался сказать, что фреймворк сделает решение задачи быстрее) Мож не так выразился) |
| Автор: Тигер 23.10.2010, 15:54 |
| Инструментом пользуються когда это необходимо тогда и польза будет |
| Автор: kolorimage 9.12.2010, 21:07 |
| С фреймворком на много много быстрее.. |
| Автор: Muerto 30.1.2011, 01:29 |
| Польза однозначно есть Но понимаешь это не сразу, ибо первый серьёзный проект берет как правило в 3 раза больше времени чем на своем велосипеде |
| Автор: KLeonid 22.3.2011, 03:06 | ||
Muerto, рекомендую попробовать symfony framework, из всех существующих под PHP мне он больше всего понравился. Использую и очень доволен. То, что раньше делалось на PHP4, в рамках готовой системы, в течении недели, на симфони делается за 1-3 дня.
Все это есть, плюс удобный форм-фреймворк и ORM(propel, doctrine). Въехать в него сложновато, особенно без знаний ООП, но после освоения, назад к чистому PHP уже никогда не захочется. А мысли о работе с крупными проектами на чистом PHP, будут вызывать приступы несварения желудка |
| Автор: SneG0K 22.3.2011, 05:45 | ||
вроде кто-то отстаивал обратное мнение |
| Автор: Muerto 26.3.2011, 00:41 | ||||
Мнение дело такое - меняется от нужд и опыта... Ещё один уровень абстрацкии эт однозначно на любитела... Но если человек не любит шаблонизаторы - эт ошибка... Сам "не любил" - потому что не понимал всю прелесть... А теперь без Haanga и от части Smarty не на шагу =-) Очень облегчают жизнь, создавая общий язык , упрощая код, и экономя время |
| Автор: KLeonid 29.3.2011, 02:01 | ||
Это не "на любителя", это необходимость, продиктованная сложностью и объемностью некоторых проектов, где писать все с нуля - это непозволительная роскошь. Достаточно представить себе, например, написание инет-магазина. С нуля возьмется не каждая программерская контора, и стоить это будет не дешево. Все равно в итоге придется писать свой фреймворк для работы с кучей мелочей, типа куков, заголовков, генерацией, валидацией и обработкой форм, управление шаблонами, работа с БД и т.д... И это придется делать, иначе система будет "неуправляемая" (разработчик если не откажется поддерживать ее, то попросит за это немалые деньги А есть уверенность, в том, что фреймворк, написанный своей, вряд ли очень большой, командой, будет лучше фреймворка, написанного бОльшей командой и отлаженной на протяжении нескольких лет с помощью немалого сообщества его использующего? Естественно, времени на изучение фреймворка уйдет намного меньше, чем на его написание. Не лучше ли использовать это время более рационально? Ведь на рынке выиграет тот, кто за меньшие сроки, а значит и деньги, сможет предоставить готовый продукт, полностью покрытый тестами, код которого сможет поддерживать и развивать любой программер, работающий с тем же (открытым)фреймворком. Естественно, на хомепагах и трехстраничных-карпаративных-сайтах-визитках всего этого не нужно |
| Автор: Sentox 1.5.2011, 22:56 |
| А неее, я рву зубы руками, зачем мне инструменты |
| Автор: phpmas 21.5.2011, 00:17 |
| польза: простота доработки сайта |
| Автор: spbnvb 14.7.2011, 18:41 |
| Про ORM: Пробовал в java, ещё долго просыпался в холодном поту, и через несколько секунд приходило облегчение, что смог таки отказаться от проекта, ничего не потерять и это позади. Пробовал в 1С Предприятие 8:0 - на удивление всё элегантно, продумано, отлажено. Душа поет!!! Побольше бы таких инструментариев. PHP - стыдно батенька, но ещё не пробовал. Вот почитал вас, буду искать, с чего начать. Кстати, в процессе создания сайтов разработал свой движок, который успешно использую уже третий год, не жалуюсь. Но хочу таки посмотреть, что попридумывали более серьёзные разработчики. Мне понравилось название "Kohana" Кохана - любимая. |
| Автор: alekseyroot1 15.6.2012, 22:36 | ||
Полностью согласен, особенно про работу в команде (иногда такого понапишут что не разберешь) |