Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inny] [ZF2] vs [SF2]
Forum PHP.pl > Forum > PHP > Frameworki
basso
Witam,
Z racji rozwoju frameworków czas się przeżucić na coś nowego.

Pisałem w CI, Kohana, Symfony 1, teraz Zend 1 od 1,5 roku.

Myślałem o Zend 2 ale to całkowicie inna struktura niż Zend 1. Postawiłem ostatnio projekcik zbudowałem sobie nowe moduły ale to inna bajka niż Zend 1. Wszystko trzeba na nowo opanować.

I teraz pytanie, czy jest sens brać się za ZF2 czy nie lepiej czasem przerzucić się na Symfony 2.
Pewno jest tutaj kilka osób co pisze na codzien w SF2.

Jak wydajność i nauka SF2? Chcę postawić nowego CMS i taki dosyć spory CRM.
Czy w SF2 występje coś do generowania CRUD (jak było w admin generator w SF1?).

Proszę o info.
r4xz
opornie przez dłuższy czas próbowałem się uczyć SF2, ale nie polecam. Jestem przeciwnikiem wszystko za długiego use blablablablablablablabla... i tak jeszcze kilka razy tyle smile.gif
brakuje mi konsekwencji namespace do lokalizacji, może jestem oporny na wiedzę, ale w kohanie bez problemu patrzę na klasę - "aha, tam to jest" (choć szkoda że nie leci to po namespace) i zerkam w źródło i znam szczegóły działania danej funkcji. w symfony? no za grzyba nie mogłem! chcesz wejść w źródło to najpierw 3 razy odpalasz folder symfony w folderze symfony, który to znajduje się w folderze... tak jest! symfony! no masakra.
znajdą się też plusy - konsola, bundle (ale żyć bez tego też się da).
no i to chyba tyle z mojej strony, mam nadzieję że ktoś mi powie "chłopie, głupi jesteś, pierdoły piszesz! musisz to zrobić tak i tak i całość jest logiczna" - byłoby pięknie, wręcz magicznie smile.gif

ZF2 nie znam
IceManSpy
Ja napiszę swój wywód.
ZF2 nie znam, tylko kilka info na blogach i przeglądnięcie pierwszego projekt-tutoriala. Ale w ZF1 trochę pisałem.
Teraz zacząłem czytać i uczyć się SF2 (nigdy nie miałem styczności z SF1).

Moje podsumowanie SF2:
+ konsola - potężne i wygodne narzędzie
+ wbudowane biblioteki
+ wbudowany debuger
+ pliki konfiguracyjne
+/- bundle - to przecież coś a'la moduły (mogę się mylić)
- wiele rzeczy dzieje się magicznie-automatycznie, czasem wydaje mi się, że tworząc coś i popełniająć błąd będę musiał zrobic projekt od początku
- trzeba wybrać, czy stosujemy pliki konfiguracyjne jako yaml, php, xml czy inne (nie wiem, czy da się łączyć)
- nie wiem jak obsługiwać formularze biggrin.gif (jeszcze)

ZF1:
+ praktycznie wszystko muszę zrobić sam, przez co mam pełną kontrolę
+ prosta struktura i wiem gdzie co jest (albo szybko to znajdę)
- męczące dekorowanie formularzy (ale w ZF2 to podobno co innego)
- wiele rzeczy trzeba znać, bo IDE nie podpowiadają
- brakuje wypasionej konsoli

A ZF2 znajmę się w chwili wolnego czasu smile.gif
thek
@r4xz: sam przez długi czas korzystałem z kohany w gałęziach 2 i 3... W porównaniu do sf2 to taki daleki, ubogi krewny. Kohana to po prostu nieco inna liga. Jest fajna do czegoś mniejszego, ale trzeba się w niej naprawdę napisać by osiągnąć coś co sf2 w większości przypadków ma z automatu lub w dostępnych łatwo bundlach. Modułów konkretnych tak naprawdę mało w Kohanie i upierdliwe są zmiany nawet w obrębie głównej gałęzi. Pisząc coś podstawowego dla 3.x nie masz za nic pewności, że w 3.(x+1) to jeszcze będzie działać, a by było weselej to żadna dokumentacja nie wspomina, by coś miało być za ileś tam wersji usunięte, albo choćby deprecated. Zrobisz upgrade na produkcji i po krótkim czasie się dowiadujesz, że coś leży :/

