Ich stelle die Frage nach dem Lesen dieses Artikels Ссылка
Ist es auch nicht eine Strafe, cgi statt fastcgi zu benutzen?
Update: Warum manche Leute so tun, als würden sie antworten, "dass Sie 20-30% Leistungsverbesserung bekommen"? Ist es reine Vermutung oder kommt diese Zahl aus solider Benchmark? Ich habe mir die HipHop-Performance im Maßstab 10 mal angesehen.
Ich habe webdev in einigen Sprachen und Frameworks gemacht, einschließlich Python, PHP und Perl. Ich hoste sie selbst und meine größten Websites bekommen täglich 20k Zugriffe.
Jede Sprache und jeder Rahmen, der eine angemessene Geschwindigkeit hat, kann so skaliert werden, dass man pro Tag 20k Treffer erzielen kann, indem man Ressourcen wirft. Manche nehmen mehr Ressourcen als andere. (Plone, Joomla. Ich sehe dich an).
Meine witzigen Seiten (noch keine in der Produktion) nehmen viel mehr (um etwa 5000% mehr Speicher) herum als mit meinen Python-Seiten. Ie. Wenn ich sie mit Seige so hart wie möglich anfasse, bieten die witzigen Seiten viel mehr Seiten pro Sekunde.
Ich weiß, dass es kein echter allgemeiner Test ist.
Andere Geschwindigkeitsvorteile, die Ihnen geistreich sind:
Mehrfaches Threading
Wenn Sie mit dem eingebauten websrever (hinter dem ha-proxy zum Beispiel) bereitstellen und Ihre App multi-threaded ist, wird viel weniger Speicher geladen als eine Perl- oder PHP-App.
Im Allgemeinen mit php und perl apps, haben Sie Apache einen Prozess für jede eingehende Verbindung, und jeder Prozess lädt den gesamten PHP-Interpreter, den gesamten Code und Variablen und Objekte und was nicht. Mit schweren Frameworks wie Joomla und Wordpress (abhängig von der Anzahl der Plugins) kann jeder Prozess bei Speicherverbrauch sehr alt werden.
Mit der Wt-App lädt jede Sitzung eine WApplication-Instanz (ein C ++ - Objekt) und die gesamte Baumstruktur von Widgets und anderem. Aber der Speicher, den der Code verwendet, bleibt gleich, egal wie viele Verbindungen.
Die integrierte Web2.0-Funktion
Im Allgemeinen sind sie bei traditionellen Apps immer noch um die alte "HTTP-Anfrage kommt" aufgebaut. "Wir servieren eine Seite", "fertig". Ich weiß, dass sie ständig mehr und mehr AJAXy hinzufügen.
Bei Verwendung von "Wt" werden WebSockets standardmäßig verwendet, um nur den Teil der Seite zu aktualisieren, der aktualisiert werden muss. Es fällt zurück auf Standard-AJAX, wenn das nicht unterstützt wird, http-Anfragen. Mit den aktivierten AJAX- und WebSockets-Clients wird immer dasselbe WApplication C ++ - Objekt verwendet. Es geht also keine Geschwindigkeit beim Einrichten einer neuen Sitzung und all dem verloren.
Als Reaktion darauf ist 'C ++ zu schwer für webdev'
C ++ hat ein bisschen eine Lernkurve. Mitte der neunziger Jahre haben wir Websites in Java j2ee gemacht. Das wurde damals als kommerziell rentabel betrachtet und es war ein super kleiner Schmerz, in dem es sich entwickelte, aber es hatte einen guten Vorteil, gute Dokumentations- und Codierpraktiken zu fördern.
Wenn Sie Websites scripten, ist es leicht, Abkürzungen zu verwenden und nicht zu erkennen, dass sie da sind. Zum Beispiel hatte eine 8 Jahre alte Perl-Site, an der ich arbeitete, einen Code, der dupliziert und niemand bemerkt hat. Jedes Mal, wenn eine Produktliste angezeigt wurde, wurde dieselbe SQL-Abfrage zweimal ausgeführt.
Bei einer C ++ - Site hätte ich weniger Chancen, da es auf der Perl-Seite nicht so viel Programmierstruktur (wie Funktionen) gab, sondern nur perl und HTML. In C ++ haben Sie wahrscheinlich Methoden mit Namen und enden mit einem Namenskonflikt.
Typen
Einmal gab es eine Methode, die einen int-Bezeichner verwendete, später änderten wir sie in eine uuid-Zeichenfolge. Der Python-Code war großartig, wir dachten nicht, dass wir ihn ändern müssten; es lief gut. Es gab jedoch eine kleine Linie, die tief in der Tiefe vergraben war und eine andere Wirkung hatte, wenn man eine Schnur passierte. Sehr schwer, Bug zu finden, beschädigte die Datenbank. (Zum Glück nur auf Dev- und Testmaschinen).
C ++ hätte sich sicherlich sehr beschwert und uns gezwungen, die beteiligten Funktionen neu zu schreiben und nicht faul zu sein.
Mit C ++ und Java, der Compiler Fehler und warnt eine Menge dieser Art von Fehlern für Sie.
Ich finde Einheitstests sind im Allgemeinen nicht so notwendig mit C ++ - Anwendungen (erschieß mich nicht), im Vergleich zu Scripting-Sprach-Apps. Dies liegt daran, dass die Sprache viele Dinge erzwingt, die Sie normalerweise in einen Komponententest für eine Python-App stecken würden.
Zusammenfassung
Aus meiner bisherigen Erfahrung .. Es dauert länger, Dinge zu entwickeln, als existierende Frameworks. Hauptsächlich weil die bestehenden Frameworks sehr viel mehr out of the box haben Sachen dort. Es ist jedoch einfacher, extrem angepasste Apps in Word zu erstellen, als Wordpress imho zu sagen.
Von Leuten, mit denen ich gesprochen habe, die von PHP zu Wt gewechselt sind (ein C ++ - Web-Framework), wurden signifikante Verbesserungen gemeldet. Von den kleinen Anwendungen, die ich mit Wt erstellt habe, um es zu lernen, habe ich gesehen, dass es schneller läuft als die gleichen PHP-Anwendungen, die ich erstellt habe. Nehmen Sie die Informationen für das, was Sie wollen, aber ich bin verkauft.
Das erinnert mich daran, wie vor 20-30 Jahren die Leute Assembly vs C und dann vor 10-20 Jahren C vs C ++ gesetzt haben. Natürlich ist C ++ schneller als PHP / Rails, aber es wird 5-mal mehr Aufwand erfordern, um wartbare und skalierbare Anwendungen zu erstellen.
Der Punkt ist, dass Sie eine Leistungsverbesserung von 20-30% erhalten, während Sie Ihre Entwicklungsressourcen opfern. Würden Sie Ihre App lieber 30% schneller arbeiten lassen oder 1/2 der Funktionen implementiert haben?
Die meisten Webanwendungen sind netzwerkgebunden statt prozessorgebunden. Das Schreiben Ihrer Anwendung in C ++ anstelle einer höheren Programmiersprache macht wenig Sinn, wenn Sie nicht wirklich viel rechnen. Außerdem ist es schwierig, korrekte C ++ - Programme zu schreiben. Es wird länger dauern, um die Anwendung zu schreiben, und es ist wahrscheinlicher, dass das Programm auf spektakuläre Weise durch missbrauchte Zeiger, Speicherfehler, undefiniertes Verhalten etc. versagt. Im Allgemeinen würde ich sagen, dass es sich nicht lohnt.
Immer wenn Sie eine Ebene der interpretativen oder OS-Abstraktion eliminieren, werden Sie sicherlich einen Leistungsgewinn erzielen. Davon abgesehen bedeutet die Sprache oder Technologie nicht automatisch, dass alle Ihre Probleme gelöst sind. Ich habe C ++ - Code korrigiert, der viele Stunden für die Verarbeitung einer relativ einfachen Menge von Datensätzen benötigte. Das Problem lag in der Implementierung, und die Fehlerbehebung bezog sich nicht auf die Funktionen oder Einschränkungen der Sprache.
Wenn Sie davon ausgehen, dass alles korrekt implementiert ist, werden Sie sicher eine bessere Leistung erzielen. Das Problem wird darin bestehen, die Fehler zu finden. Eines der Probleme mit C ++ besteht darin, dass viele Entwickler derzeit "trainiert" oder daran gewöhnt sind, viele Details bezüglich der Speicherverwaltung hinter Objekten zu haben. Dadurch entfällt die Notwendigkeit, Dinge wie "Was kann passieren, wenn ich diesen Zeiger an mehrere Threads weiterleite" zu berücksichtigen. Manchmal funktioniert es gut, aber nicht immer. Sie haben immer noch einige Feinheiten der Sprache, die Sie berücksichtigen müssen, unabhängig davon, wie die Objekte die unangenehmen Details verbergen.
Nach meiner Erfahrung brauchen Sie mehrere erfahrene C ++ - Entwickler, die den Code überwachen, um die Bugs und Speicherlecks nicht aus dem Ruder laufen zu lassen.
Ich bin sicher nicht verkauft. Wenn Sie einen Leistungsgewinn gegenüber PHP wollen, warum nicht ein Java (oder besser Scala) Framework verwenden? Diese sind viel besser für Web-Entwicklung, haben nette, relativ einfach zu bedienende Frameworks und vermeiden viele Kopfschmerzen von C ++. Ich habe immer einen der Hauptgründe der Web-Entwicklung gesehen (und die meisten modernen nicht-wissenschaftlichen / Hochleistungsanwendungen), die Kopfschmerzen vermeiden zu können, die mit der C / C ++ - Entwicklung einhergehen.