Zur Ausführungseffizienz von PHP gibt es viele spezielle Artikel im Internet, bei denen es sich größtenteils um Debatten zwischen PHP- und Java-Lagern handelt. Unterschiedliche Anwendungsaspekte und unterschiedliche Ausführungsumgebungen führen zu größeren Unterschieden in der Effizienz. Die hier erwähnten „großen“ Anwendungen beziehen sich nicht auf die spezifische Implementierung großer Websites wie Google, eBay und Yahoo. Ich hoffe nur, dass Ihr System schneller und reibungsloser läuft und mehr Benutzer online hosten kann PHP kann Anfängern eine kleine Hilfestellung geben.
Die hier erwähnten „großen“ Anwendungen beziehen sich nicht auf die spezifische Implementierung großer Websites wie Google, eBay und Yahoo. Ich habe nicht die Absicht, die Leser davon zu überzeugen, ihre Konzepte und Überzeugungen aufzugeben. Ich hoffe nur, dass alle Systeme schneller laufen können und reibungsloser. Es kann mehr Benutzer online hosten und ich hoffe, dass es PHP-Anfängern helfen kann.
Zur Ausführungseffizienz von PHP gibt es im Internet viele spezielle Artikel, die mit der Debatte zwischen PHP- und Java-Lagern beginnen und mit unsicheren Erwartungen enden. Tatsächlich ist es schwierig, die Ausführungseffizienz eines Programms aus einem Vergleich abzuleiten. Unterschiedliche Anwendungsaspekte und unterschiedliche Ausführungsumgebungen führen zu einem größeren Unterschied in der Effizienz. Und die Effizienz muss ebenfalls abgewogen werden. Jeder weiß, dass Assembler sehr einfach ist und sehr effiziente Programme schreiben kann. Ich habe jedoch selten jemanden gesehen, der Assembler für die Webentwicklung verwendet Effiziente Programmierer scheinen den Respekt aller zu verdienen, haha~ Wir müssen den Unterschied zwischen PHP und Assembler nicht diskutieren, solange wir den Unterschied zwischen unserem eigenen PHP und dem PHP anderer Leute kennen.
Lassen Sie uns zunächst die Prämisse dieses Artikels klarstellen: Es muss einen oder mehrere Server geben, die von Ihnen selbst gesteuert werden können, kein virtueller Host-Bereich. Schließlich gibt es bereits viele klassische Werke und ausgereifte Frameworks für Allzwecksysteme, die auf virtuellen Hosts ausgeführt werden können. Viele ihrer Konzepte wurden auch von vielen aktuellen PHP-Benutzern übernommen und weiterentwickelt. Immer mehr sogenannte „Frameworks“ gibt es, sie sind wie Sterne am Himmel. Ich möchte nicht mehr darüber schreiben, denn erstens ist mein eigenes Niveau nicht sehr gut, ich kann nichts schreiben neu, und selbst wenn ich es schreibe, wird es die Leute zum Lachen bringen. Zweitens gibt es zu viele Artikel darüber und es gibt zu viele Meinungen, die den Tod vieler leidenschaftlicher zukünftiger genialer Programmierer verursachen.
Es gibt einen großen Unterschied in der Effizienzoptimierung zwischen Programmen, die auf einem dedizierten Server ausgeführt werden, und Programmen, die auf einem virtuellen Host ausgeführt werden können. Natürlich können Sie eine Reihe von Discuz auf einem oder sogar mehreren unabhängigen Servern installieren, ohne Änderungen vorzunehmen, aber ist die maximale Leistungsoptimierung wirklich der Fall? Sind Sie dieser Gruppe von Servern wirklich würdig?
Ein unabhängiger Server bedeutet, dass der Benutzer die vollständige Kontrolle über die Maschine hat, einschließlich der Installation und Löschung von Software, der Konfiguration von Systemparametern und sogar der Änderung des Quellcodes. Basierend auf einer solchen offenen Hardwareplattform spiegelt sich die Leistung nicht nur in der Geschwindigkeit wider, sondern umfasst auch Sicherheit, Stabilität usw. Im Gegensatz zu virtuellen Hosts müssen Benutzer Webserver-Parameter konfigurieren, PHP und Datenbanken installieren und konfigurieren und alle möglichen chaotischen Dinge (wie ich gerne sage) installieren, und natürlich müssen sie dafür verantwortlich sein.
Lassen Sie uns zunächst einige Begriffe vorschlagen: Ausführungszeit, Vorlage, Datenbankkapselung, Cache, Puffer, Hash, Daemon und Crontab.
Jeder weiß, dass die Ausführungszeit die Zeit ist, die ein Programm benötigt, um vom Anfang bis zum Ende ausgeführt zu werden. Da das Web flüchtig und zustandslos ist, ist die Ausführungszeit ein Indikator für die Effizienz der Webprogrammausführung. Sie eignet sich nicht zur Messung von C/S-Programmen oder Hintergrund-Daemon-Programmen, da viele von ihnen kontinuierlich ausgeführt werden. Ein typisches Beispiel für die Seitenausführungszeit ist die Zeitanzeige unten auf der Discuz-Forumsseite. Normalerweise beträgt Discuz einige Millisekunden bis zu mehreren zehn Millisekunden, abhängig von der verwendeten Plattform, der Datenmenge und dem aktuellen Systemdruck.
Jeder kennt Vorlagen. Obwohl viele Menschen sie einfach verwenden, wissen sie nicht, warum sie sie verwenden. Vorlagen sind traditionell eine Möglichkeit, logische Schichten in der oberen MVC-Struktur zu unterteilen. Sie trennen die Präsentationsschicht von der unteren Schicht und erleichtern so die Arbeitsteilung zwischen Programmierern und Schnittstellendesignern. In vielen Fällen ist die unsachgemäße Verwendung von Vorlagen jedoch mittlerweile zum Hauptverursacher des gegenseitigen Hasses zwischen Programmierern und Künstlern geworden, anstatt die Arbeitsteilung und Zusammenarbeit zwischen Programmierern und Schnittstellendesignern zu fördern (ich glaube, ich habe dies bereits gesagt). (ein früherer Beitrag) beschweren sich viele Leute darüber, dass sie viel Zeit mit dem Organisieren von Vorlagen verbringen müssen.
Die Datenbankkapselung scheint eher mit Java zu tun zu haben. Sie bietet eine einheitliche Aufrufschnittstelle für verschiedene Datenbanksysteme. In der Regel erledigen einige gekapselte Klassen auch einige Aufgaben wie SQL-Prüfung, Filterung usw. DB-Verpackung, PEAR DB, Adodb usw. in PHPLIB sind alle bekannt und werden von vielen Menschen verwendet.
Cache und Buffer scheinen dasselbe zu sein, Cache heißt Cache und Buffer heißt Pufferung. Im Hardware-Konzept besteht der Zweck von Cache darin, zwei Geräte mit unterschiedlichen Geschwindigkeiten zu verbinden, z. B. Register und Speicher, CPU und PCI-Bus, IDE-Bus und Festplatte. Die ursprüngliche Bedeutung von Buffer ist ein federartiger Puffer, der dazu dient, den Stoß eines Aufpralls zu reduzieren oder zu absorbieren. Puffer ist eine Datenvorabzugriffsmethode, mit der Daten vorübergehend gespeichert und mit einer anderen Geschwindigkeit als der Empfangsgeschwindigkeit übertragen werden. Die Pufferaktualisierungsmethode kann je nach Zeitintervall automatisch aktualisiert werden, während der Cache mehr auf die „Trefferquote“ achtet und eine kleine Datenmenge, die im aktuellen Zeitraum häufig verwendet wird, zum einfachen Lesen auf ein Hochgeschwindigkeitsgerät überträgt und Schreiben. Obwohl es in der Programmentwicklung keine Hochgeschwindigkeits- oder Niedriggeschwindigkeitsgeräte gibt, können Datenquellen unterschiedliche Lese- und Schreibeffizienzen aufweisen. Bei kleinen Datenmengen ist das Lesen und Schreiben von Textdateien normalerweise effizienter als der Datenbankzugriff, und die gleiche Effizienz beim Lesen und Schreiben von Textdateien auf tmpfs ist besser als die Effizienz der direkten Festplatten-E/A. Der Puffer spiegelt sich eher in der Prozesskommunikation und in Warteschlangen wider. In vielen Fällen liegt dies nicht daran, dass der Empfänger nicht schneller lesen kann, sondern daran, dass keine Notwendigkeit besteht, schneller zu lesen.
Ein Daemon-Prozess ist ein Programm, das kontinuierlich im Hintergrund ausgeführt wird. Er spielt normalerweise eine Rolle bei der Überwachung, Steuerung von Prozessen und der Bereitstellung externer Dienste. Beispielsweise kann Apache selbst als Daemon-Prozess verstanden werden, obwohl er tatsächlich aus vielen Prozessen besteht, die häufig aktualisiert werden (der Hauptprozess ist fest).
Crontab ist ein geplantes UNIX/Linux-Programm, das den „geplanten Aufgaben“ von Windows ähnelt. Es legt ein bestimmtes Zeitintervall oder einen bestimmten Zeitpunkt für die Ausführung eines bestimmten Programms fest. Es wird normalerweise verwendet, um automatische Aktualisierungen durchzuführen, temporäre Daten zu löschen und andere Vorgänge, die automatisch einmal in einem bestimmten Zeitraum ausgeführt werden.
Ein weiteres besonderes Konzept (insbesondere für Leute, die an die allgemeine Systementwicklung gewöhnt sind) besteht darin, dass wir uns nicht auf die Funktionen beschränken müssen, die PHP bereitstellen kann, nachdem wir über einen unabhängigen Server verfügen Wir müssen hart daran arbeiten, dies zu realisieren. Es gibt viele Dinge, die wir nutzen können. PHP ist nicht allmächtig (das ist sicher), und seine funktionalen Mängel können durch Perl vollständig ausgeglichen werden. Als allgemeine Sprache kann Perl mehr funktionale Optionen bieten, und seine Module sind so dicht wie Grit. Die lockere und perverse Sprache bietet endlose Möglichkeiten Energie. Leistungsdefizite von PHP lassen sich mit C ausgleichen. Die Grundlage von PHP ist von C geerbt. PHP selbst wurde ebenfalls von C entwickelt. Es ist völlig sinnvoll, C zur Erweiterung von PHP zu verwenden.
Linux selbst wird von C und Perl unterstützt (ich sage das nicht, um den Status von Perl zu übertreiben. Sie können sehen, wie viele Perl-Skripte es in einem Standard-Linux gibt und ob sich das System ohne Perl wie ein behinderter Mensch anfühlt). PHP hat den größten Teil seiner Syntax von C geerbt und die meisten Web-Features, -Funktionen und das „$“-Symbol, das im Widerspruch zu Open Source zu stehen scheint, von Perl gelernt (PHP war in seinen Anfängen ein Perl-Skript).
Lassen Sie uns einen Teil des Codes analysieren, den ich verwende (Hinweis: Gilt für eigenständige Linux-Server. Ich habe die groß angelegte Entwicklung für Windows und virtuelle Hosts offenbar schon lange aufgegeben). Es werden einige Methoden verwendet, die vertraut, unbekannt oder abnormal sein können. Mein System ist RedHat AS3, nichts Besonderes, die PHP-Version ist 4.4.0, MySQL ist 4.1. Ich schreibe nie absichtlich Code, der die neuen Funktionen von PHP5 nutzen muss, es sei denn, es ist wirklich notwendig.
Mein Web-Root-Verzeichnis befindet sich unter /www. Apache und PHP sind standardmäßig unter /usr/local/ installiert, und ich belasse es auch dort. Da es nur zum Testen dient, möchte ich nicht, dass es chaotisch aussieht. Bei tatsächlichen Projekten, insbesondere bei mehreren Servern, müssen Sie Ihr System gut bereitstellen.
Um die Struktur des Systems übersichtlicher zu gestalten, lege ich alle Dateien, die ich verwenden muss, in das sekundäre Verzeichnis.
Hier sind einige Ausschnitte aus der gemeinsamen Header-Datei /includes/kernel/common.inc.php:
﹤?php
if (!definiert('IN_BSG')) {
Ausfahrt;
}
?﹥
Der obige Code stellt sicher, dass er nur von legalen Programmen aufgerufen werden kann und nicht in andere Dateien eingebunden wird. Wenn das ausführende Programm keine „IN_BSG“-Konstante definiert, wird es nach dem Einbinden dieser common.inc.php beendet.
﹤?php
list($usec, $sec) = explosion(" ", microtime());
$page_time_start = $usec + $sec;
?﹥
Jeder kennt möglicherweise diese beiden Zeilen, mit denen die Startausführungszeit des Programms berechnet wird. Vor dem Ende des Programms wird dieser erneut berechnet, um die Zeit zu ermitteln, die für die Ausführung des Programms benötigt wurde. Wenn Ihnen das egal ist, können Sie es getrost auskommentieren.