Heim  >  Artikel  >  Backend-Entwicklung  >  Große PHP-Website-Leistung und Optimierungslösung für gleichzeitigen Zugriff

Große PHP-Website-Leistung und Optimierungslösung für gleichzeitigen Zugriff

PHPz
PHPznach vorne
2017-03-18 18:07:4413492Durchsuche

Die Optimierung der Website-Leistung ist für große Websites sehr wichtig. Eine langsame Website-Zugriffsgeschwindigkeit führt zu einer hohen Absprungrate, was bei kleinen Websites jedoch leicht zu lösen ist Viele Spalten, Bilder und Bilder sind relativ groß. Wie kann also die Gesamtleistung optimiert werden? Dieser Artikel bietet Ihnen einen umfassenden Plan zur Optimierung der PHP-Website-Leistung und des gleichzeitigen Zugriffs

Große PHP-Website-Leistung und Optimierungslösung für gleichzeitigen Zugriff1. Groß angelegte Strategien zur Verbesserung der Website-Leistung Wenn eine Website einer großen Anzahl von Benutzerbesuchen und vielen gleichzeitigen Anforderungen ausgesetzt ist, konzentrieren sich die grundlegenden Lösungen auf die folgenden Links: Verwendung von Hochleistungsservern, Hochleistungsdatenbanken, hocheffizienten Programmiersprachen und hoch -Performance-Webcontainer. Diese Lösungen bedeuten gewissermaßen höhere Investitionen.

Der Webcontainer ist ein Dienstprogramm. Es gibt ein Programm, das entsprechende Dienste auf einem Port des Servers bereitstellt, und dieses Programm verarbeitet Anforderungen vom Client, wie z. B. dem Tomcat-Container in JAVA, ASPs IIS oder PWS sind alles solche Behälter. Ein Server kann mehrere Container haben.

1. HTML-Statik

Tatsächlich weiß jeder, dass die rein statische HTML-Seite am effizientesten ist und am wenigsten verbraucht wird. Deshalb geben wir unser Bestes, um unsere Website zu erstellen Die Seiten werden mithilfe statischer Seiten implementiert. Diese einfachste Methode ist tatsächlich die effektivste Methode.

2. Trennung von Bildservern

Wie wir alle wissen, verbrauchen Bilder bei Webservern, egal ob es sich um Apache, IIS oder andere Container handelt, die meisten Ressourcen Es ist notwendig, Bilder von Seiten zu trennen. Diese Strategie wird grundsätzlich von großen Websites übernommen. Sie verfügen alle über unabhängige oder sogar mehrere Bildserver. Eine solche Architektur kann den Druck auf das Serversystem, das Seitenzugriffsanfragen bereitstellt, verringern und sicherstellen, dass das System nicht aufgrund von Bildproblemen abstürzt.

Auf Anwendungsservern und Image-Servern können verschiedene Konfigurationsoptimierungen durchgeführt werden. Beispielsweise kann Apache bei der Konfiguration von ContentType so wenige LoadModules wie möglich unterstützen, um einen höheren Systemverbrauch und eine höhere Ausführungseffizienz sicherzustellen.

3. Datenbankcluster, Datenbanktabellen-Hashing

Große Websites verfügen über komplexe Anwendungen, und diese Anwendungen müssen Datenbanken verwenden, wenn sie mit einer großen Anzahl von Zugriffen konfrontiert sind Da eine Datenbank bald nicht mehr in der Lage ist, die Anwendung zu erfüllen, müssen wir Datenbank-Clustering oder Datenbanktabellen-Hashing verwenden.

In Bezug auf Datenbankcluster verfügen viele Datenbanken über ihre eigenen Lösungen, und der häufig verwendete Master/Slave von MySQL ist eine ähnliche Lösung.

Cluster verwenden normalerweise CDN-, GSBL- und DNS-Lastausgleichstechnologie. Jede Region verfügt über eine Front-End-Servergruppe. Beispiel: NetEase und Baidu verwenden die DNS-Lastausgleichstechnologie . Eine Suche Mithilfe der DNS-Ladetechnologie teilen sich alle Kanäle einen Front-End-Servercluster.