Konwencje są jak najbardziej, ale jest przyjmowane, iż zaczyna się ona od nazwy bundla. Wystarczy trochę poprogramować w tym i wiele rzeczy staje się proste. Dorzucić composera, testy jednostkowe, funkcjonalne i w zasadzie o testowaniu jako takim aplikacji można zapomnieć. Coś się rypnie to testy z reguły dość szybko wykryją problem i wskażą gdzie. Kohana też ma swoje upierdliwości wynikające z choćby hierarchiczności. Tak naprawdę by coś znaleźć muszę wiedzieć w jakim coś jest module. Hierarchiczność bowiem sprawia, że elementy wzajemnie się nakładają i uzupełniają przez co trudno nieraz znaleźć właściwą lokację. Szukając określonej funkcji muszę więc krok po kroku eliminować możliwe lokacje jej występowania. W symfony2 mamy nieco pościej: apps, gdzie w zasadzie nic nie powinno być poza główną konfiguracją, vendor gdzie są biblioteki/bundle obce i src - nasz kod. A jak nasz kod, to zbundlowany i tym samym namespace'y ładnie wskazują co gdzie. Co do nadmiaru USE to nie uważam tego za jakąś niewygodę. I tak musimy jakoś wskazać z czego dany kod ma korzystać. Normalne IDE i nie ma problemu - naprawdę. Gdyby w Kohanie nie upychano się w 1, góra 2 poziomach dziedziczenia, to też byś się nie połapał w niej.
ShadowD
@IceManSpy mam phpdesignera i wręcz genialnie podpowiada składnię, bez tego bym chyba poległ. ;-)

Jeśli chodzi o sam temat to przez jakiś rok może trochę więcej walczyłem z zend 1, wyszła 2'ka popatrzyłem i tak trochę zniesmaczony bo kod który mamy na start jest nie dość że większy niż w jedynce to jeszcze strasznie "dziwnie" wygląda jak dla mnie i przeniosłem się na SF2 (nie widziałem 1 na oczy nigdy haha.gif) wszystko pięknie było do czasu baz danych jak kontrolery, podział na paczki, rutery itd. działa super i jest bardzo prostu to jakoś podejście do sql'a mi się nie spodobało. Więc co począć walczę znów z zf2 i próbuję się przyzwyczaj.

Nie jestem jakiś guru od fw, ale jak miał bym wybierać teraz to próbował bym sił z zf2.
basso
BIORĘ SF2.

Kojarzy ktoś jak się przełaczyć na wersję produkcyjną: bo wersja dev http://sf2.basso/app_dev.php/ śmiga mi dobrze, ale za hu hu nie mogę odpalić http://sf2.slawek/app.php , bo non stop:

  1. Oops! An Error Occurred
  2.  
  3. The server returned a "404 Not Found".
  4.  
  5. Something is broken. Please e-mail us at [email] and let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inco
Szymciosek
Usuń folder app/cache i app/logs

spróbuj po tym uruchomić.
ixox
  1. php app/console cache:clear --env=prod --no-debug
toffiak
Gdy pierwszy raz zainstalowałem symfony 2.0 (standard edition) i chciałem przejść w środowisko deweloperskie to okazywało się że dostawałem 404, jako że raczkowałem w tym frameworku myślałem że to moja wina. Winę ponosi jednak samo symfony które nie posiada domyślnej domyślnej reguły dla urla "/", url ten jest zdefiniowany tylko dla środowska deweloperskiego, proszę sprawdzić app/config/routing_dev.yml.
Dlatego należy dodać własną regułkę dla pliku app/config/routing.yml która będzie powiązana z urlem "/", często nazywana jest ona jako: homepage.

W symfony 2.1 też nic się nie zmieniło w tej kwestii.
misi3kk
Możesz wpisać w konsoli:

  1. php app/console router:debug --env=prod


