Frameworki w małych projektach

Dzisiejszy wpis będzie zapisem moich dywagacji na temat używania frameworków w małych projektach, tak dla odmiany. Chciałbym poruszyć tę kwestię, gdyż wydaje się to być dosyć duży problem. Oprę się na danych pochodzących z małej aplikacji opartej na Zend Frameworku oraz stronie Linux.Eazu.pl(projekt zawieszony, ponieważ treść odnosi się do już dosyć starej wersji Ubuntu). W pierwszym przypadku dane nie będą się różnić zbytnio od pomiarów na „czystym” Zendzie, w drugim zaś wszystko napisane zostało obiektowo, z użyciem systemem szablonów praktycznie identycznym, jak ten z mojego artykułu pod tytułem „(Bardzo) prosty system szablonów”. Różnicą w obydwu aplikacjach jest typ zastosowanej bazy danych, gdyż w Zendzie oparłem się na MySQLu, a w poradniku o Linuksie na SQLite. Mimo wszystko nie zrobi to wielkiej różnicy, kiedy zobaczymy różnicę w danych.

Pomiary

Zastanawiając się nad zasobożernością Zend Frameworka w porównaniu do aplikacji pisanych od podstaw, postanowiłem wykonać dwa pomiary: użycia pamięci i czasu wykonywania się skryptu. Testy robione były na różnych serwerach, lecz ten słabszy(z aplikacją ZF) nie był w ogóle obciążony, więc fakt ten nie „gra tutaj dużej roli”. Obydwa posiadają podobną konfigurację, która, według mojego rozpoznania, nie spowodowała widocznego sfałszowania wyników. W obydwu przypadkach PHP był uruchamiany w trybie FastCGI na Apache’u. Poniżej zamieszczam dane, które uzyskałem. Oczywiście są one uśrednione na podstawie wielu żądań.

Aplikacja na Zend Frameworku

Użycie pamięci: 1700 kB
Czas wykonywania: 550 ms

Linux.Eazu.pl

Użycie pamięci: 190 kB
Czas wykonywania: 7,5 ms

Jak widać różnica jest znaczna. O ile ilość używanej pamięci w dzisiejszych czasach możemy praktycznie pominąć, o tyle czas zajętości procesora jest już bardzo ważny. Warto jeszcze dodać, że Zend ładuje do pamięci ponad 120 plików.

Wahania ekonomiczne

Jak widzimy powyżej, serwer, w przypadku użycia aplikacji opartej na Zend Frameworku, będzie obciążony dużo bardziej. Wiele osób mi powie, że no dobrze, ale praca z frameworkami jest dużo wydajniejsza pod względem czasu pracy nad projektem. Oczywiście, wszystko się zgadza w przypadku dużych projektów, ale możemy coraz częściej zauważyć fakt używania ich w projektach pokroju wizytówek. W takim przypadku wręcz śmiało mogę użyć stwierdzenia, że tworzenie chociażby, już wspomnianych przeze mnie, wizytówek na frameworkach się nie opłaca. Spójrzmy chociaż na pewien prosty przykład: istnieje sobie na rynku firma, która tworzy klientom wizytówki, które utrzymuje na swoim serwerze. Zastanówmy się teraz: co się im bardziej opłaca: użyć frameworka i na jednym serwerze „postawić” znacząco mniejszą liczbę stron, czy jednorazowo poświęcić kilka dni na niezbyt trudną pracę i osiągnąć ten sam efekt przy większej oszczędności zasobów i w efekcie pieniędzy? Myślę, że odpowiedź na to pytanie jest prosta. Z drugiej strony ktoś może mi zarzucić: „no tak, ale przecież np. Zend Framework jest rozwijany przez wiele osób, mamy wtedy mniejsze szanse na bugi w Naszym projekcie”. Fakt jest faktem, że może w większych aplikacjach może to być kluczowa kwestia, aczkolwiek w małych i prostych projektach szansa na tego typu błąd jest naprawdę mała.

Średnie i duże projekty

Sprawa ma się inaczej w przypadku dużych i średnich projektów. Tutaj kwestia „użyć czy nie użyć” frameworka nie jest taka prosta. W takim wypadku musimy się porządnie zastanowić, czy to się Nam po prostu opłaca. W przypadku, kiedy nad kodem będzie pracowało wiele osób, raczej wyboru nie mamy, gdyż gotowy framework Open Source daje Nam solidną i udokumentowaną platformę, która znacząco zmniejszy koszty stworzenia gotowej aplikacji. Niestety nie da się wyznaczyć stałej granicy, kiedy przestaje się Nam opłacać korzystanie z frameworka, gdyż każdy projekt jest specyficzny.

Notka

Powyższy artykuł oczywiście jest tylko moją subiektywną opinią. Chętnie poznam Wasze zdanie na ten temat.

Za ten artykuł podziękowano 0 raz(y). Chcesz i Ty ?

4 Comments

  • 9 sierpnia 2010 - 23:01 | Permalink

    A co jeśli będziesz chciał za jakiś czas powiększać i rozbudowywać tak prostą stronę? Najpierw dojdzie konieczność pisania własnych funkcji obsługi Web Services, później dojdzie obsługa SMTP i IMAP, potem klasy do tworzenia i walidacji formularzy, itp itd.

    Warto pomyśleć o przyszłości, zanim się zacznie pisać w czystym PHP – by potem nie musieć dalej się męczyć w czystym PHP i wszystko pisać od początku, lub by nie przepisywać aplikacji od nowa.

    Btw. do małych projektów wykorzystuję Yii PHP Framework.

  • karol
    20 kwietnia 2011 - 16:02 | Permalink

    „O ile ilość używanej pamięci w dzisiejszych czasach możemy praktycznie pominąć, o tyle czas zajętości procesora jest już bardzo ważny ”
    Przejrzalem watki na blogu i zainteresowalem sie nim jednak dziwi mnie to odwazne stwierdzenie z Twojej strony. O zasoby pamieci jak najbardziej trzeba dalej dbac wyobraz sobie niezoptymalizowany skrypt PHP ktory buduje listy rekordow, podlicza ilosc kategorii danych rekordow gdy uzwa sie mysqla i natywnych funkcji/petli do pobierania danych jedna sesja moze na chwile obciazyc serwer nawet na kilka-kilkanascie MB, na zwyklych serwerach hostingowych wykancza to caly limit (8-16 MB) i w efekcie jest ona niedostepna dla innych uzytkownikow i na VPS z iloscia pamieci 256-512 MB przy wiekszej liczbie odwiedzajacych rowniez.

    Co do sensownosci uzywania frameworkow (i jakich konkretnie warto uzywac) przy malych projektach pisanych od poczatku liczylem na wieksze zglebienie sie w problem jak kiedys bardziej sie rozpiszesz chetnie przeczytam :)

  • kozak
    28 maja 2011 - 14:01 | Permalink

    Moim zdaniem używanie fm nawet w małych projektach nie jest czymś złym. Pozwala na szybkie postawienie strony i późniejszy łatwy jej rozwój. Obciążenia nie są aż tak ogromne, mechanizmy cache dostępne praktycznie w każdym fm zniwelują obciążenie serwera. Tak więc – uważam, że nie ma nic złego w używaniu fm w małych projektach.

  • Marcin
    5 grudnia 2011 - 14:37 | Permalink

    Może do małych projektów stosować prostsze fm, np CodeIgniter albo Fuel. Wszystko zależy od perspektyw rozwojowych projektu, wytaczanie takiego działa na mały projekt nie ma sensu.

  • Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

    *

    Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">