Framework-ците ми от 2007ма

от IvanK

Кой framework е най-добър? Мисля че в нета има почти толкоз мнения по темата, колкото например за war on terror . Та викам и аз като един прилежен конформист, да си кажа думата.

Не е като да съм пробвал и тествал много от тях, но не са и чак толкова малко.

CakePHP – това е “готиния пич” във PHP средите. Като малък, много се е стремял да подражава на големия си брат rails, но като пораснал, решил да тръгне по свой собствен път и да гледа своите корестни интереси. Сегашната версия е 1.2, при това пре-бета, и да ви кажа честно, повече ми напомня на 0.6-7 – има доста неуточнени и незавършени неща, а да не говорим, че синтаксиса постоянно се променя. Иначе хората, които го пишат, са зверски талантливи пичове, но за жалост има още доста неща, които липсват (по-добри before-after филтри, нормален ORM, лесна ajax интеграция, REST, HTTP статуси, plugin система, image upload management). Ако това се беше появило една година по-рано, щяхме да гледам във физиономията на едно доста добро творение, сега, може да се използва с уговорки, hack-ове и ръчен труд (макар че в PHP средите това май си е норма – по-добре така, отколкото въобще без framework).
Добре де, ще питате, като не е толкоз добро или завършено, защо да се използва въобще? И отговора е, че това е може би единствения приличен framework, който може да се подкара на PHP4. Не оставайте с погрешно впечетление обаче – хич не е лоша, тя е от тия low-level неща, които са толкоз удобни, колкото сам си ги направиш. Ако си на ти с PHP и по-засуканите трикове с него, може да си направиш нещо доста добро, но определено не е идеално за бързо правене на малки-до-средни сайтове.

Symfony – много дълго време се странях от него, под предтекст че е от “големите, корпоративни, пре-премислени, супер тежки предприятия” и да ви кажа не съм бил чак толкоз далеч от истината. Докато CakePHP се старае да поправи PHP езика като цяло, добавяйки полезни и удобни функции (някои му викат bottom up programming) то Symfony-то, хваща големия чук, и въдворява ред java-style със дълги имена на функции, неудобни за писане класове и мноооого конфигурационни файлове. Но, тъй като на php-то му липсва елегантността на езици като ruby или python, то този подход май си е подходящ.
Тук сякаш всичко е правено от професионални php програмисти (от тия, с костюмите, вратовръзките и куфарчетата) – макар и да е леко неудобно, нещата просто си пасват и работят, при това учудващо добре. Но големия, мазен и лъскав коз на тоя framework, обаче, е автоматичният административен интерфейс. Кой ли не си е мечтал, като направи базите данни, просто да напише “generate admin” във командиня ред и хоп, да има пред очите си, работещ, готов за клиенти административен интерфейс. Е тука няма да получите това, но ще стигнете доста близо, най-близо от всички PHP framework-ци, за които се сещам. Трябваше бая ровичкане, докато го наглася да изглежда прилично, но хубавата новина е че след това може пак да си го използвате с минимални усилия за следващия сайт, при това с безбожно много възможности за конфигуриране и допълнително настройване (направо имах чувството че сглобявам лего). Да не говорим че има доста прилична i18n система out-of-the-box (Viva libertad de expresión!).