Jeśli na liście nie ma adresu przypisanego do "/" to wiadomo skąd błąd. Tak jak pisał toffiak - standardowo nie ma routingu dla strony głównej.
Szymciosek
no nie ma, bo jest zrobione demo: /demo/hello/{name}
basso
Witam,

ZROBIŁEM TESTY SF2 VS ZF2

Testy oprarte o 1mln rerkodów w bazie.

Podsumowanie:

Symfony 2

+ lepsza organizacja plików
+ bundle (ala moduły tylko coś lepszego)
+ fajny generator, i miła bezproblemowa zamiana automatu, PRZEJRZYŚCIE i mało kodu.
+ szybciej się pracuje przy budowie , automat formularz, automat , baza, automat validacja js
+ info/logi
+ app_dev.php
+ bardzo szybko działa gdy ma obrobić ogromną liczbę danych (np obróbka 7 tyś rekordów zaciagnietych z bazy) czas => 2,7s , ZF2 =>6s
+ przejrzysty routing exclamation.gif!!
+ twing albo php
+ fajne narzędzia dev


- wolniejszy od ZF2 co najmnije 2,5x jeśli operujemy małymi danymi. Znaczy jeśli obrabiamy małe dane. W stylu zaciąganiem max 500 elementów z bazy i i obróbka ich.

Próba 1mln rekordów => order by desc limit 500 rekordów i wyświetlenie:
ZF2 => 2,6s
SF2 => 4,8s

Natomiast to samo z wyświetleniem 7 tyś rekordów:
ZF2 => 6s
SF2 => 2.7

Więc Symfonia 2 jeśli zaciągamy małą liczbę danych do przetworzenia to przegrywa z ZF2 sporo.
Na zwykłych stronach jest to : 200ms vs 800ms . Natomiast jeśli trzeba zaciągać jakieś duże dane i je obrobić to na prawdę śmiga jak odrzutowiec w porównaniu do ZENDA.


Zend Framework2
+ szybkość działania przy przetworzeniu małych danych => a takie będę przetwarzał

09:25:40
+ w miarę przejrzyste formularze

Minusy:
- masakra kod, dużo i nie przejrzysty
- straszny routing
- brak generatora hmm to w sumie + i -
- trzeba się opisać jak .... żeby coś mieć

Robiłem jeszcze inne testy, zaciąganie i wyświetlanie... obróbka przy użyciu kilku foreach itd...

Podsumowanie:
Jeśli tworzymy stronę internetową z zarządzaniem (CMS), CRM, bądź wewnętrzne systemy ERP przeszukujące miliony rekordów w bazie nie posiadające skomplikowanych mechanizmów przetwarzających te dane, na poziomie PHP to ZF2 jest czymś co będzie dużo szybsze. (2-3 x szybciej).

Natomiast jeśli chcemy przetwarzać ogromną liczbę danych bądź wyświetlać ogromną liczbę danych to Symfonia 2 jest w tym przypadku o niebo szybsza. Widzę to w WEB SERVICE.
Kwestie bezpieczeństwa nie sprawdzałem, gdyż walidatory w SF2 z dokumentacji nie działają=> nie tylko ja o tym tutaj piszę.


Co ja wybieram? Mi zależy na szybkości działania, nie koniecznie na szybkości zbudowania serwisu.
Ja wybieram ZF2 bo czasy na poziomie 100-200ms z listowaniem do 1tyś elementów bez cache to dla mnie coś świetnego. Chodź nigdy 1 tyś nigdzie nie wyswietlałęm, szczególnie paginacja po 20 -100 elementów max. Więc można by to jeszcze bardziej przyśpieszyć używając php 5.4 + cache + APC.
Szymciosek
Napisz coś więcej o środowisku, na którym to testowałeś...
basso
Tutaj testy wydajnościowe ZF2 chodzi o requesty , nie zaciekawie to wygląda
http://www.enrise.com/2012/02/zend-framework-2-performance/


A moje mini testy odpalałem przy:
PHP 5.3.12
I3-2120 (2x 3.3 GHz),
4GB RAM
1TB 7200/s
mysql nie pamiętam wersji

