2013-05-22 6 views
44

Meine Kollegen und ich sind gerade dabei, ein Web-Framework zu wählen, um eine Website mit hohem Traffic zu entwickeln. Wir sind wirklich gut mit node.js + express und . Beide sind großartige Frameworks, aber wir sind ein wenig besorgt über Symfony2, weil es von den meisten Web-Frameworks da draußen scheinbar übertroffen wird. HierWarum funktioniert Symfony2 in Benchmarks so schlecht und spielt es eine Rolle?

ist die Benchmarks, die es beweist: http://www.techempower.com/benchmarks/

Aus diesem Grund werden wir wahrscheinlich node.js verwenden + ausdrücken, aber ich frage mich immer noch, warum Symfony2 so schlecht in Benchmarks durchführen.

+2

Ich finde es merkwürdig, dass das Zend-Framework als Teil ihres Tests nicht enthalten war, obwohl einige interessante Ergebnisse ansonsten. –

Antwort

125

Am Ende alles nach unten kommt Cache Handhabung ...

zu korrigieren

symfony oder PHP in der Regel langsamer als andere Sprachen oder Frameworks damit Sie mit den Tools, die reich, sicher und prüfbar Web erstellen Anwendungen sehr schnell.

Wenn Sie einen Reverse-Proxy wie Varnish und ESI (Randseite enthält) und die Teile Ihrer Vorlagen dienen Sie am Ende wirklich durch symfony aktualisiert haben müssen. Sie werden eine unglaublich schnelle Erfahrung haben.

Außerdem, wenn Sie einen Opcode Cache wie APC verwenden und eine optimierte Datenbank ein menschlicher Benutzer wird nicht wirklich den Unterschied von wenigen ms in einer realen Welt Anwendung bemerken.

Auf Wunsch werde ich ein wenig tiefer tauchen und Ihnen ein paar weitere Dinge zum Nachdenken geben.


[Caching & Leistung]

Mit Cloud-Services (S3, EC2, gae, ...) bei fast ohne Kosten mit Last-Balancern gepaart, einfache Bereitstellung (Koch, Marionette, ...) und all diese funkigen Sachen verfügbar sind, ist es selbst für kleine Firmen leicht und erschwinglich geworden, große Daten und/oder Anwendungen mit hohem Datenverkehr zu verwalten.

Mehr Speicherplatz bedeutet mehr Platz für den Cache - mehr Rechenleistung bedeutet schnelleres Cache-Warmimg.

Dinge, die Sie oft hören, wenn die Leute über PHP oder Rahmen-Performance sprechen:

  • facebook läuft mit PHP
  • youp ** n wurde mit symfony
  • ...
entwickelt

Warum also diese Websites nicht vollständig zusammenbrechen? Weil ihre Caching-Routinen clever sind.

Wussten Sie zum Beispiel, was Facebook tut, wenn Sie ein Statusupdate schreiben?

Es speichert es nicht direkt in einer Datenbanktabelle mit all Ihren Statusaktualisierungen und wenn ein Freund seinen Stream besucht, werden alle Status seines gesamten Freundes aus der Datenbank abgerufen, bevor er bedient wird.

Facebook schreibt Ihren Status an alle Nachrichtenströme Ihrer Freunde und beginnt, ihren Cache zu erwärmen.

jetzt werden alle Streams für das Servieren vorbereitet und wann auch immer einer deiner Freunde seinen Stream besucht, wird ihm eine im Cache gespeicherte Version geliefert ... sofort mit fast keiner Codeausführung.

Der Stream zeigt nur den neu erstellten Status an, wenn der Cache warmimg beendet wurde. wir sprechen über ms hier ...

Was sagt uns das? In modernen hochfrequentierten Anwendungen wird fast alles aus dem Cache bedient und der Benutzer wird nicht bemerken, wenn die tatsächliche Berechnung der Seite 1 ms oder 5 Sekunden dauert.

In einem "realen" Szenario wird der Endbenutzer keinen Unterschied zwischen den Frameworks in req/sec bemerken.

Auch mit einfachen Sachen wie Mikro-Caching können Sie Ihren vps gehosteten Blog nicht sofort nach unten gehen lassen, sobald Sie es auf der Zielseite von hackernews gemacht haben.

Am Ende ist das wichtigere Ding ... stellt mein Rahmen die Werkzeuge, die Dokumentation und die Tutorien und die Beispiele zur Verfügung ..., um dieses Ganze schnell zu erhalten & einfach. symfony macht das für mich!

Wenn du feststeckst ... wie viele Leute sind da und wollen deine Fragen zur Leistung beantworten? Wie viele reale Anwendungen wurden oder werden in naher Zukunft mit diesem Framework erstellt?

Sie wählen eine Community, indem Sie ein Framework auswählen!

... okay, das ist für die ist es ein Teil Rolle ... nun zurück zu diesen Benchmarks :)


[Benchmarks & Setups]

Über all die glänzenden Farben und Phantasie Englisch: www.doc-o-matic.com/webhelp/SC_Insou...pageType.html Im Benchmark kann man leicht übersehen, dass nur ein Setup (Webserver, Datenbank, ...) mit jedem dieser Frameworks getestet wird, während Sie für jede von ihnen eine Vielzahl von Konfigurationen haben können.

