Dlaczego Symfony2 działa tak źle w benchmarkach i czy to ma znaczenie?

Moi koledzy i ja jesteśmy w trakcie wyboru frameworku internetowego do opracowania witryny o dużym natężeniu ruchu. Jesteśmy naprawdę dobrzy z node.js + express i php + symfony2. Oba są świetnymi frameworkami, ale jesteśmy nieco zaniepokojeni Symfony2, ponieważ wydaje się, że jest lepszy od większości frameworków internetowych.

Oto benchmarki, które to udowadniają: http://www.techempower.com/benchmarks/

Z tego powodu prawdopodobnie użyjemy node.js + express ale nadal zastanawiam się dlaczego Symfony2 kiepskie wyniki w benchmarkach.

Author: sjagr, 2013-05-22

2 answers

W końcu wszystko sprowadza się do poprawienia obsługi pamięci podręcznej...

Symfony lub PHP w ogóle jest wolniejszy niż inne języki lub frameworki, co zapewnia narzędzia do tworzenia bogatych, bezpiecznych i testowalnych aplikacji internetowych naprawdę szybko.

Jeśli używasz odwrotnego proxy, takiego jak Varnish i ESI (Edge side includes ) i w końcu obsługujesz części swoich szablonów, naprawdę musisz je zaktualizować przez symfony. będziesz miał niesamowicie szybki doświadczenie.

Ponadto, jeśli użyjesz pamięci podręcznej kodu opcode, takiej jak APC i zoptymalizowana baza danych, ludzki użytkownik nie zauważy różnicy kilku ms w rzeczywistych aplikacjach.

Zgodnie z życzeniem zanurkuję nieco głębiej i dam ci jeszcze kilka rzeczy do przemyślenia.


[ Caching & Performance ]

Z usługami w chmurze (s3, ec2, gae,...) prawie bez żadnych kosztów w połączeniu z load-balancers, łatwą obsługę (chef, puppet,...) i wszystko to funky rzeczy dostępne stało się łatwe i niedrogie nawet dla małych firm, aby uruchomić i zarządzać dużymi danymi i / lub aplikacji o dużym natężeniu ruchu.

Więcej pamięci oznacza więcej miejsca na pamięć podręczną - większa moc obliczeniowa oznacza szybszą pamięć podręczną.

Rzeczy, które często usłyszysz, jeśli ludzie mówią o php lub Framework-performance:

  • facebook działa z php
  • youp * * N został opracowany z symfony
  • ...

Więc dlaczego te strony nie załamać się całkowicie? Ponieważ ich procedury buforowania są sprytne.

Czy wiesz na przykład, co facebook robi, gdy piszesz aktualizację statusu?

Nie zapisuje go bezpośrednio w tabeli bazy danych ze wszystkimi aktualizacjami statusu i jeśli znajomy odwiedza swój strumień, wszystkie statusy ze wszystkich znajomych są pobierane z bazy danych przed ich serwowaniem.

Facebook zapisuje twój status do wszystkich twoich znajomych wiadomości i zaczyna podgrzewać ich pamięć podręczną.

Teraz wszystko strumienie są przygotowywane do serwowania i za każdym razem, gdy jeden z twoich znajomych odwiedzi swój strumień, będzie on obsługiwany w wersji buforowanej... natychmiast bez prawie żadnego wykonywania kodu.

Strumień pokaże Twój nowo utworzony status dopiero po zakończeniu bufora warmimg. mówimy tu o ms ...

Co nam to mówi? W nowoczesnych, bardzo często odwiedzanych aplikacjach prawie wszystko jest serwowane z pamięci podręcznej i użytkownik nie zauważy, czy rzeczywiste obliczenie strona zajęła 1ms lub 5seconds.

W scenariuszu" rzeczywistym " użytkownik końcowy nie zauważy różnicy req / S pomiędzy frameworkami.

Nawet z prostymi rzeczami, takimi jak mikro-buforowanie, możesz mieć hostowany blog vps, który nie zniknie od razu po wejściu na stronę docelową hackernews.

W końcu ważniejsze jest to ... czy mój framework dostarcza narzędzia, dokumentację oraz samouczki i przykłady ... aby wszystko zaczęło działać szybko i łatwo. symfony dla mnie tak!

Jeśli utkniesz ... ile osób jest chętnych i zdolnych odpowiedzieć na twoje pytania związane z wydajnością? Ile realnych aplikacji zostało już lub w najbliższej przyszłości zostanie utworzonych za pomocą tego frameworka?

Wybierasz społeczność wybierając framework !

... dobra, to ma znaczenie ... a teraz wróćmy do tych benchmarków:)


