Защо CakePHP е едно ниво пред Kohana и CodeIgniter

cake-logoКакто добре знаете съм голям почитател на CodeIgniter и по-конкретно на един негов форк наречен Kohana. Като цяло много ми харесва идеята и на двата фреймуорка, като основното нещо, заради което преминах към Kohana PHP Framework беше, че нещата около CI се движат доста бавно, до като коханци не си поплюват.

Наскоро излезе новата версия на Kohana 3 (макар и в бета все още) и аз имах големи надежди, че нещата там ще са се подобрили драстично. До някаква степен очакванията ми се покриха, Kohana е доста по-бърза, почти целия код е пренаписан и в общи линии всичко изглежда доста по розово. Но с новата версия се появиха и проблемите. Нещата писани на версия различна от третата не могат да бъдат използвани с новата версия на фреймуорка. Което практически означава, че ако желя да използвам новите фиичъри на фреймуорка трябва да пренаписвам всички наши проекти. Ммм… нямам време за такива неща. Преди имах, но сега нещата седят по доста по-различен начин.

Реших да дам шанс на CakePHP, колкото и да бях претрупан с работа, успях да отеделя малко време поне да го попрегледам и да си направя бързи изводи дали ще ми свърши по-добра работа или не. И преди съм се ровил в Cake, но не чак толкова задълбочено. Отговорът на въпроса обаче е, че framework-а ми върши повече от перфектна работа.

И какво толкова му е по-доброто?

Скорост на писане и изпълнение

Нещата в CakePHP стават доста по бързичко. Според бенчмарка, който си организирах тази нощ CakePHP  изпълни задачата си два почти пъти по-бързо от по-лекия от Kohana – CodeIgniter. Това, което срещнах в Интернет като бенчмаркове, потвърждават напълно мнението ми.

За писането на код, CakePHP разполага с много много много много добър CRUD генератор, нещо за което одавна си мечтая. Намерих подобен за CodeIgniter, но той е все още в beta (мисля, че от няколко години) и практически не се развива по никакъв начин, да не говорим и че не работи както трябва.

CakePHP – 1
CI, Kohana – 0

Перфектната документация на CodeIgniter VS The Cookbook

Както всички сте запознати, CodeIgniter се слави с перфектна документация. И това наистина е така.  Това с което CakePHP отвръща на удара е The Cookbook. В общи линии, слабо организирана документация, която е доста неудобна за четене. Ако човек търси нещо, ще го намери доста по-трудно. Това с което CakePHP разполага е две перфектни книги, които спокойно може да си купите от Amazon. Те са добри както за начинаещи, така и за напреднали. На мен ми помогнаха страшно много. Но въпреки всичко CodeIgniter User Guide, който между другото ще пусна скоро на български, е доста по-добър, ако искате да направите справка за определена библиотека или функция.

CakePHP – 1
Ci, Kohana – 1

The Bakery VS…. хм?

Уникалната идея на CakePHP за създаването на The Bakery, което практически е изключително полезно, поне според мен трудно намира алтернатива в другите два фреймуорка. В общи линии The Bakery съдържа Case Studies, Tutorials, Code Snippets, Best Practices. Изключително яко! Обществото на Cake е доста будно и се старае да обновява и да помага с каквото може.

CakePHP – 2
Ci, Kohana – 1

Навлизане в фреймуорка

За да се запозная с CodeIgniter ми отне около половин час. За разлика от CI обаче CakePHP е малко по-специфичен и може би ще ви е необходимо доста повече време, но ако сте запознат с накъвто и да е MVC фреймуорк, не би трябвало да е повече от ден. Но ако тепърва си избирате framework и нямате идея що е туй животно MVC и да речем обекто ориентираните концепции не са ви от най-приятните времето за навлизане, съвсем теориетично би било подобно:

  1. CodeIgniter – 12 часа
  2. CakePHP – 48 часа
  3. Kohana – 56 часа, като абсолютен минимум, поради вехтата документация

Естествено това е само претполагаемо време, няма как да кажа с точност :) Но съотношението би било подобно. Така че тук трябва да дам едно плюсче на CodeIgniter отбора :)

CakePHP – 2
Ci, Kohana – 2

Object-relational mapping, ActiveRecord

Абсолютния победител тук е… Ruby On Rails :D Но от сравненията, които правя CakePHP има по-добра основа от останалите. Макар и Kohana да разполага с ORM (във версия 3 като модул) и актив рекод, според мен не е на достатъчно добро ниво от колкото е това в Cake.

CakePHP – 3
Ci, Kohana – 2

Autoloading

Нещата с автоматичното зареждане седят по доста различен начин. CakePHP зарежда по-голямата част от нещата автоматично за определения контролер в който се намира потребителя в дадения момент, до като CodeIgniter дава възможност да се зареждат определени модели или библиотеки глобално, т.е. да ги ползвате навсякъде, което както сами се сещате отежнява нещата, макар и в определени ситуации е полезно. Смятам, че CakePHP е по-добър в този случай, защото в повечето случаи заредените неща ще ви трябват, а всичко допълнително може да добавите. Ако щете най-малкото прави кода по-четим а скоростта на изпълнение по-добра.

CakePHP – 4
Ci, Kohana – 2

