Die Leistung von Webanwendungen wird von vielen Faktoren beeinflusst. Datenbankzugriffe, Dateisystemvorgänge, Netzwerkbandbreite usw. sind potenzielle Einflussfaktoren. Yii hat die Leistungsauswirkungen von Frameworks in verschiedener Hinsicht reduziert. Aber es gibt immer noch viele Stellen in Benutzeranwendungen, die verbessert werden können, um die Leistung zu verbessern.
Die Aktivierung der PHP-APC-Erweiterung ist wahrscheinlich der einfachste Weg, die Gesamtleistung einer Anwendung zu verbessern. Diese Erweiterung speichert und optimiert PHP-Zwischencode und vermeidet den Zeitaufwand für das Parsen von PHP-Skripten für jede neue Anfrage.
Das Deaktivieren des Debug-Modus ist eine weitere einfache Möglichkeit, die Leistung zu verbessern. Wenn die Konstante YII_DEBUG
auf true gesetzt ist, wird diese Yii-Anwendung im Debug-Modus ausgeführt. Der Debug-Modus ist während der Entwicklungsphase nützlich, beeinträchtigt jedoch die Leistung, da einige Komponenten zusätzlichen Systemaufwand verursachen. Beispielsweise protokolliert der Nachrichtenlogger zusätzliche Debugging-Informationen für jede protokollierte Nachricht.
yiilite.php
Wenn die PHP-APC-Erweiterung aktiviert ist, können wir yii.php
durch eine andere Boot-Datei mit dem Namen yiilite.php
ersetzen, um die Leistung von Yii-basierten Anwendungen weiter zu verbessern.
Datei yiilite.php
ist in jeder Yii-Version enthalten. Es handelt sich um eine zusammengeführte Datei einiger häufig verwendeter Yii-Klassendateien. In der Datei werden Kommentare und Trace-Anweisungen entfernt. Daher verringert die Verwendung von yiilite.php
die Anzahl der referenzierten Dateien und vermeidet die Ausführung von Trace-Anweisungen.
Beachten Sie, dass die Verwendung von yiilite.php
ohne Aktivierung von APC tatsächlich zu einer Leistungseinbuße führt, da yiilite.php
einige Klassen enthält, die nicht für jede Anfrage erforderlich sind, was zusätzliche Analysezeit in Anspruch nimmt. Beachten Sie außerdem, dass die Verwendung von yiilite.php
auf einigen Serverkonfigurationen langsamer ist, selbst wenn APC aktiviert ist. Am besten führen Sie ein Benchmark-Programm mit hello world
aus der Demo aus, um zu entscheiden, ob Sie yiilite.php
verwenden möchten.
Wie im Caching-Kapitel erwähnt, bietet Yii mehrere Caching-Lösungen, die die Leistung effektiv verbessern können. Wenn die Generierung einiger Daten lange dauert, können wir die Häufigkeit der Datengenerierung mithilfe der Daten-Cache-Methode verringern Eine ganze Seite bleibt relativ fest. Wenn dies behoben ist, können wir die Seiten-Caching-Methode verwenden, um die Kosten für das Seitenrendering zu sparen.
Wenn die Anwendung Active Record verwendet, sollten wir den Datenstruktur-Cache aktivieren, um beim Parsen der Datentabellenstruktur Zeit zu sparen. Dies kann erreicht werden, indem die CDbConnection::schemaCachingDuration-Eigenschaft auf einen Wert größer als 0 festgelegt wird.
Zusätzlich zu diesen Caching-Technologien auf Anwendungsebene können wir auch Caching-Lösungen auf Service-Ebene nutzen, um die Anwendungsleistung zu verbessern. Tatsächlich fällt der zuvor beschriebene PHP-APC-Cache in diese Kategorie. Es gibt auch andere Servertechnologien wie Zend Optimizer, eAccelerator, Squid und andere, die nicht einzeln aufgeführt sind.
Das Abrufen von Daten aus der Datenbank ist oft der größte Engpass einer Netzwerkanwendung. Obwohl die Verwendung von Caching Leistungseinbußen reduzieren kann, löst sie das zugrunde liegende Problem nicht. Wenn die Datenbank eine große Datenmenge enthält und die zwischengespeicherten Daten ungültig sind, ist das Abrufen der neuesten Daten ohne ein gutes Datenbank- und Abfrageoptimierungsdesign sehr ressourcenintensiv.
Intelligent gestaltete Indizes in einer Datenbank. Ein Index kann SELECT
-Abfragen schneller machen, aber er kann INSERT
-, UPDATE
- oder DELETE
-Abfragen langsamer machen.
Für komplexe Abfragen wird empfohlen, eine Datenbankansicht dafür zu erstellen, anstatt Abfrageanweisungen über PHP-Code zu generieren und sie vom DBMS wiederholt analysieren zu lassen.
Missbrauchen Sie Active Record nicht. Obwohl Active Record Daten gut im OOP-Stil modellieren kann, reduziert es tatsächlich die Leistung, da ein oder mehrere Objekte erstellt werden müssen, um jedes Abfrageergebnis darzustellen. Für datenintensive Anwendungen ist die Verwendung von DAO oder Datenbankschnittstellen auf der untersten Ebene die bessere Wahl.
Zu guter Letzt verwenden Sie SELECT
in Ihrer LIMIT
-Abfrage. Dadurch wird vermieden, dass zu viele Daten aus der Datenbank abgerufen werden und der für PHP zugewiesene Speicher erschöpft wird.
Komplexe Seiten erfordern oft die Einführung vieler externer JavaScript- und CSS-Dateien. Da jede Datei einen zusätzlichen Roundtrip verursacht, sollten wir die Anzahl der Skriptdateien durch Kombinieren von Dateien minimieren. Wir sollten auch darüber nachdenken, die Größe jeder Skriptdatei zu reduzieren, um die Netzwerkübertragungszeit zu verkürzen. Es gibt viele Tools, die dabei helfen, beide Aspekte zu verbessern.
Bei einer von Yii generierten Seite bilden einige Skriptdateien eine Ausnahme, die von Komponenten gerendert werden, die wir nicht ändern möchten (z. B. Yii-Kernkomponenten, Komponenten von Drittanbietern). Um diese Skriptdateien zu minimieren, benötigen wir zwei Schritte.
Hinweis: Die unten beschriebenen
scriptMap
-Funktionen werden seit Version 1.0.3 unterstützt.
Deklarieren Sie zunächst das zu minimierende Skript, indem Sie das scriptMap-Attribut der Anwendungskomponente clientScript konfigurieren. Dies kann in der Anwendungskonfiguration erfolgen oder im Code konfiguriert werden. Beispiel:
$cs=Yii::app()->clientScript; $cs->scriptMap=array( 'jquery.js'=>'/js/all.js', 'jquery.ajaxqueue.js'=>'/js/all.js', 'jquery.metadata.js'=>'/js/all.js', ...... );
Der obige Code ordnet diese JavaScript-Dateien der URL /js/all.js
zu. Wenn eine dieser JavaScript-Dateien von einer Komponente eingebunden werden muss, fügt Yii diese URL (einmal) anstelle jeder einzelnen Skriptdatei ein.
Zweitens müssen wir ein Tool verwenden, um die JavaScript-Dateien in einer einzigen Datei zu kombinieren (und zu komprimieren) und sie als js/all.js
zu speichern.
Der gleiche Trick funktioniert auch für CSS-Dateien.
Mit Hilfe der Google AJAX Libraries API können wir die Seitenladegeschwindigkeit verbessern. Beispielsweise könnten wir jquery.js
von den Servern von Google statt von unseren eigenen abrufen. Dazu konfigurieren wir zunächst scriptMap
wie folgt:
$cs=Yii::app()->clientScript; $cs->scriptMap=array( 'jquery.js'=>false, 'jquery.ajaxqueue.js'=>false, 'jquery.metadata.js'=>false, ...... );
durch Zuordnen dieser Skriptdateien. Wenn falsch verhindern wir, dass Yii Code generiert, der diese Dateien importiert. Alternativ schreiben wir den folgenden Code in die Seite, um Dateien direkt von Google zu importieren:
<head> <?php echo CGoogleApi::init(); ?> <?php echo CHtml::script( CGoogleApi::load('jquery','1.3.2') . "\n" . CGoogleApi::load('jquery.ajaxqueue.js') . "\n" . CGoogleApi::load('jquery.metadata.js') ); ?> ...... </head>
Das Obige ist der offizielle Leitfaden zum Yii Framework, Serie 52 – Spezialthema: Leistungsoptimierung Inhalte und mehr Für verwandte Inhalte achten Sie bitte auf die chinesische PHP-Website (m.sbmmt.com)!