CodeIgniter vs Laravel
CodeIgniter stoczył wielką i zażartą walkę ze swoim odwiecznym rywalem, który zarazem wywodzi się z niego samego, z Laravelem! Whoah! Masakra! I kto odniósł zwycięstwo? Kto?
Ano w tym poście będzie można o tym poczytać, zapraszam !
Zatem co z tą walką? Kto wygrał?
Nie żeby odbyła się jakaś prawdziwa walka czy jakieś szczególne wydarzenie, po prostu taki wstęp wybrałem do mojego porównania tych dwóch frameworków .
Trochę historii
CodeIgniter jest bardzo dojrzałym frameworkiem, dzięki czemu jest głęboko zakorzeniony w świadomości, ma długą historię, wielkie community oraz niebywałą stabilność. I jak wspomniałem, Laravel to framework który wywodzi się z CodeIgnitera albowiem Taylor Otwell (twórca Laravela) stworzył go na wzór CodeIgnitera zmieniając/ulepszając/usuwając/dodając to co uznał on za stosowne . I tak powstał drugi cudowny framework do PHP - Laravel.
Jak wiadomo wszystko ma swoje wady i zalety...
I nie inaczej jest z Laravelem oraz CodeIgniterem.
Oba frameworki są bardzo dobre, naprawdę solidne, porządne, świetne i piękne, cudowne. Ale również mają swoje minusy które mogą być mniej lub bardziej istotne. Na pewno są dużo mniej istotne niż zalety. Ponieważ prawie wszyscy decydują się na jakiś framework. Wady stają się równie ważne jak zalety w przypadku gdy dana osoba w ogóle rozważa czy korzystać z frameworka czy nie, wtedy wady grają już dużą rolę.
Bo oczywiście nic nie pobije w wydajności czegoś czystego !
Zatem wracajmy do porównania!
Jak myślisz? Który jest lepszy? Laravel czy CodeIgniter?
Wymienimy sobie zalety i wady obu a potem się nad tym zastanowimy ! Zrobimy to w formie przewagi jednego nad drugim w danych aspektach.
Zacznijmy od CodeIgnitera !
Przewaga CodeIgnitera nad Laravelem:
- Lepsza dokumentacja - CodeIgniter posiada zdecydowanie lepszą dokumentację. Akurat w tym przypadku najlepszą ze wszystkich frameworków. Dokumentacja to akurat domena tego frameworka.
- Jest Plug & Play - Laravel zdecydowanie taki nie jest, szczególnie że w osobnej paczce w łatwy i szybki sposób oficjalnie nawet go nie zdobędziesz. Tutaj nie ma tak łatwo!
- Jest Portable - I z tym nie do końca jest tak, że CodeIgniter jest a Laravel nie. Po prostu CodeIgniter jest "bardziej" portable. Łatwiej go przenieść, szybciej. Ma zdecydowanie mniej plików a rozmiar... bez komentarza .
- Query Builder - Akurat CodeIgniter z całą pewnością posiada lepszy, bardziej intuicyjny i przyjemny w użyciu Query Builder, a to naprawdę wbrew pozorom spora zaleta !
- Konfiguracja przez konwencje - Nie jest to jakoś mocno uderzające, ale jednak nie da się wykluczyć, że w przypadku Laravela proporcjonalnie kilka razy więcej ustawień trzeba konfigurować niż w przypadku CodeIgnitera. Dla wielu osób jest to dość znacząca przewaga.
- Szybkość - To niepodważalnie potężna przewaga, albowiem CodeIgniter jest kilkukrotnie szybszy od Laravela! Różnica jest przeogromna! Laravel nie należy do wydajnych frameworków. Ale nie do końca, oczywiście mowa tutaj o kategorii wagowej CodeIgnitera !
- Prostota - CodeIgniter jest o niebo prostszy. Większość ludzi którzy próbują nauczyć się Laravela na początku oraz przez dłuższy (czasem krótszy) czas są przytłoczeni, są totalnie zmiażdżeni Laravelem jako całością. To uczucie jest "overwhelming"! CodeIgniter to najprostszy framework do języka PHP, zdecydowanie !
- Zero Konfiguracji - Nie do końca, ale CodeIgniter spokojnie będzie działał bez jakiejkolwiek konfiguracji z twojej strony, ewentualnie 1-2 linie do zmiany, tyle!
- Wolność oraz Wsparcie - CodeIgniter jest frameworkiem modułowym, jest jak klocki lego, masz Wspomagacze i Sterowniki, używasz tego czego chcesz/potrzebujesz, korzystasz ze wszystkiego wedle uznania. Masz wolność a przy tym wielkie, potężne wsparcie ze strony tego frameworka !
- Całkowicie banalna aktualizacja - Bo czy może być prościej niż po prostu skopiować jeden cały folder i nadpisać wszystkie zmiany? No proszę... No prościej to już się nie da !
- Rozmiar - Laravel w minimalnej formie w momencie pisania tego artykułu ma rozmiar jakichś 80 MB... może nawet więcej. Podczas gdy CodeIgniter zajmuje tylko 2 MB w ogóle. Trzeba coś dodawać ?
- Mały - średni dystans - Lepszy na małe i średnie projekty. Szybciej wystartujesz, relatywnie szybko skończysz .
- Cache całych stron - Wielka przewaga, CodeIgniter ma bardzo szybki i potężny cache całych stron! Genialne się to sprawdza w praktyce i jest mega wydajne .
- Nie wkracza w twoje kompetencje - CodeIgniter nie robi czegoś co powinieneś zrobić ty. Oraz nie będzie naginał twoich wyborów pod własne konwencje i standardy. Laravel niestety ma do tego tendencję...
I to raczej byłoby na tyle . Teraz Laravel przejdzie do ofensywy ze swoimi przewagami !
Przewaga Laravela nad CodeIgniterem:
- Autoryzacja - Laravel posiada bardzo dobry system autoryzacji, zarówno za pomocą tzw. "policies" jak i "gates". CodeIgniter nie posiada żadnej autoryzacji co jest dość sporym bólem i brakiem. Laravel również zawiera świetny system autoryzacji dla Api - Laravel Passport.
- Autentykacja - CodeIgniter również nie posiada żadnego systemu uwierzytelniającego, natomiast ten Laravelowy jest świetny i również posiada takie funkcje jak zapamiętywanie logowania czy przypomnienie hasła. Autentykacja oraz autoryzacja z Laravelem to żaden problem !
- Active Record i ORM - Laravel posiada genialny, cudowny, przepiękny system ORM o nazwie "Eloquent". Cudo, cacko, coś cudownego. Zarządzanie modelami, bazą danych w Laravelu to zabawa i prostota ! A relacje - jakie by nie były - nie stanowią totalnie żadnego problemu!
- Testowanie aplikacji - Niebo a ziemia. CodeIgniter zawiera jedynie mały zalążek umożliwiający testowanie dzięki PHPUnit. Natomiast Laravel ma do tego własne klasy, Mocki, umożliwia testowanie HTTP, testowanie bazy danych, posiada obsługę transakcji, migracji, testy przeglądarkowe (Laravel Dusk)... Testy jednostkowe, integracyjne, akceptacyjne... żaden problem ! A jakie jest Api? Piękne i bardzo ekspresywne . Jest to tak bardzo rozbudowane że z pomocą Laravela można banalnie stworzyć nawet rozbudowane boty internetowe .
- Fasady / Kontrakty - Są to wyższe warstwy abstrakcji, wrapery, powłoki, interfejsy które umożliwiają na szybsze w użyciu, wygodne i bardziej intuicyjne zarządzanie wszystkim oraz tworzenie kodu. Akurat z tego słynie Laravel . Jak to się mawia - słynne Laravelowe fasady...
- Request/Response - Zarządzanie żądaniem i odpowiedzią w Laravelu jest dużo bardziej złożone, na dużo wyższym poziomie abstrakcji niż w CodeIgniterze oraz dużo ciekawsze, dające dużo większe możliwości.
- Kontener Serwisów oraz Providerzy - W Laravelu mamy dostęp do tzw. "IoC Container" oraz "Service Providers". Najprościej można to wyjaśnić jako predefiniowane usługi aplikacji które ją obudowują w to co najlepsze oraz kontener który to wszystko przechowuje i który tym wszystkim zarządza. Możemy w nim przechowywać wszystkie nasze zależności oraz je z niego wyciągać. Jakby tego było mało, może nam je intuicyjnie sam dostarczyć! Jest to swego rodzaju taka warstwa aplikacji. Laravela całego można podzielić na kilka warstw w odróżnieniu od CodeIgnitera.
- Środowiska - Laravel posiada świetne środowiska specjalnie przygotowane i zintegrowane do pracy z Laravelem, jak Homestad czy Valet. Praca w Laravelu w tych środowiskach to czysta przyjemność !
- Artisan - Laravel posiada coś co nazywa się Artisan - jest to powłoka CLI (konsolowa) tego frameworka, co jest naprawdę świetne ! Za pomocą artisana możesz wykonać bardzo wiele rzeczy, czasem takich które zaoszczędzą ci kilkanaście czy kilkadziesiąt minut normalnej pracy w kodzie ! Jakby tego było mało możesz tworzyć własne komendy konsolowe (nawet bardzo rozbudowane)! Wszystko czego zapragniesz .
- Zadania Crona - Tak, Laravel również posiada zarządzanie zadaniami Cron które w łatwy sposób możesz dodawać, usuwać, konfigurować... wspaniale nieprawdaż ? Uwierz, jest to proste i intuicyjne! Zadania możemy tworzyć dla tak wielu rzeczy... komendy Artisana, powłoki, zadań... żaden problem. Nie tak jak robienie tego w sposób manualny .
- WWW / Api - Możesz tworzyć zarówno aplikacje WWW jak i Api. Albo oba na raz, jest to rozróżniane na poziomie routingu . Niemalże kompletna separacja i masz pełne pole do popisu .
- REST - Z Laravelem robienie aplikacji RESTowych to prostota i czysta przyjemność, nawet takie robi się najlepiej i najprzyjemniej! Po prostu cudo! Laravel ma pełne wsparcie dla metodologii tworzenia aplikacji RESTowych. Framework ten w 100% obsługuje żądania GET, POST, PUT, PATCH oraz DELETE.
- Middlewares - Dodatkowe warstwy które są nałożone na aplikację . Możesz je zdjąć lub dodawać nowe, są jak strażnicy którzy kontrolują przychodzące requesty i robią z nimi wszystko czego twoja aplikacja potrzebuje, może to być choćby dodatkowa warstwa autoryzacyjna . Potrzebujesz? Proszę, masz. Prosto, szybko i przyjemnie .
- Zabezpieczenia - CodeIgniter zdecydowanie nie posiada takich zabezpieczeń jak Laravel, szczególnie biorąc pod uwagę fakt, że nawet nie posiada żadnej autentykacji czy autoryzacji... więc...
- Większa kontrola nad widokami - Jako przykład może posłużyć choćby tzw. "View-Composers". Masz dużo większą kontrolę nad swoimi widokami oraz danymi które zawierają czy danymi które do nich przesyłasz .
- System szablonów Blade -Laravel posiada własny, wbudowany system szablonów Blade który jest cudowny, boski. Znacząco ułatwia pracę i stwarza nowe możliwości. Dużo lepsze zarządzanie twoimi szablonami oraz widokami. Ponoć niektórzy na to narzekają... nie szanuję. System ten jest po prostu cudowny! Biję on na głowę klasę parsera szablonowego CodeIgnitera .
- Prostsze zarządzanie adresami oraz przekierowaniami - Z laravelem zarządzanie adresami, przekierowaniami, hiperłączami jest o niebo prostsze, szczególnie dzięki routingowi REST oraz route'ami które posiadają nazwy. Są to pewnego rodzaju identyfikatory. Ale również samo jest dużo prostsze i wygodniejsze w użyciu.
- Intuicyjność - Choć CodeIgniter jest prostrzy, to Laravel jest zdecydowanie bardziej intuicyjny i nastawiony przyjazny w użyciu interfejs . Domeną tego frameworka jest "piękny kod".
- Automatyczna Rezolucja - Laravel jest na tyle potężny, że potrafi dokonać rezolucji klas dynamicznie i automatycznie w tle nawet bez twojej najmniejszej ingerencji. Jest rozwinięte do tego stopnia, że nawet najwięksi się zaskakują - pozytywnie oczywiście !
- Dynamizm - Laravel jest tak bardzo dynamiczny, że potrafi nawet wygenerować dla ciebie automatycznie fasady w czasie rzeczywistym i zapewnić ci dodatkową warstwę abstrakcji dla twojej aplikacji, czy nawet dokonać rezolucji klasy bez żadnej konfiguracji ani nawet poinformowaniu go o fakcie że dana klasa istnieje !
- Walidacja danych - CodeIgniter świetnie tutaj sobie radzi - ale do Laravela dużo mu brakuje! Szczególnie że laravel posiada możliwość tworzenia własnych formularzy, które są odpowiedzialne same w sobie za własną autoryzację, walidację danych, obsługę błędów i logów... To jest coś... !
- Obsługa błędów - Zdecydowanie obsługa błędów, komunikatów, przeróżnych odpowiedzi błędu dla klienta razem z REST... potężna broń. Dużo bardziej rozbudowana niż w przypadku CodeIgnitera .
- Pełna integracja front-endowa i Assety - Dosłownie, pełna integracja front-endu, JS, CSS, SASS, SCSS, LESS, Babel, Gulp, WebPack, Vue, Bootstrap, Stylus, Browserify, React... Niepodważalna destrukcja w tym aspekcie. Laravel pod tym względem ma wszystko czego tylko można zapragnąć . Wszystko to zamknięte w rewelacyjnym i intuicyjnym Api.
- Elixir - Potężne oraz intuicyjne narzędzie do zarządzania Gulpem. Laravel Elixir czyni to wszystko przyjemnym i szybkim. Świetne narzędzie, jedna z perełek... których akurat jak widać Laravel ma dużo .
- Enkrypcja - Laravel do szyfrowania używa OpenSSL'a oraz AES-256/128 co czyni go potężnym na tym polu. Cudowna możliwość tego frameworka .
- Haszowanie - Haszowanie z Laravelem jest zdecydowanie dużo prostsze oraz bardziej intuicyjne, szczególnie że w odróżnieniu od CodeIgnitera ma własne Api które do tego służy .
- Transmisja - Laravel ma świetny system do transmisji, różne kanały, zabezpieczenia, eventy z tym związane... Web Sockety prosto i przyjemnie .
- Cache - Na pewno Laravel daje większe możliwości do cache'owania, jednak nie jest to jak już wcześniej wspomniałem jednostronna przewaga, ponieważ CodeIgniter umożliwia proste cache'owanie całych stron, czego Laravel niestety nie posiada.
- Kolekcje - Poza zwykłymi tablicami danych w Laravelu mamy w większości przypadków do czynienia z kolekcjami. Jest to wyższy poziom abstrakcji który daje nam znacznie większą kontrolę i pole do popisu w zarządzaniu danymi, świetna sprawa .
- Eventy - Intuicyjne eventy które możemy w bardzo łatwy sposób tworzyć, również obiekty nasłuchujące. CodeIgniter niestety jako takich nie posiada. Również mamy możliwość ich rozgłaszania (transmisji) czy kolejkowania, cudo!
- Lepsza integracja z chmurą - Szczególnie z popularnym Amazon S3. To coś, co stanowi dość sporą przewagę w stosunku do CodeIgnitera .
- Maile - Niby nie bardzo, ale jednak z doświadczenia wiem, że praca w CodeIgniterze z mailami jest toporna... Niestety. Także tutaj przewaga dla Laravela !
- Paginacja - No i mamy nokaut pod tym względem. Albowiem paginacja Laravela w stosunku do tej w CodeIgniterze to niebo a ziemia. Jak paginacja to tylko laravel !!!
- Notyfikacje - Kolejna przewaga, ponieważ framework ten posiada bardzo wiele kanałów notyfikacji których możemy użyć (choćby MySQL, Mail, Slack itd...) oraz posiada gotowe migrację w przypadku bazy danych . Nie musimy mieć tutaj własnego systemu oraz własnych bibliotek czy niczego z zewnątrz. Wszystko mamy już tutaj, na miejscu !
- Kolejki - To jest coś wyjątkowego, kolejkowanie naszych zadań które są kosztowne by nie obciążały zapytań oraz odkładanie ich na później. Coś cudownego . Jakby tego było mało mamy do tego kilka możliwości implementacji, na przykład za pomocą bazy danych czy Redis... A praca z Redis w Laravelu to czysta przyjemność !
- Integracja z Redis i Memcached - Na pewno CodeIgniter może Laravelowi na tym polu pozazdrościć .
- Średni - duży dystans - Relatywnie wolno wystartujesz, ale za to szybko skończysz !
- Migracje oraz Seeding - Zarządzanie migracjami oraz wypełnianiem bazy danych danymi w Laravelu szczególnie z wykorzystaniem powłoki Artisana to wyższa szkoła jazdy, lepsze, przyjemniejsze i dużo bardziej wydajne . CodeIgniter co prawda posiada migrację, ale nie na takim poziomie.
- Faker / Factories - Fabryki danych w Laravelu. Wypełnianie tabeli wyprodukowanymi, nieprawdziwymi danymi służącymi do developmentu czy testów. Bardzo przydatne i wbrew pozorom stanowi to dużą zaletę .
- Carbon - System który umożliwia na dużo prostsze, wygodniejsze oraz bardziej intuicyjne zarządzanie datą i czasem w naszej aplikacji, szybko się do tego przekonasz .
- Akcesory i Mutatory - Przydatna funkcjonalność która pozwala zawczasu sformatować dane które pobierasz czy ustawiasz na instancjach modeli bazy danych .
- Wspomaganie - Z Laravelem masz bardzo wiele mechanizmów które wspierają cię w twojej pracy. Które normalnie musiałbyś ustawić czy zaprogramować, a w przypadku tego frameworka masz z góry. Choćby automatyczne zwracanie danych w formacie Json gdy zamierzasz zwrócić z kontrolera dane w postaci tablicy (serializacja) . Tego i podobnych temu rzeczy jest tutaj dużo!
- Zasoby Modeli Api - Laravel również posiada specjalne klasy przeznaczone na zasoby dla twojego Api . Dzięki temu możesz w łatwy sposób wykonać formatowanie modelu do formatu Json i zarządzać tym z klasy zasobu.
- Lumen - Mikroframework który jest odchudzonym Laravelem. Znając jedno znasz i drugie, możesz użyć jedno albo drugie, coś większego albo mniejszego .
- Ekosystem - Cały Laravelowy ekosystem - czyli wszystko to co go otacza, ludzie ale przede wszystkim moduły, pakiety, dodatki... Scout, Cashier, Envoy, Passport, Socialite, Horizon, Mix, Elixir, Spark, Lumen... Tego jest po prostu bardzo dużo. Laravel jest obecnie najpopularniejszym frameworkiem, a co za tym idzie jest do niego więcej materiałów, dodatków... praktycznie wszystkiego .
I to już raczej będzie wszystko... ufff . Dużo tego, co? Ostatecznie przewaga liczebna Laravela nad CodeIgniterem to 45 do 14!
Ogromna różnica prawda?
Ale zważ na to, że nie można na to patrzeć w ten sposób, jedne zalety mają większe znaczenie inne mniejsze. I co więcej, jedne zalety mogą mieć większe znaczenie "dla ciebie" a inne mniejsze. I znów co więcej! Bo otóż jedne zalety mogą mieć większe znaczenie w "konkretnym projekcie" a drugie mniejsze...
To jak jest? Który jest lepszy?
Ano nie ma lepszego ani gorszego. Po prostu są dwa zupełnie różne od siebie frameworki, mimo że oba są frameworkami tego samego języka. CodeIgniter w stosunku do Laravela jest czymś małym, zwinnym, szybkim, pomocnym (pomaga ci, nie walczy za ciebie), dającym ci pełną swobodę, wolność i wielką przestrzeń. Natomiast Laravel jest duży, wielki, wielgachny, gruby na wypasie (na sterydach) który pochłania wszystko i wszystkich, będzie walczył za ciebie, ale słono cię będzie kosztował (szczególnie pod względem wydajności i prędkości), potrafi być bardzo agresywny i bezwzględny.
Laravela można nazwać prawdziwe full-stackowym frameworkiem, gromadzi tak wiele elementów i cały czas pochłania co raz więcej... Podczas gdy CodeIgniter ogranicza się tylko do tego co jest Core, do tego co jest najbardziej istotne, najważniejsze, najbardziej przydatne. Bardzo rozważnie traktują na temat wszelkich nowości czy deprecjacji.
Architektura i Model-View-Controller
Dodatkowo te frameworki różnią się architekturą i budową. CodeIgniter jest frameworkiem modułowym, ładujemy i używamy tego co chcemy i potrzebujemy. Natomiast Laravel ma budowę warstwową, gdzie nasza aplikacja jest opakowana szeregiem klas abstrakcji jak cebulka.
Natomiast fundamentem obu tych frameworków jest wzorzec projektowy MVC (Model-View-Controller). Jest to jeden z najbardziej popularnych i cenionych wzorców projektowych w kontekście frameworków. Wzorzec ten polega na odpowiednim rozdzieleniu odpowiedzialności między te 3 klasy abstrakcji oraz zarządzanie nimi dzięki ich wzajemnej komunikacji. Kontroler sprawuje pieczę nad sterowaniem aplikacją, model odpowiada za dane a widok jest odpowiedzialny za to co zobaczy użytkownik .
Oprócz tego oba frameworki oczywiście implementują znacznie większą ilość wzorców projektowych. Liczbowo tutaj Laravel też ma przewagę . Ale nie jest to bardzo istotne, tyko nadmieniam.
CodeIgniter 4
Dodatkowo pragnę nadmienić, że niedługo wydana zostanie przełomowa wersja CodeIgnitera! Będzie to już czwarta odsłona tego frameworka - CodeIgniter 4. Wersja przełomowa ponieważ będzie się diametralnie różnić od obecnej jego formy. Wersja ta jest jeszcze w fazie developmentu ale już dziś można się w nią zagłębiać, czytać jej stopniowo uzupełnianą dokumentację i rozpocząć pracę z tym frameworkiem .
Który framework wybrać?
Poznaj jeden i drugi. Pracuj z jednym i z drugim. Znaj zalety i wady jednego i drugiego. Polub oba. Pokochaj oba. Zasługują na to. Oba. Bo oba są świetne i cudowne! I korzystaj z ich cudowności w zależności od choćby twojego widzimisię ! Żartuję. Rób to profesjonalnie! W zależności od czasu, miejsca, zespołu, w zależności od siebie, od projektu... można by wymieniać i wymieniać!
Który framework jest lepszy na początek?
Zdecydowanie CodeIgniter ! Jeśli zaczynasz przygodę z frameworkami języka PHP i stoisz przed takim wyborem, to zdecydowanie polecam ci byś zgłębił i nauczył się go jako pierwszego . Jest z całą pewnością prostszy, łatwiejszy w obsłudze, szybciej go pojmiesz, szybciej z nim ruszysz i skończysz swój pierwszy projekt !
Gdy już skończysz swój pełny projekt który porusza wszelkie zagadnienia i możliwości tego frameworka wzdłuż i wszerz - proszę bardzo! Zacznij wnet przygodę z Laravelem !
I to by było na tyle jak chodzi o ten dzisiejszy, techniczny post . Kompletne porównanie tych Laravela oraz CodeIgnitera.
Dziękuję za lekturę i życzę ci dobrego dnia . Bywaj!