Bibliothekstabellen-Hashing ist eine gängige und effektivste Lösung.

Wir installieren Geschäfts- und Anwendungs- oder Funktionsmodule in der Anwendung, um die Datenbank zu trennen. Verschiedene Module entsprechen verschiedenen Datenbanken oder Tabellen und verteilen dann eine bestimmte Seite oder Funktion gemäß einer bestimmten Strategie in kleinere Datenbanken. B. Benutzertabellen, werden anhand der Benutzer-IDs gehasht, was die Systemleistung bei geringen Kosten verbessern und eine gute Skalierbarkeit aufweisen kann.

Sohus Forum verwendet eine solche Struktur, die die Benutzer, Einstellungen, Beiträge und andere Informationen des Forums in der Datenbank aufteilt und dann die Beiträge und Benutzer entsprechend dem Abschnitt und der ID in der Datenbank und der Tabelle speichert. Es kann konfiguriert werden. Durch die einfache Konfiguration in der Datei kann das System jederzeit eine kostengünstige Datenbank hinzufügen, um die Systemleistung zu ergänzen.

4. Caching

Jeder Techniker ist auf das Wort Cache gestoßen, und Cache wird an vielen Stellen verwendet. Caching ist auch in der Website-Architektur und Website-Entwicklung sehr wichtig. Hier sprechen wir zunächst über die beiden grundlegendsten Caches. Erweitertes und verteiltes Caching werden später beschrieben.

Was die Architektur betrifft, weiß jeder, der mit Apache vertraut ist, dass Apache ein eigenes Caching-Modul bereitstellt, und Sie können auch das zusätzliche Squid-Modul zum Caching verwenden. Beide Methoden können die Reaktionsfähigkeit von Apache effektiv verbessern.

Für das Caching bei der Website-Programmentwicklung ist der unter Linux bereitgestellte Memory Cache eine häufig verwendete Caching-Schnittstelle, die in der Webentwicklung verwendet werden kann. Wenn Sie beispielsweise in Java entwickeln, können Sie MemoryCache aufrufen, um einige Daten zwischenzuspeichern und zu teilen . Einige große Gemeinden nutzen eine solche Architektur. Darüber hinaus verfügt jede Sprache bei der Web-Sprachentwicklung grundsätzlich über das Cache-Modul von Pear, und Java ist mit .net noch nicht sehr vertraut, aber ich glaube, dass es vorhanden sein muss.

5. Spiegelung

Spiegelung ist eine Methode, die häufig von großen Websites verwendet wird, um die Leistung und Datensicherheit zu verbessern und das Problem verschiedener Netzwerkzugangsanbieter und geografischer Regionen zu lösen Der Unterschied in den Benutzerzugriffsgeschwindigkeiten, wie z. B. der Unterschied zwischen ChinaNet und EduNet, hat viele Websites dazu veranlasst, Spiegelseiten innerhalb des Bildungsnetzwerks zu erstellen, und die Daten werden regelmäßig oder in Echtzeit aktualisiert.

6. Lastausgleich

Load Balancing wird eine High-End-Lösung für große Websites sein, um Zugriffe mit hoher Auslastung und eine große Anzahl gleichzeitiger Anfragen zu bewältigen.

Lastausgleichstechnologie wird seit vielen Jahren entwickelt und es stehen viele professionelle Dienstleister und Produkte zur Auswahl. Ich persönlich bin auf einige Lösungen gestoßen, und es gibt zwei Architekturen, die als Referenz verwendet werden können jeder

2. PHP-Code-Schreiboptimierung:

1.

Beide Methoden drucken etwas auf der Seite, aber echo gibt keinen Wert zurück und print gibt bei Erfolg oder Misserfolg 0 oder 1 zurück.

2. include_once ist zeitaufwändiger als include.

Weil überprüft werden muss, ob die Klasse, die Sie einschließen möchten, enthalten ist. ​