Благинки

От своя страна CI и Kohana разполагат с доста повече хелпъри и библиотеки, които са готови да бъдат използвани. Kohana разполага и с така желания Multilang Module, нещо което няма алтернатива в CakePHP (или поне аз не намерих). Но пък CakePHP има Ajax поддръжка. Нещата не са на кантар, за мен победител тук е CodeIgniter.

CakePHP – 4
Ci, Kohana – 3

Известни сайтове ползващи фреймуорка

Не знам дали този критерии ще се понрави на повече от вас, но все пак е някаква база за сравнение. Най-популярните сайтове, които са базирани на CakePHP са:

На фона на гореспоменатите CodeIgniter не може да се похвали с такова име. Но ExpressionEngine 2.0 ще бъде базиран на CodeIgniter, което определено ще е голям плюс и ще могат да се видят много best practices. Но до тогава Cake остава лидер.

CakePHP – 5
Ci, Kohana – 3

Заключение

Заключението, което мога да направя е, че и трите фреймурока имат своите преимущества. Зависи за какво ще ги използвате. Аз лично смятам да съсредоточа силите си върху CakePHP и Kohana. CodeIgniter не притежава нищо повече от другите два и за съжаление става практически неизползваем. За по-мащабните проекти със сигурност бих заложил на Kohana, защото в него се чувствам доста по-комфортно и съм по на ясно какво става в ядрото и как се изпълняват различните процедури, като цяло и синтаксисът ми харесава повече. Но за по-малките и средни проекти CakePHP, които няма да бъдат чупени често, е много по-добро решение най-вече заради CRUD генератора си. Но остава проблема, ако направите сериозни промени в базата данни, налага се да пренаписвате нещата, до като фреймуорци като Symfony са организирани по доста по-добър начин и промените не се отразяват толкова много.

Сравненията, които съм направил са мои лични критерии и ще се съглася, ако някой ги оспори или предложи нови критерии за сравнение, обещавам че ще ги включа напълно обективно :)

Прочетете още:

  1. Предмиствата на CakePHP или защо се влюбих в него
  2. Не лошата алтернатива Kohana
  3. No Input File Specified! – Kohana


Дискусия

  1. Nik 8 октомври 2009

    Comment Arrow

    Аз кодя на CakePHP от началото на 2007 ето нещата които забелязах:

    1. Моделите в контолер се зареждат с
    var $uses = array(‘Model1′, ‘Model2′) и т.н. като ако зададеш $uses трябва да включиш и default модела на контролера на първо място (иначе не се включва, това за първото място е защото в индекса функцията ще прецака модела).

    2. Ако сложиш app_controller.php файл в ~root~/app/ (взет от ~root~/cake/libs/controller/app_controller.php) може да си зареждаш модели, компоненти и да пишеш функции, които ще са видими във всички контролери (те екстендват AppController). Подобно е и с app_model.

    3. Multilang може би имаш предвид превод на статичните текстове. Ако е така, превод се прави с функцията __(). CakePHP ползва .po translations. И ако имаш повече от 1 език в приложението, кейка детектва автоматично езика от браузера. Ако ползваш __() после има парсер в конзолата, който ти събира всички стрингове в един или повече файлове (виж i18n опцията в cake console, или погледни в CakeBook – търси Internationalization).

    Надявам се да съм бил полезен.

    ОтговорОтговор

  2. admin 8 октомври 2009

    Comment Arrow

    @Nik: Благодаря ти за допълнението към темата и съветите.

    В Кохана мултиланга се изпълнява посредсвом клас, който прави нещата много тегави, а самите преводи се пъхат в масиви, доста е неудобно в сравнение с да речем решението на ZF, което позволява елементарна гъвкавост. Практически мултиланг модула, прави елементарно задаване на двубуквен стринг преди контролера и оввърайдва някой функции за да работят както трябва, освен това прави същото, което както казваш ти прави Cake да детектва езика на браузъра, създава кукита с последно избрания език и го детектва в при следваща визита на потребителя. Като цяло интернационализайшъна и мултиланг модула са две благинки, които спестяват време, но не са нищо притенциозно или сложно, просто хубав фиичър, който идва на готово :)

    Не знам как стоят нещата с __() но силно се надявам да са доста по-добре от мудното решение на Кохана.

    ОтговорОтговор

  3. Наско 25 януари 2010

    Comment Arrow

    За съжаление в края на 2009 г. Mozilla Addons взеха решение да заменят CakePHP с Django. Това беше разочароваща новина за общността около CakePHP, като се има предвид, че Mozilla Addons беше един от най-големите и натоварени сайтове, ползващи Cake.

    Ето тук момчетата от AMO споменават някои от аргументите си за това решение: AMO Development Changes in 2010

    ОтговорОтговор

  4. Nik 25 януари 2010

    Comment Arrow

    Бях го чул това, но не бях го чел. Значи знаеше се, че този сайт е написан на CakePHP1.1 който е толкова outdated, че просто няма нужда да се споменава.

    В коментарите се вижда, че просто хората имат програмисти на Django и просто ще им е по-лесно да го поддържат.

    ОтговорОтговор

Публикувай коментар (dofollow)

  • Author Avatar

    ТИ :)