Beispiel: Anstelle von symfony2 + doctrineORM + mysql können Sie auch symfony + documentODM + MongoDB verwenden.

MySQL ... MongoDB ... Relationale Datenbanken ... NoSQL-Datenbanken ... ORM ... Mikro-ORMs ... Raw SQL ... alle in diesen Konfigurationen verwechselt ------> Äpfel und Orangen.


[Benchmarks & Optimierung]

Ein häufiges Problem bei fast allen Benchmarks - auch solche, die nur PHP-Frameworks zu vergleichen - rund um die Web gefunden und auch diese "TechEmpower Web Framework Benchmarks" ist ungleiche Optimierung.

Diese Benchmarks nutzen keine möglichen (und von erfahrenen Entwicklern wohlbekannten) Optimierungen dieser Frameworks ... zumindest für symfony2 und deren Tests ist dies eine Tatsache.

Einige Beispiele in Bezug auf die Symfony2 Setup in ihrer neuesten Tests verwendet:

  • "Komponist installieren" nicht mit der Option -o dump eine optimierte classmap Autoloader (code)
  • Symfony2 genannt wird, wird verwenden APC-Cache nicht zu Lehre Metadaten Anmerkungen ohne apc_cli = 1 (issue)
  • der gesamte Behälter DI in der Steuerung eingespritzt wird, statt nur die wenigen erforderlichen Dienste
  • hiermit setter inj ection verwendet wird -> Objekt erstellt dann setContainer() -Methode aufrufen, anstatt den Behälter direkt in den Konstruktor Injektion (siehe: BenchController erstreckt Controller erstreckt ContainerAware)
  • einen Alias ​​($ this-> get ('service_name')) wird verwendet, um Dienste aus dem Container abzurufen, anstatt direkt darauf zuzugreifen ($ this-> container-> get ('service_name')). (code)
  • ...

die Liste geht weiter ... aber ich denke, Sie verstehen, wo dies führt, ist. 90 open issues jetzt ... eine endlose Geschichte.


[Entwicklung & Ressources]

Ressources wie Server und Speicher sind billig. Wirklich billig ... im Vergleich zur Entwicklungszeit.

Ich bin ein Freiberufler, der erheblich gemeinsame Preise berechnet. Sie können entweder 2-3 Tage meiner Zeit bekommen ... oder eine Menge Rechenleistung und Speicherplatz!

Bei der Auswahl eines Frameworks wählen Sie auch ein Toolkit für die schnelle Entwicklung - eine Waffe für Ihren Kampf gegen den nie ganz zufriedenen, merkmalkriechenden Kunden ... der Sie für seine Wünsche gut bezahlen wird.

Als Agentur (oder Freelancer) möchten Sie funktionsreiche Anwendungen in kurzer Zeit erstellen. Sie werden auf Punkte stoßen, an denen Sie mit etwas hängen bleiben ... vielleicht ein Performance-Problem. Sie stehen aber auch Entwicklungskosten und Zeit gegenüber.

Was wird teurer? Ein zusätzlicher Server oder ein zusätzlicher Entwickler?

+5

Bist du sicher, dass es "alles" bis zum Caching geht. Symfony et Express haben die gleiche Kapazität zum cachen (Vorlagen/statischer Inhalt/...). Willst du damit sagen, dass die Anzahl der Anfragen/Sekunde so irrelevant ist, dass wir sie nicht berücksichtigen sollten? –

+2

+1 "_Was wird teurer? Ein zusätzlicher Server oder ein zusätzlicher Entwickler? _" Dies wird von so vielen Web-Enthusiasten übersehen, die blind glauben, dass die niedrigste "ms" in einem Benchmark die beste Option ist. –

+12

Sehr gute Antwort. Beste Erklärung, die ich über dieses Thema gesehen habe. – d0001

1

Dieser Blog beantwortet den zweiten Teil Ihrer Frage: http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage

Dismissing symfony, weil die Geschwindigkeit eines „Hallo, Welt“ -Test nicht so gut wie bei FooBar Rahmen ist ein Fehler. Raw Geschwindigkeit ist nicht der Schlüsselfaktor für Profis . Kosten sind der Schlüsselfaktor. Und die Kosten von Entwicklung, Hosting und Wartung einer Anwendung mit Symfony ist weniger als das, was es für andere Lösungen ist.

Bei der Auswahl eines Frameworks sollte man die Gesamtkosten der Entwicklung berücksichtigen. Das bedeutet, die Codequalität des Frameworks zu betrachten (Komponententests, Dokumentation usw.)), die Leistung (und Hosting-Kosten), die Quantität und Qualität der Features, die Größe der Community, die Nutzung durch Organisationen wie Ihre, Skalierbarkeit, etc.

Als Symfony-Entwickler, ich leidenschaftlich hasse WordPress aus technischer Sicht. Aber ich werde es immer noch empfehlen (und sogar benutzen!) Für eine einfache Website. Nicht nur, weil es so beliebt ist, sondern auch wegen der Größe seiner Community: Es ist sehr einfach einen WordPress Designer/Entwickler einzustellen. Ein Leistungsvergleich zwischen WordPress und Symfony wäre in diesem Fall sinnlos.