3. Achten Sie darauf, für lange Absatzzeichenfolgen einfache Anführungszeichen anstelle von doppelten Anführungszeichen zu verwenden.

Weil doppelte Anführungszeichen nach Variablen in der Zeichenfolge suchen. Zum Beispiel: echo ‚This is long string‘.$name ist viel schneller als echo ‚This is long string $name‘.

4. Nicht für Schleifen verwenden, die in Schleifen verschachtelt sind

5. Wenn die Funktion als statisch definiert werden kann

Dann definieren Sie es nicht als Mitgliedsfunktion. Statische Funktionen sind 33 % schneller als Mitgliedsfunktionen. ​

6. Wenn Sie das Problem ohne die Verwendung regulärer Ausdrücke lösen können

, dann verwenden Sie keine regulären Ausdrücke. Reguläre Ausdrücke sind langsamer als die nativen Funktionen von PHP.

Verwenden Sie beispielsweise str_replace anstelle von preg_replae.

7. Versuchen Sie, keine relativen Pfade zu verwenden, um Dateien einzuschließen.

Wenn Sie nach Dateien in relativen Pfaden suchen, durchsuchen Sie diese im aktuellen Verzeichnis und suchen dann noch einmal der Reihe nach. Dadurch wird das Auffinden von Dateien sehr langsam. Es ist am besten, zuerst eine Konstante wie WEB_ROOT zu definieren und diese Konstante dann zum Einbinden der Datei zu verwenden.

8. Kongruente Symbole === sind schneller als gleich ==

Und if(1 == '1′) gibt true zurück, if(0 = = „“) gibt ebenfalls true zurück, während if(1 ==='1′) und if(0===“) beide false zurückgeben, wenn Sie das Kongruenzsymbol verwenden. Daher ist es am besten, das Kongruenzsymbol zu verwenden, wenn Sie einige boolesche Variablen in Ihrem Programm erkennen müssen.

3. Es gibt die folgenden Methoden für thinkphp

1. Deaktivieren Sie den Debugging-Modus

Nachdem Sie den Debugging-Modus deaktiviert haben , Das System generiert automatisch einen Projektkompilierungscache und deaktiviert das Schreiben von Protokollen, wodurch der Aufwand für das Laden von E/A und das Schreiben von Protokollen erheblich reduziert werden kann.

2. Seitenkomprimierungsausgabe aktivieren

Ab Version 3.1 wird der Konfigurationsparameter OUTPUT_ENCODE hinzugefügt, um die Seitenkomprimierungsausgabe zu steuern.

3. Aktivieren Sie das Caching

Die Installation von APC- oder Open-Source-Opcode-Cache/Optimierer, was bedeutet, dass er die Leistung von PHP auf Ihrem Server verbessern kann, indem er die kompilierten PHP-Daten im gemeinsam genutzten Speicher puffert und den gepufferten kompilierten Code direkt verwenden kann, um die Geschwindigkeit zu erhöhen Ihre Seitengenerierungsrate um das Zwei- bis Fünffache, wodurch die Serverlast reduziert wird.

Alternative PHP Cache (APC) ist ein Open-Source-Cache-Tool für PHP, das den PHP-Zwischencode von Opcode zwischenspeichern kann.

4. Feldcache

Standardmäßig wird der Feldcache automatisch generiert. Nach Abschluss der Entwicklung gibt es grundsätzlich weniger Änderungen an der Datenbank Erwägen Sie, den Feldcache mit der entsprechenden Modellklasse zusammenzuführen, um den E/A-Aufwand für jedes Mal, wenn Sie den Feldcache lesen müssen, zu reduzieren. Die Methode zum Zusammenführen besteht darin, die entsprechende Feld-Cache-Datei unter Runtime/Data/_fields

zu finden. 4. Datenbankoptimierung

1. Wählen Sie die richtige Speicher-Engine

Nehmen Sie MySQL als Beispiel, einschließlich zweier Speicher-Engines, MyISAM und InnoDB. Jede Engine hat Vor- und Nachteile.