Chyba muszę też ApacheBench puścić na Sf2 smile.gif wtedy porównam z tym co kolega wyżej potestował, bo tutaj może być ciekawie:)
toffiak
Czyżby kolega basso testował ORM ZF2 vs Doctrine 2 ?
Szymciosek
Jaki system operacyjny ?
basso
Ta tutorialowa klasa Zend jako use Zend\Db\TableGateway\TableGateway vs SF Doctrine 2

Windows XP SP3.
misi3kk
Testy ZF2 kontra SF2 niestety niespecjalnie nadają się do akceptacji.

Zerknij sobie na pierwszy i drugi test (500 i 7k rekordów). Moim zdaniem wynik dla SF2 masz błędny, bo wykonanie było szybsze dla 7k rekordów niż dla 500 rekordów. To ewidentny błąd i stawia znak zapytania nad całym testem.

Dobry test powinien uwzględniać różne zapytania - podawać jakie zapytania generuje ORM, być może jest w nich błąd? Test powinien być wykonany wielokrotnie, a na końcu wyliczone dane takie jak średnia, wariancja, mediana.

Jeśli to test samych ORM to przetestuj bez wyświetlania, bo narzut w systemie szablonów też coś wnosi. I ostatnia uwaga: Apache Benchmark średnio nadaj się do testów. Lepiej zrobić przypadek testowy w jMeter (kilka jednoczesnych połączeń, wykres CPU i RAM itp.)
Szymciosek
Napisz coś więcej o przeprowadzonych testach, jakie operacje przeprowadzałeś na danych ? Jak wyglądało zapytanie ? Jak wyglądała sama zawartość bazy ?
ano
...i zrób testy Symfony2/ZF2 a nie Doctrine/ZF2ORM ;p

Taki mały hint: przy pobieraniu tylu rekordów nie stosuje się ORMa, jest to ekstremalnie niewydajne (w efekcie długie czasy i pożera baaardzo dużo pamięci).
Wtedy lecisz jak najbardziej RAW - tzn możesz użyć Doctrine2, ale bez "hydracji" (hydrating) do obiektów, a zamiast tego do zwykłych arrayów.
ORM jest dobry przy stosunkowo małej ilości obiektów zaciąganych na raz.
basso
Witam,
Panie "ano" ma Pan rację.

Dzisiaj katowałem serwer Apache jMeter z tymi wcześniejszymi zapytaniami czyli ZF2(ORM) vs SF2 (Doctrine2).
ZF2(ORM) zdecydowanie bije SF2(Doctrine2) jeśli chodzi o przetwarzanie małych danych.


Od 4 lata programuje (CMS, CRM , ERP) i nigdy nie wyświetlałem więcej jak 100 rekordów z bazy mających no max 30 kolumn. 95% osadzam wszystko na zapytaniach i podzapytaniach w tym PL/SQL => zatem dostaje mało danych, to co chcę, od paginacji po przez złożone zwortki danych. Zatem jeśli nie przetwarzam dużej ilości danych po stronie PHP to na co mi Doctrine2 i jego hydracja do obiektów?

Na pewno ma Pan większe doświadczenie i może pomoże Pan mi w wyborze frameworka SF2 czy ZF2 ?


ano
SF2 jest o wiele przyjaźniejszy dla Rapid Developmentu.

Przy ZF2 dostajesz pewien zbiór komponentów, z których tak na prawdę sam musisz ulepić coś fajnego więc w efekcie wejście w ZF2 trwa dłużej - samemu trzeba opracować pewne 'standardy' itp.

Przy SF2 dostajesz od razu całość gotową do szybkiego developingu.

