Ich habe ein freundliches Argument mit einem Kollegen darüber, und meine persönliche Meinung ist, dass eine mit ASP.NET-MVC kompilierte Webanwendung effizienter / schneller ausgeführt werden würde als dasselbe Projekt, das in PHP geschrieben wurde. Mein Freund ist anderer Meinung.
Leider habe ich keine soliden Daten, mit denen ich meine Argumentation stützen kann. (er auch nicht)
Zu diesem Zweck habe ich bei Google nach Antworten gesucht, um Beweise zu finden, die ihn als falsch erweisen, aber die meiste Zeit hat sich die Debatte in die Plattform verwandelt, auf der es besser ist, Kosten, Sicherheitsfunktionen usw. zu entwickeln Argument Das interessiert mich wirklich nicht.
Ich möchte wissen, was die Stack-Overflow-Community von der Geschwindigkeit / Effizienz von Websites im Allgemeinen hält, die in ASP.NET mit MVC entwickelt wurden, im Vergleich zu genau derselben Website, die mit PHP entwickelt wurde.
Hat jemand praktische Beispiele in realen Szenarien, in denen die Leistung der beiden Technologien verglichen wird?
(Mir ist klar, dass dies für einige von Ihnen ein irrelevantes und vielleicht dummes Argument sein mag, aber es ist ein Argument, und ich würde immer noch gerne die Antworten der feinen Leute hier bei SO hören.)
Antworten:
Es ist schwierig, einen Vergleich anzustellen, da Unterschiede in den jeweiligen Stapeln bedeuten, dass Sie am Ende dasselbe anders machen und wenn Sie sie zum Vergleich gleich machen, ist dies kein sehr realistischer Test.
PHP, das mir gefällt, wird in seiner grundlegendsten Form mit jeder Anfrage geladen, interpretiert und dann verworfen. In dieser Hinsicht ist es CGI sehr ähnlich (was keine Überraschung ist, wenn man bedenkt, dass es ungefähr 15 Jahre alt ist).
Im Laufe der Jahre wurden verschiedene Optimierungen vorgenommen, um die Leistung zu verbessern, insbesondere das Opcode-Caching mit APC (so sehr, dass APC ein Standardbestandteil von PHP 6 und kein optionales Modul wie jetzt sein wird).
Dennoch sind PHP-Skripte grundsätzlich vorübergehend. Sitzungsinformationen sind (normalerweise) dateibasiert und schließen sich gegenseitig aus (session_start () blockiert andere Skripte, die auf dieselbe Benutzersitzung zugreifen, bis session_commit () oder das Skript beendet ist), während dies in ASP.NET nicht der Fall ist. Abgesehen von Sitzungsdaten ist es ziemlich einfach (und normal), Objekte im Anwendungskontext in ASP.NET zu haben (oder Java, dem ASP.NET viel ähnlicher ist).
Dies ist ein wesentlicher Unterschied. Beispielsweise ist der Datenbankzugriff in PHP (unter Verwendung von MySQL, MySQL, PDO usw.) vorübergehend (ungeachtet dauerhafter Verbindungen), wohingegen .Net / Java fast immer dauerhafte Verbindungspools verwendet und darauf aufbaut, um ORM-Frameworks und dergleichen zu erstellen. Die Caches, für die keine bestimmte Anforderung besteht.
Als Plattform mit Bytecode-Interpretation ist ASP.NET theoretisch schneller, aber die Grenzen der Möglichkeiten von PHP sind so hoch, dass sie für die meisten Menschen irrelevant sind. 4 der 20 meistbesuchten Websites im Internet sind beispielsweise PHP. Entwicklungsgeschwindigkeit, Robustheit, Betriebskosten der Umgebung usw. sind in der Regel weitaus wichtiger, wenn Sie mit der Skalierung beginnen, als theoretische Geschwindigkeitsunterschiede.
Denken Sie daran, dass .Net primitive Typen, Typensicherheit und solche Dinge hat, die Code schneller machen, als PHP ihn ausführen kann. Wenn Sie einen etwas unfairen Test durchführen möchten, sortieren Sie auf beiden Plattformen ein Array von einer Million zufälligen 64-Bit-Ganzzahlen. ASP.NET wird es beenden, da es sich um primitive Typen handelt und einfache Arrays effizienter sind als die assoziativen Arrays von PHP (und alle Arrays in PHP sind letztendlich assoziativ). Außerdem hat PHP unter einem 32-Bit-Betriebssystem keine native 64-Bit-Ganzzahl und leidet daher sehr darunter.
Es sollte auch darauf hingewiesen werden, dass ASP.NET vorkompiliert ist, während PHP im laufenden Betrieb interpretiert wird (ausgenommen Opcode-Caching), was einen Unterschied machen kann, aber die Flexibilität von PHP in dieser Hinsicht ist eine gute Sache. Es ist großartig, ein Skript bereitstellen zu können, ohne den Server zu bouncen. Lass es einfach fallen und es funktioniert. Brillant. Aber letztendlich ist es weniger performant.
Letztendlich, obwohl ich denke, dass Sie darüber streiten, was wirklich ein irrelevantes Detail ist.
quelle
ASP.NET läuft schneller. Die ASP.NET-Entwicklung ist schneller. Kaufen Sie einen schnellen Computer und genießen Sie ihn, wenn Sie ernsthafte geschäftliche Webanwendungen ausführen
ASP.NET-Code wird im Vergleich zu PHP viel schneller ausgeführt, wenn er im Release-Modus erstellt, optimiert, zwischengespeichert usw. usw. Für Websites (außer Big Player wie Facebook) ist dies jedoch weniger wichtig - die meiste Zeit für das Rendern von Seiten ist Zugriff auf und Abfrage der Datenbank.
Beim Verbinden der Datenbank ist ASP.NET viel besser - in asp.net verwenden wir normalerweise LINQ, das unsere Objektabfragen in gespeicherte Prozeduren in der SQL Server-Datenbank übersetzt. Auch die Verbindung zur Datenbank ist dauerhaft, eine für eine Website, es ist keine erneute Verbindung erforderlich.
Im Vergleich dazu kann PHP keine SQL Server-Verbindung zwischen Anforderung halten, es stellt eine Verbindung her, holt Daten von der Datenbank und zerstört sie, wenn das erneute Verbinden der Datenbank häufig 20 bis 30% der Zeit für das Rendern von Seiten ausmacht.
Außerdem wird die gesamte Webanwendungskonfiguration bei jeder Anforderung in PHP neu geladen, wo sie in asp.net im Speicher verbleibt. Es kann leicht in großen Unternehmens-Frameworks wie symfony / symfony2 gesehen werden. Eine Menge Renderzeit ist symfony-interner Prozess, bei dem asp.net es einmal lädt und Ihren Server nicht für nutzlose Arbeit verschwendet.
ASP.NET kann Objekte im Cache im Anwendungsspeicher speichern - in PHP müssen Sie sie in Dateien schreiben oder Hack-ähnlichen Memcache verwenden. Die Verwendung von Memcache ist eine Menge Arbeit mit Parallelitäts- und Gefahrenproblemen (das Speichern des Cache in Dateien hat auch eigene Probleme mit der Parallelität - jede Anforderung startet einen neuen Thread des Apache-Servers und viele Anforderungen können gleichzeitig ausgeführt werden - Sie müssen über die Parallelität zwischen diesen nachdenken Threads, es nimmt viel Entwicklungszeit in Anspruch und funktioniert nicht immer, da PHP keine Mutex-Mechanismen in der Sprache hat, so dass Sie in keiner Weise kritische Abschnitte erstellen können.
Jetzt etwas zur Entwicklungsgeschwindigkeit: ASP.NET verfügt über zwei Hauptframeworks (Webforms und MVC), die in einer Umgebung installiert sind, in der Sie in PHP ein Open-Source-Framework benötigen. Es gibt kein Standard-Framework in PHP wie in asp.NET.
Die ASP.NET-Sprache ist so umfangreich, dass die Standardbibliothek Lösungen für häufig auftretende Probleme bietet, bei denen die PHP-Standardbibliothek ... nackt ... ist und nicht eine Namenskonvention beibehalten kann.
.NET verfügt über Typen, bei denen PHP dynamisch ist. Dies bedeutet, dass Sie den Quellcode erst dann steuern können, wenn Sie ihn ausführen oder Komponententests schreiben.
.NET hat eine großartige IDE, bei der PHP-IDEs durchschnittlich oder durchschnittlich gut sind (PHPStorm ist immer noch viel schlechter als VS + Resharper oder sogar ohne).
PHP-Gerüste in Symfony werden über die Befehlszeile ausgelöst, wenn ASP.NET-Gerüste in die Umgebung integriert werden.
Wenn Sie einen langsamen Computer wie meinen haben (ein Kern mit 2,2 GHz), kann die Entwicklung von asp.net-Seiten schmerzhaft sein, da Sie Ihr Projekt bei jeder Änderung des Quellcodes neu kompilieren müssen, wobei der PHP-Code sofort aktualisiert wird.
Die Syntax der PHP-Sprache ist im Vergleich zur C # -Syntax so unvollendet, unsicher und nackt. Starke C # -Typen und viele flexible Sprachfunktionen können Ihre Entwicklung beschleunigen und Ihren Code weniger fehlerhaft machen.
quelle
Nach meiner (nicht fest markierten) Erfahrung kann Asp.Net PHP in Bezug auf die Geschwindigkeit schnell übertreffen (und in einigen Bereichen sogar übertreffen). Ähnlich wie bei vielen anderen Fragen zur Wahl der Sprache ist die folgende Aussage (in diesem Fall) (meiner Meinung nach) gültig:
Was ich damit sagen will: Die (Talente des) Entwicklers beeinflussen die Gesamtgeschwindigkeit mehr als die Wahl zwischen zwei (in einem abstrakten Ausmaß ungefähr gleichwertigen) Technologien.
In der Tat ist ein Vergleich der Gesamtgeschwindigkeit nicht sehr sinnvoll, da sich beide auf die eine oder andere Weise einholen können, es sei denn, Sie befinden sich in einer ganz bestimmten Fachnische (über die Sie uns nicht informiert haben).
quelle
Ich habe einen Leistungstest durchgeführt.
Programm: Summe von 10000000 Zahlen
Die gegebene Ausgabe beweist, dass PHP langsamer als C # ist ............
quelle
Ich würde ASP.net sagen
Dinge, die man beachten muss:
Zugegeben, die Unterschiede sind sehr gering. Beides hat Vorteile. Ich denke, PHP ist viel einfacher bereitzustellen und kann auf jedem Server ausgeführt werden, nicht nur auf IIS. Ich mag ASP.net MVC allerdings sehr gern.
quelle
Ohne Optimierungen würde eine .net-kompilierte App natürlich "schneller" laufen als PHP. Aber Sie haben Recht, dass es ein dummes und irrelevantes Argument ist, weil es keinen Einfluss auf die reale Welt hat, außer Rechte zu prahlen.
quelle
Ich bin ein Entwicklerexperte für beide Technologien (ASP.Net c # und PHP5). Nach Jahren und Jahren des Arbeitens und Vergleichens in realen Produktionsumgebungen sind dies meine Eindrücke:
Erstens kann man sie nicht vergleichen, indem man eine Schleife mit addierenden Werten von 1.000.000 erstellt. Dies ist kein realer Fall.
Ist es nicht dasselbe, sie in meiner Entwicklungsumgebung zu vergleichen, als eine echte Produktionsumgebung. Beispiel: In der Entwicklung verwendet ASP.Net standardmäßig kein IIS. Verwenden Sie einen Server für die innere Entwicklung mit unterschiedlichen Optimierungen. In dev gibt es keine Parallelität.
Meine Meinung ist also die nächste:
Das 1.000.000-fache Schleifen von c # wird schneller sein (sinnlos)
Das Bereitstellen einer realen Seite, die auf die Datenbank zugreift, Bilder anzeigt, Formulare usw. hat. ASP.Net ist langsamer als PHP.
Das Gewicht von ASPX-Seiten ist x10 schwerer als das von PHP, sodass der Endbenutzer länger auf das Abrufen der Seite warten muss.
ASPX ist langsamer zu entwickeln als PHP, dies ist wichtig, weil am Ende Geld ist. Wir entwickeln in PHP eine 35% schnellere Entwicklung als in ASP.Net, da jedes Mal, wenn Sie smthg überprüfen möchten, kompiliert und neu gestartet werden muss.
In großen Projekten ist ASP.Net langfristig besser geeignet, um Fehler zu vermeiden, und verfügt über eine komplexe Architektur.
Aufgrund von Windows-Servern, IIS usw. benötigen Sie am Ende einen leistungsstarken Server, um die gleiche Anzahl von Benutzern auf ASP zu halten wie auf PHP. Beispiel: Wir arbeiten mit ASP.net bei ungefähr 20.000 gleichzeitigen Benutzern, und in PHP kann derselbe Server ungefähr 30.000 Benutzer erreichen.
Das einzig Wichtige ist nicht, wenn eine Schleife schneller ist. Die Sache ist, wenn die Website echt ist und in Produktion ist, wie viele Benutzer sie halten können, wie schwer die Seite ist (schwerer == mehr Wartezeit von Benutzern, mehr Nettoladung des Servers, mehr Festplattengebühr des Servers, mehr Speichergebühr von Server). Versuchen Sie die Überprüfungszeiten mit Parallelität und Sie werden sehen.
Ich hoffe es hilft.
quelle
Im Allgemeinen bietet ASP.Net auf einer bestimmten Hardware eine bessere Leistung als PHP. ASP.Net MVC kann es noch besser machen (kann hier das operative Wort sein). Der größte Teil der Plattform wurde für die Unternehmensentwicklung entwickelt. Testbarer Code, Trennung von Bedenken usw. Ein Großteil des Aufblähens in ASP.Net stammt aus dem Objektstapel innerhalb der Seite (verschachtelte Steuerelemente). Das Vorkompilieren macht dies leistungsfähiger, kann jedoch ein Schlüsselproblem sein. MVC ermöglicht in der Regel weniger Verschachtelung mithilfe der Webforms-basierten Ansichts-Engine (andere sind verfügbar).
Die größten Verlangsamungen bei Webanwendungen sind in der Regel Remotedienste, insbesondere die Datenbankpersistenz. PHP wird ohne den Vorteil von Verbindungspooling oder In-Memory-Sitzungsstatus programmiert. Dies kann mit zwischengespeicherten und anderen leistungsfähigeren Service-Layern (auch für .Net verfügbar) überwunden werden.
Es kommt wirklich auf die Besonderheiten einer Site / Anwendung an. Auf dieser Seite läuft MVC auf recht bescheidener Hardware recht gut. Eine ähnliche Site unter PHP würde wahrscheinlich unter ihr eigenes Gewicht fallen. Andere Dinge zu beachten. IIS vs. Apache vs. LightHTTPD usw. Ehrlich gesagt ist das PHP vs. Asp.net viel mehr als nur rohe Leistungsunterschiede. PHP eignet sich nicht so gut für große, komplexe Anwendungen wie asp.net mvc, es ist so einfach ... Dies selbst hat mehr mit VS + SCC zu tun als alles andere.
quelle
Ich stimme Ihnen eher zu (dass ASP.NET MVC schneller ist), aber warum nicht eine freundliche Wette mit Ihrem Freund abschließen und die Ergebnisse teilen? Erstellen Sie eine wirklich einfache DYNAMISCHE Seite, die aus einer MySQL-Datenbank abgeleitet ist, und laden Sie die Seite mehrmals.
Erstellen Sie beispielsweise eine Tabelle mit 1.000.000 Zeilen, die einen sequentiellen Primärschlüssel und anschließend ein zufälliges # in der zweiten Spalte enthält. Jede Ihrer Sites kann den Primärschlüssel in einem GET akzeptieren, die Zufallszahl basierend auf dem übergebenen Schlüssel abrufen und die Zufallszahl in einer Art dynamisch generiertem HTML anzeigen.
Ich würde gerne die Ergebnisse erfahren ... und wenn Sie einen Blog oder ähnliches haben, würde dies auch der Rest der Welt tun (diese Frage wird ständig gestellt).
Es wäre sogar noch besser, wenn Sie diese einfache kleine App auch in normalem ASP erstellen könnten. Ich würde Sie sogar für diese Ergebnisse bezahlen, wenn der Test gut gestaltet wäre. Im Ernst - drücken Sie hier einfach Ihr Interesse aus und ich sende Ihnen meine E-Mail.
quelle
Beachten Sie, dass die Frage .NET MVC vs PHP ist, nicht .NET (Web Forms) vs PHP. Ich habe keine Fakten, aber das allgemeine Gefühl ist, dass PHP-Websites schneller ausgeführt werden als .NET-Webformularseiten (und ich mache nur .NET). .NET-Webformulare sind trotz Kompilierung und Interpretation von PHP im Allgemeinen langsam, da der gesamte Codeabschnitt, der von der .NET-Engine automatisch generiert wird, um den HTML-Code für jedes <asp: control> zu rendern, das Sie im Entwurfsmodus verwenden. Ein .NET-Webformular dazu zu bringen, schnell mit PHP zu konkurrieren, ist eine völlige Störung, die mit dem Setzen von EnableViewState = false beginnt und dazu führen kann, dass jedes HTML-Steuerelement mit runat = server verwendet wird ... verrückt, oder?
Nun, MVC ist eine andere Geschichte. Ich hatte zwei Websites mit .NET MVC2 erstellt und das Gefühl ist gut. Sie können die Geschwindigkeit jetzt spüren! und Code ist so sauber wie jede PHP-Website. MVC ermöglicht es Ihnen nun, sauberen Code wie PHP zu schreiben, und MVC wird gegen PHP interpretiert. Dies kann nur zu einer Sache führen: MVC ist schneller als PHP ... die Zeit wird es beweisen, wenn der allgemeine Sinn lautet: "MVC-Websites werden ausgeführt." schneller als PHP "dann haben wir recht mit dem, was ich heute hier sage.
wir sehen uns/!
quelle
C ++ ... Im Moment wird der Kampf zwischen PHP und ASP.NET stattfinden. PHP gewinnt an Benutzerfreundlichkeit, ASP.NET an Leistung (in einem Windows Server-Ökosystem). Viele der größeren Websites, die mit PHP begonnen haben, sind auf C ++ umgestiegen.
quelle