[ Benchmarki I Konfiguracje ]

Przez te wszystkie błyszczące kolory i fantazyjne wykresy w benchmarku łatwo pominąć fakt, że istnieje tylko jedna konfiguracja (serwer WWW, baza danych,... ) przetestowane z każdym z tych frameworków, podczas gdy możesz mieć szeroką gamę konfiguracji dla każdego z nich.

Przykład: zamiast używać symfony2+doctrineorm+mysql możesz również użyć symfony + Doctrineodm + MongoDB.

MySQL ... MongoDB ... Relacyjnych Baz Danych ... Bazy Danych NoSQL ... ORM ... mikro Ormy ... surowy SQL ... wszystko pomieszane w tych konfiguracjach - - - - - - > jabłka i pomarańcze.


[ Benchmarki I Optymalizacja ]

Częstym problemem prawie wszystkich benchmarków-nawet tych porównujących tylko frameworki php-znalezionych w Internecie, a także tych "TechEmpower Web Framework benchmarków" jest nierówna optymalizacja .

Te benchmarki nie wykorzystują możliwych (i przez doświadczonych programistów dobrze znanych) optymalizacji na tych frameworkach ... przynajmniej dla symfony2 i ich testów jest to fakt.

Kilka przykładów jeśli chodzi o konfigurację symfony2 używaną w ich najnowszych testach:

    Nie jest wywoływany" composer install " z flagą-o do zrzutu zoptymalizowanego autoloadera classmap (kod )
  • Symfony2 nie będzie używać pamięci podręcznej APC dla adnotacji metadanych doktryny bez apc_cli = 1 ( issue )
  • cały kontener DI jest wstrzykiwany do kontrolera, a nie tylko kilka niezbędnych usług
  • tutaj setter injection jest używany - > tworzy obiekt i wywołuje metoda setContainer() zamiast wstrzykiwać kontener bezpośrednio do konstruktora (patrz: BenchController extends Container extends ContainerAware )
  • alias ( $this->get('service_name') ) jest używany do pobierania usług z kontenera zamiast uzyskiwania do niego bezpośredniego dostępu ($this->container->get('service_name') ). ( kod )
  • ...

Lista trwa ... ale chyba zrozumiałeś, dokąd to prowadzi. 90 otwartych numerów do tej pory ... niekończąca się historia.


[ Development & Ressources ]

Zasoby takie jak serwery i pamięć masowa są tanie. Naprawdę tanio ... w porównaniu do czasu rozwoju.

Jestem freelancerem. możesz albo dostać 2-3 dni mojego czasu ... albo sh * * obciążenie mocy obliczeniowej i pamięci masowej!

Wybierając framework, wybierasz również zestaw narzędzi do szybkiego rozwoju - broń do walki przeciwko nigdy w pełni usatysfakcjonowanemu, pełzającemu klientowi ... który dobrze zapłaci za jego życzenia.

Jako agencja (lub freelancer) chcesz budować bogate w funkcje aplikacje w krótkim czasie. Napotkasz punkty, w których utknąłeś z czymś ... może chodzi o wydajność. Ale masz również do czynienia z kosztami rozwoju i czasem.

Co będzie droższe? Dodatkowy serwer czy dodatkowy deweloper?

 125
Author: nifr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 21:34:06

Ten blog odpowiada na drugą część twojego pytania: http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage

Odrzucenie symfony, bo szybkość testu "hello, world" nie jest tak samo dobry jak z foobarem framework jest błędem. Surowa prędkość nie jest kluczowy czynnik dla profesjonalistów. Koszt jest kluczowym czynnikiem. I koszt rozwój, hosting i utrzymanie aplikacji z symfony jest mniej niż to, co jest dla innych rozwiązania.

Wybierając framework, należy wziąć pod uwagę całkowite koszty rozwoju. Oznacza to spojrzenie na jakość kodu frameworka (testy jednostkowe, dokumentacja itp.), wydajność (i koszty hostingu), ilość i jakość funkcji, które ma po wyjęciu z pudełka, rozmiar społeczności, wykorzystanie przez organizacje takie jak twoja, skalowalność itp.

Jako programista Symfony, z technicznego punktu widzenia namiętnie nienawidzę WordPressa. Ale i tak polecam (a nawet używać!) to dla prostej strony internetowej. Nie tylko ze względu na popularność, ale ze względu na wielkość społeczności: bardzo łatwo jest zatrudnić projektanta/programistę WordPress. Patrząc na porównanie wydajności między WordPress i Symfony nie ma sensu w tym przypadku.

 1
Author: Stephan Vierkant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-06 16:00:30