Rails – безпорно, най-елегантния от всички, но за-жалост е инструмент с твърде тясна ниша на използване – там, където наистина блести и сияе, е правенето на web application-и. Като тръгне човек да си прави един нормален сайт обаче, стига до извода, че има и по-добри алтернативи. Не, че е трудно, или дълго, напротив, просто нещата стават толкова лесно и просто, че човек неизбежно се отклонява от “практичната” страна на нещата и почва да си играе с неща като RESTful URL-та, ресурси, тестове, и тем подобни, които за прости сайтове въобще не са нужни. (Все пак rails e измислена за правенето на high-traffic, high-usercount, надежни интернет приложения – ала basecamp и цялата му енергия е насочена в тази посока). И идва проблема със разполагането на завършения продукт. Може би 70 процента от pain-а на rails приложенията е аджаба къде и как да го сложим, да баца – и независимо че са хвърлени супер много ресурси процеса да се улесни, остава тъжната истина, че на core team-а на rails не им пука особено за това, щото те, и всичките техни приятели, са си взели собствени сървъри и си хостват rails “както трябва” и иди обяснявай на някой защо аджаба трябва да плаща 20 долара на месец за сървър, след като tophost могат да ти дадат хостинг за 14 лева на година … (на който може да се подкара CakePHP btw). Ако правиш приложение, определено това е най-доброто, за нормален сайт – не чак толкова.

Django – още не съм имал честта да го тествам fullscale, но от това, което съм пробвал, останах с впечетлението, че е Symfony, направено както трябва (или по-скоро Symfony е жалък опит да се копира Django). На външен вид изглежда сякаш е светият граал на правенето на малки/средни/големи сайтове (не приложения) – “истински” автоматичен админ, не особено скъпи хостинги (по-делавера от rails), далеч по-лесно конфигуриране на сървъра, python – със внушителното му количество първокласни библиотеки (щом чак NASA го използват , значи има защо). Пък и цялата идея на framework-a е да се правят сайтове в нечовешки бързи срокове. (На една конференция , създателят споменва, че шефа им е искал да се направи глобален сайт за местните футбулни първенства в америка – за всеки щат – със класирания, страници на отборите, първенства, форуми, новини и всякакви други екстри … за 4 дена – ако това не е изродщина, то незнам кое е …)

Това е, което съм пробвал до момента. Още – догодина.

Коментари:10

  1. Хубав обзор! Аз съм ползвал кекса, симфонито нещо не ме израдва. . А колкото до “DJ Ango” – май не съм готов да почна питона, все още. Тамън научих как да сетъпвам рейлс сървъри…

  2. Ми аз съм разцъквал python-а преди ruby и да си кажа са почти същите, ако знаеш едното супер бързо научаваш другото. Пък и ruby-то има още бая до го гони откъм performance

  3. Евала, чичо. Хубава статийка си написал. :)

  4. IvanK, въобще не си прав ако си ползвал JRuby, YARV, който вече е в Ruby 1.9.

    Само ще кажа, че един и същ алгоритъм за намиране на редица на Фибоначи на Питон му отнема 47 секунди и 11 на Руби 1.9.

  5. Позна, не съм пробвал YARV, нито Rubinus(който май е по-обещаващ), все пак и двете още не са пуснати. Като излезнат, тогава може и да си променя мнението. Да не говорим че за python има сумати оптимизатори и JIT компилатори …

  6. YARV го има за Linux, пробвах го и къса глави със скороста си. YARV е ‘имплементиран’ в 1.9, което още няма официална production версия, но пък има версия и за Windows. Тук не става дума за оптимизатор, а за съвсем ново ядро на виртуалната машина на mri, която издухва JRuby. Според мен скороста на Rails по-скоро се губи при сървъра, но сега тествам Thin, базиран на библиотеките на Mongrel и се справя доста пъргаво.

    Поздрави.

  7. Докато някои се изпреварват кой по
    добър framework ще направи
    света ползва WordPress ;)

  8. От CakePHP по Убаво нема :)

  9. добра статия! благодаря!
    аз използвам CodeIgniter – http://www.codeigniter.com
    лек и бърз MVC framework за PHP, подробно документиран; изключително подходящ за малки и средни проекти, а защо не и за нещо по-голямо като ExpressionEngine 2.0, например ;)

  10. Аз по едно време ползвах CakePHP, но версиите преди 1.2 Стори ми се доста тежък. Та затова си спретнах мой фреймуърк като взаимствах разбира се от CakePHP…

Коментирай