Średnie czasy Requestów dla tych 2óch frameworków przy podobnie zaprojektowanej aplikacji (tak samo wykorzystany cache itp) będą porównywalne. A to, że Zend jest wydajniejszy jest mitem. Sami developerzy Zf żalili się na temat niskiej wydajności Zf1.
(http://forum.php.pl/index.php?s=&showtopic=204816&view=findpost&p=1005857)

Co do ORMa:

Nie wyobrażam sobie CRMa bez użycia ORMa ;-)
Obsługa kodu bazującego na masie tablic asocjacyjnych w aplikacji bazującej na pewnych bytach biznesowych będzie strasznie kosztowna. Sam taki kod prawdopodobnie w końcu 'osiągnie' bardzo niską jakość, ciężko nad nim będzie zapanować.
Wykorzystanie obiektów przy tego typu aplikacjach jest moim zdaniem niezbędne.

Praktyka jest taka, że gdy w jednym requeście wykorzystujesz niewiele rekordów (lub po prostu jeden ;]) to stosujesz ORM. Prawdopodobnie na tej jednej encji będziesz chciał wykonywać pewne skomplikowane operacje, które o wiele łatwiej wykonać w świecie obiektowym.

Jednak gdy masz jakieś listingi rekordów, bez zbędnych operacji na nich/logiki --> wykorzystujesz tablice asocjacyjne.

Dlaczego SF2 się lepiej sprawdzi?
Jest lepiej przystosowany do ORMa, obiektów itp. Głównie ze względu na formularze, które były w założeniu tworzone na potrzeby obiektów (Oczywiście mogą również obsługiwać tablice asocjacyjne, ale raczej tego się nie stosuje, chyba że do prostych struktur)

Poza tym nie wyobrażam sobie definiowania reguł walidacji dla tablic asocjacyjnych. Tak masz całą logikę zdefiniowaną za pomocą adnotacji w konkretnej klasie modelu, lub za pomocą jakiegoś XMLa/YAMLa (czegokolwiek).

A jak byś użył walidacji przy tablicach? Zapisywałbyś pewnie reguły walidacji przy formularzu co jest mało rozsądne.

Obiektami lepiej potem operować gdy będzisez tworzył API swojego serwisu. Do SF2 powstały pewne świetne biblioteki, służące do de/serializacji obiektów do JSON, XML, itp.

Więc tworzenie webservice'ów, RESTa itp będzie bardzo proste przy tak utrzymanym kodzie.


A jeśli chciałbyś zapytać o średnie czasy odpowiedzi to mogę tylko odpowiedzieć, że licz się z między 80ms - 600ms - 600 przy np obsłudze bardzo złożonych formularzy.
basso
Witam,
Dzięki wielkie za obszerną wypowiedź.

Widzę, że czytasz w moich myślach. Chcę robić komercyjnego CMS-a jako WebService po SOAP albo REST (posadzić to w tym przypadku na SF2) => bo mnie nudzi to wiecznie dorabianie, pamiętanie i haszowanie kodu, u jednego klienta tak, u drugiego tak => praktycznie żadnej kontroli. Na początku było jako tako, bo było tego dosyć mało ale teraz widzę, że coraz mniej pamiętam i zaczyna mi się to wymykać spod kontroli...

Apropos ZF2 vs SF2, a scentralizowanie systemu.
Mam obawy jeśli chodzi o scentralizowanie tego. Jeśli stworzyłbym swoje API, to i frontend i backend musiałby drzeć wszystko z 1 serwera. Załóżmy, że mam 100 klientów (100 backendów i 100 frontendów)... ilość requestów niesamowita (front i backend). Trzeba by mieć kombajn nie z tej ziemi. Może to moja niewiedza prowadzi do tak dziwnych obaw.
Na pewno do tego typu rozwiązania pchałbym się tylko i wyłącznie na SF2 bo wtedy obróbka danych przemiał byłby o niebo wydajniejsze.



Pozdrawiam.

Test najnowszych frameworków
http://www.ruilog.com/blog/view/b6f0e42cf705.html
d3ut3r
Co do wydajności to już problem raczej biznesowy musisz się starać aby przychód z x klientów pokrywał koszty swobodnej pracy smile.gif. Od strony technicznej nie wiele jest do zrobienia poza optymalizacją aplikacji i mechanizmami usprawniającymi (wszelkie cache itp.).