MyISAM eignet sich für Anwendungen, die eine große Anzahl von Abfragen erfordern. Der Trend von InnoDB wird eine sehr komplexe Speicher-Engine sein, und für einige kleine Anwendungen wird sie langsamer sein als MyISAM. Aber es unterstützt „Zeilensperren“ und Transaktionen.

2. Optimieren Sie den Datentyp des Feldes

Bedenken Sie ein Prinzip: Je kleiner die Spalte, desto schneller. Bei den meisten Datenbank-Engines sind Festplattenvorgänge wahrscheinlich der größte Engpass. Daher kann es in dieser Situation sehr hilfreich sein, Ihre Daten zu komprimieren, da dadurch der Zugriff auf die Festplatte verringert wird.

Wenn eine Tabelle nur wenige Spalten hat (z. B. Wörterbuchtabelle, Konfigurationstabelle), gibt es keinen Grund, INT als Primärschlüssel zu verwenden. Es ist wirtschaftlicher, MEDIUMINT, SMALLINT oder kleiner TINYINT zu verwenden . Manche. Wenn Sie die Zeit nicht im Auge behalten müssen, ist es viel besser, DATE als DATETIME zu verwenden. Natürlich müssen Sie auch genügend Raum für Erweiterungen lassen.

3. Fügen Sie einen Index zum Suchfeld hinzu

Der Index bedeutet nicht unbedingt den Primärschlüssel oder das einzige Feld. Wenn es in Ihrer Tabelle ein Feld gibt, das Sie immer für die Suche verwenden, ist es am besten, es zu indizieren, es sei denn, das Feld, das Sie durchsuchen möchten, ist ein großes Textfeld, dann sollten Sie einen Volltextindex erstellen.

4. Vermeiden Sie die Verwendung von Select *, um weitere Daten aus der Datenbank zu lesen,

Dann wird die Abfrage langsamer. Wenn Ihr Datenbankserver und Ihr WEB-Server außerdem zwei unabhängige Server sind, erhöht dies auch die Belastung der Netzwerkübertragung. Auch wenn Sie alle Felder in der Datentabelle abfragen möchten, sollten Sie versuchen, das Platzhalterzeichen * nicht zu verwenden. Eine sinnvolle Nutzung der integrierten Feldausschlussdefinitionen kann hilfreicher sein.

5. Verwenden Sie ENUM anstelle von VARCHAR

Der ENUM-Typ ist sehr schnell und kompakt. Tatsächlich enthält es einen TINYINT, erscheint jedoch als Zeichenfolge. Auf diese Weise ist es ideal, dieses Feld zum Erstellen einiger Auswahllisten zu verwenden. Wenn beispielsweise die Werte von Feldern wie Geschlecht, ethnische Zugehörigkeit, Abteilung und Status begrenzt und fest sind, sollten Sie ENUM anstelle von VARCHAR verwenden.

6. Verwenden Sie wann immer möglich NOT NULL

Es sei denn, Sie haben einen ganz bestimmten Grund, NULL-Werte zu verwenden, sollten Sie Ihre Felder immer auf NOT NULL belassen. NULL benötigt tatsächlich zusätzlichen Speicherplatz und Ihr Programm wird komplexer, wenn Sie Vergleiche durchführen. Dies bedeutet natürlich nicht, dass Sie nicht NULL verwenden können. Die Realität ist sehr kompliziert und es wird immer noch Situationen geben, in denen Sie NULL-Werte verwenden müssen.

7. Tabellen mit fester Länge sind schneller

Wenn alle Felder in der Tabelle „feste Länge“ haben, wird die gesamte Tabelle als „statisch“ oder „fest“ betrachtet. feste Länge". Beispielsweise enthält die Tabelle keine Felder der folgenden Typen: VARCHAR, TEXT, BLOB. Solange Sie eines dieser Felder einschließen, ist die Tabelle keine „statische Tabelle fester Länge“ mehr und die MySQL-Engine verarbeitet sie auf andere Weise.