Co do testu frameworków to jest to moim zdaniem nieporozumienie. Jeżeli ktoś pisze aplikacje Hello World to nie używa do tego SF2 Autor tych testów nie dość że otwarcie przyznaje że nie potrafił uruchomić aplikacji w trybie produkcyjnym to jeszcze porównuje duże frameworki pokroju ZF czy SF z rozwiązaniami mało popularnymi i nie tak rozbudowanymi.

ano
Takie testy na "hello world" są bezsensu - nic nie pokazują, a przewaznie są robione na MacBookach autorów wink.gif Poza tym czy zauwazyłeś w komentarzach, że gość testował Symfony2 w środowisku DEV?

Taki sneak-peak:
Już wkrótce wrzucimy na bloga miarodajne testy porównujące Symfony2, ZF2, Silex, Node.js na podstawie prawdziwej aplikacji o realnym, specyficznym, zastosowaniu (a nie hello world).
Co jeszcze mogę zdradzić: testy będą robione na odpowiednio zoptymalizowanej pod taką aplikację, największej instancji serwera Amazon EC2 (a dokladniej to na dwóch takich instancjach) :-)
basso
... wiem wiem, doczytałem komentrze i faktycznie kicha...

Czekam z niecierpliwością na wyniki testów. A tak w ogóle, to wybrałem SF2 i zacząłem już poznawać te mechanizmy. Zamówiłem książki już, żeby luki przed snem wypełniać informacjami wiarygodnymi.
Na razie najlepsze co może być to wywoływanie akcji w widoku exclamation.gif! No coś niesamowitego , czegoś takiego mi brakowało od zawsze.

Pozdrawiam.
d3ut3r
Osadzanie kontrolerów w templatce dobra rzecz smile.gif Mi osobiście najbardziej podoba się automatyczne pobranie encji w akcji na przykład:

  1.  
  2. public function deleteAction( \My\BundleName\Entity\News $news){
  3.  
  4. }
  5.  


zawsze to kilka linijek kodu mniej.
Daimos
Nie zabijecie jak odkopię stary temat?
Minęło trochę czasu, obydwa frameworki się rozwijają. Może też autor podjął od tamtego czasu decyzję i ma nowe wnioski.
Mnie dalej zastanawia w co się zagłębić bardziej, bo na razie nie znajdę czasu na opanowanie obydwu FW. Drasnąłem obydwa i jak to wszyscy mówią, faktycznie Symfony 2 bije ZF jeśli chodzi o rapid dev. Ale czy przy bardziej rozbudowanych aplikacjach, nie staje się kulą u nogi? Z moich obserwacji wynika, że pisząc bloga, na pewno napiszemy go szybciej z SF, ale w momencie, kiedy z tego bloga zaczniemy tworzyć sklep pokroju magento, czy nie okaże się, że wszystkie udogodnienia ze strony Symfony, będą jedynie miłym dodatkiem, który trzeba dodatkowo wymijać?
Sam zajmuje się m.in. rozwojem średnio zaawansowanych CMSów i sklepów, ale już przestarzałych i moim zadaniem będzie wybór nowego frameworka. Czy sensowne jest Waszym zdaniem poświęcenie czasu całego zespołu na zapoznanie się z obydwoma FW i sprawdzenie w praktyce, który będzie lepszym wyborem na aktualne potrzeby firmy?
Debaty w internecie na temat tych dwóch rozwiązań, zazwyczaj wyglądają jak walka fanów o to, czy lepiej śpiewa Bieber czy Rihanna, a przecież każdy robi to inaczej. Dlatego od jakiegoś czasu już ręce mi opadają, kiedy chcę wybrać FW bazując na opiniach ludzi, którzy w praktyce nie znają obydwu FW i bronią tego jedynego.

Wydaje się wszystko proste, niech wszyscy w zespole napiszą bloga i wybiorą (kiedyś tak zrobiłem z ZF 1). Problem jest taki, że jako zespół, ZF1 poznaliśmy nie po napisaniu tego bloga testowego, lecz po napisaniu sporej aplikacji - uważając, że już wiemy co to jest. Nie wyszło źle wink.gif Ale po roku, dziwnie się patrzyło w źródła.

Może ktoś z Was miał przełomy w wyborze/zmianie frameworka?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.