Tabellen mit fester Länge verbessern die Leistung, da MySQL schneller sucht. Da diese festen Längen die Berechnung des Offsets der nächsten Daten erleichtern, erfolgt das Lesen natürlich schneller. Und wenn das Feld keine feste Länge hat, muss das Programm jedes Mal, wenn Sie das nächste finden möchten, den Primärschlüssel finden.

Außerdem lassen sich Tabellen mit fester Länge einfacher zwischenspeichern und neu erstellen. Der einzige Nebeneffekt besteht jedoch darin, dass Felder mit fester Länge etwas Platz verschwenden, da Felder mit fester Länge unabhängig davon, ob Sie sie verwenden oder nicht, so viel Platz beanspruchen.

Mit der „vertikalen Teilung“-Technologie können Sie Ihren Tisch in zwei Teile aufteilen, einen mit fester Länge und einen mit variabler Länge.

8. Vertikale Aufteilung

„Vertikale Aufteilung“ ist eine Methode, um die Tabellen in der Datenbank in mehrere Tabellen nach Spalten umzuwandeln, was die Komplexität der Tabelle reduzieren kann Grad und Anzahl der Felder, um Optimierungszwecke zu erreichen.

Zum Beispiel: In der Benutzertabelle gibt es ein Feld mit der Privatadresse. Im Vergleich dazu müssen Sie es nicht lesen oder lesen, wenn Sie in der Datenbank arbeiten Dieses Feld muss häufig umgeschrieben werden. Warum also nicht ihn an einen anderen Tisch legen? Dies führt zu einer besseren Leistung Ihrer Tabelle. Oft werden für die Benutzertabelle nur die Benutzer-ID, der Benutzername, das Kennwort, die Benutzerrolle usw. verwendet. Kleinere Tabellen bieten immer eine bessere Leistung.

Außerdem müssen Sie darauf achten, dass Sie die durch diese getrennten Felder gebildeten Tabellen nicht häufig zusammenführen. Andernfalls ist die Leistung schlechter als bei Nichtteilung geringer Rückgang.

9. EXPLAIN Ihre SELECT-Abfrage

Mit dem Schlüsselwort EXPLAIN erfahren Sie, wie MySQL Ihre SQL-Anweisung verarbeitet. Dies kann Ihnen bei der Analyse der Leistungsengpässe Ihrer Abfrageanweisungen oder Tabellenstrukturen helfen. Aus den Abfrageergebnissen von EXPLAIN erfahren Sie auch, wie Ihr Indexprimärschlüssel verwendet wird, wie Ihre Datentabelle durchsucht und sortiert wird usw. usw.

Normalerweise können wir das Schlüsselwort EXPLAIN am Anfang komplexerer SELECT-Anweisungen hinzufügen, insbesondere solchen mit mehreren Tabellen. Sie können dazu phpmyadmin verwenden. Einzelheiten finden Sie im Anhang „explain.doc“.

Frontend-Optimierung

Nach der Optimierung des Backends und der Datenbank müssen wir als Nächstes vorgehen Die Optimierung der Ausgabeseite umfasst hauptsächlich die Optimierung von Bildern, JS- und Stildateien.

Wir empfehlen die Verwendung der folgenden Tools zum Testen der Webseitenleistung zur Erkennung und Analyse und geben entsprechende Optimierungsvorschläge:

PageSpeed ​​​​Tool, entwickelt von Google

Webmaster und Webentwickler können PageSpeed ​​nutzen, um die Leistung ihrer Webseiten zu bewerten und Empfehlungen zur Leistungsverbesserung zu erhalten.

yslow YSlow

kann die Seiten der Website analysieren und Ihnen sagen, wie Sie anhand bestimmter Regeln optimieren können, um die Website-Leistung zu verbessern.

Verwandte Artikel:
Praxis zur Leistungsoptimierung von PHP-Websites: Praxis zur Optimierung der Ladegeschwindigkeit der Taobao-Homepage

Das obige ist der detaillierte Inhalt vonGroße PHP-Website-Leistung und Optimierungslösung für gleichzeitigen Zugriff. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:php.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen