Heim  >  Artikel  >  Backend-Entwicklung  >  So optimieren Sie die PHP-Leistung

So optimieren Sie die PHP-Leistung

藏色散人
藏色散人Original
2019-01-09 15:52:397685Durchsuche

Bei der Entwicklung PHP-basierter Webanwendungen reicht es nicht aus, nur das Problem und die Projektanforderungen zu lösen. Serverressourcen wie Speicher, Arbeitsspeicher und CPU-Anzahl tragen zum Preis des Hostings bei. Aus diesem Grund sollten Entwickler diese Ressourcen bei der Entwicklung von Webanwendungen berücksichtigen. Darüber hinaus muss die Anwendung reibungslos laufen. Es gibt Hunderte von Möglichkeiten, eine Art Leistungsoptimierung in Webanwendungen durchzuführen. Hier finden Sie eine Zusammenfassung einiger Methoden zur PHP-Leistungsoptimierung.

So optimieren Sie die PHP-Leistung

1. PHP-Version ist sehr wichtig

PHP-Version 7 ist viel schneller als PHP5. Die PHP-Version wird ab der ersten Veröffentlichung zwei Jahre lang vollständig unterstützt. Nachfolgend finden Sie die unterstützten PHP-Versionen.

So optimieren Sie die PHP-Leistung

Bei der Migration zwischen diesen beiden Versionen wird es Kompatibilitätsprobleme geben, aber die Vorteile, insbesondere die Leistungsverbesserungen, werden die Entwicklungskosten und die Änderungszeit überwiegen. Wenn Sie die folgenden Versionen verwenden, empfehle ich Ihnen, für eine bessere Leistung ein Upgrade auf die aktuelle PHP-Version durchzuführen.

So optimieren Sie die PHP-Leistung

2. Die Verwendung von einfachen und doppelten Anführungszeichen ist wichtig

Dies scheint das Letzte zu sein, worauf Entwickler achten sollten Es wurden jedoch zahlreiche Tests durchgeführt, um zu beweisen, dass die Verwendung einfacher Anführungszeichen, insbesondere in größeren Schleifen und Zeichenfolgen, viel schneller ist als die Verwendung doppelter Anführungszeichen. Eine Zeichenfolge in doppelten Anführungszeichen sucht zunächst nach einigen ihrer Variablen, bevor sie die Zeichenfolge selbst anzeigt. Deshalb ist das Drucken einer Zeichenfolge mit einfachen Anführungszeichen etwas langsamer. Die Verwendung von einfachen Anführungszeichen für Zeichenfolgen ist wichtig, wenn Sie über die Leistungsoptimierung Ihres PHP-Projekts nachdenken.

function doubleQuotes($iterations) { doubleQuotes($iterations) {
    $temp_str = "";= "";
    $start_time = microtime(true);= microtime(true);

    for ($x=0; $x<$iterations; $x++) {for ($x=0; $x<$iterations; $x++) {
        $temp_str .= "Hello World! ";.= "Hello World! ";
    }}

    echo "Time for doubleQuotes(): " . (microtime(true)-$start_time) . "</br>";"Time for doubleQuotes(): " . (microtime(true)-$start_time) . "</br>";
}}

function singleQuotes($iterations) {function singleQuotes($iterations) {
    $temp_str = &#39;&#39;;= &#39;&#39;;
    $start_time = microtime(true);= microtime(true);

    for ($x=0; $x<$iterations; $x++) {for ($x=0; $x<$iterations; $x++) {
        $temp_str .= &#39;Hello World! &#39;;.= &#39;Hello World! &#39;;
    }}

    echo &#39;Time for singleQuotes(): &#39; . (microtime(true)-$start_time) . &#39;</br>&#39;;&#39;Time for singleQuotes(): &#39; . (microtime(true)-$start_time) . &#39;</br>&#39;;
}}

doubleQuotes(500000);(500000);
singleQuotes(500000);(500000);

Time for doubleQuotes(): 0.065473079681396Time for doubleQuotes(): 0.065473079681396
Time for singleQuotes(): 0.027308940887451Time for singleQuotes(): 0.027308940887451

Ab diesem Test laufen Strings mit einfachen Anführungszeichen doppelt so schnell ab wie String-Tests mit doppelten Anführungszeichen. Der Unterschied in Millisekunden mag vernachlässigbar erscheinen, aber dieser Leistungsgewinn wird dazu beitragen, dass Hunderte von Benutzern pro Minute auf Webanwendungen zugreifen. Wenn Sie also den Wert einer Variablen anzeigen müssen, geben Sie ihn einfach in doppelte Anführungszeichen ein. Wenn nicht, ist es viel schneller, die Zeichenfolge in einfache Anführungszeichen zu setzen.

3. Die Auswirkung der Zählfunktion in der Schleife

Die Schleife wird hauptsächlich zum Durchlaufen des Arrays verwendet Die Schleife verwendet die Zählfunktion, um die Anzahl der Array-Elemente zu berechnen. Die Verwendung dieser Funktion verursacht dann einen Mehraufwand.

for ($x=0; $x<count($arr); $x++) { } ($x=0; $x<count($arr); $x++) { }

$count = count($arr);= count($arr);
for ($x=0; $x<$count; $x++) { }for ($x=0; $x<$count; $x++) { }

Der beste Weg, ein Array mithilfe einer Schleife zu durchlaufen, besteht darin, die Anzahl der Elemente im Array einmal zu speichern und diese Variable dann für die Schleifenbedingung zu verwenden. Denn wenn die Zählfunktion in einer for-Schleife oder Schleife verwendet wird, berechnet das Programm bei jeder Schleifeniteration das Array neu, wodurch sich die Anzahl der Prozesse in jeder Iteration erhöht. Die einzige Möglichkeit, wie Entwickler count in einer Schleife verwenden sollten, ist die Array-Manipulation innerhalb der Schleife.

4. Variablen schließen oder nicht setzen

Beim Abfragen der Datenbank muss eine Verbindung hergestellt werden, indem die Verbindungsvariable deklariert wird. Wir alle wissen, dass jede verwendete oder deklarierte Variable Speicher verbraucht. Daher empfiehlt es sich, die Verbindung zu schließen, nachdem die Abfrage oder alle Abfragen abgeschlossen sind. ,

$conn = new mysqli($servername, $username, $password, $dbname);= new mysqli($servername, $username, $password, $dbname);
//查询//查询
$conn->close();->close();

$myfile = fopen("sample-file.txt", "r") or die("Unable to open file!");= fopen("sample-file.txt", "r") or die("Unable to open file!");
//读取内容//读取内容
fclose($myfile);($myfile);

Ähnlich wie beim Öffnen einer Datei müssen nach dem Lesen oder Schreiben der Datei die Variablen, die die Verbindung verwalten, geschlossen werden. Selbst wenn mehrere Personen über die Webanwendung auf dieselbe Anfrage zugreifen, führt das Schließen der Verbindung zu einer erheblichen Speichereinsparung.

5. Statische Methoden oder Attribute verbrauchen weniger Ressourcen

Statische Methoden in einer Klasse müssen bei Verwendung ihre Klasse nicht instanziieren. Im Gegensatz zu einer öffentlichen Methode oder Eigenschaft, die vor dem Zugriff instanziiert werden muss, können statische Methoden direkt aufgerufen werden. Wenn eine Klasse mit nur einer Methode häufig von anderen Klassen aufgerufen wird, muss diese Methode als statische Methode deklariert werden. Dadurch wird die Speichernutzung Ihrer Anwendung reduziert, da Speicher für die Instanziierung von Variablen oder Klassen erforderlich ist.

6. SQL-Abfragen optimieren

Verbindungen verkürzen nicht nur den Code, sondern es ist auch wichtig, die Leistung zu verbessern. Anfänger führen normalerweise eine Auswahlabfrage für die erste Tabelle durch und führen dann eine weitere Auswahlabfrage basierend auf den Ergebnissen der ersten Auswahlabfrage durch.

$query1 = mysql_query("SELECT id FROM users");= mysql_query("SELECT id FROM users");
while ($row = mysql_fetch_assoc($query1)) {while ($row = mysql_fetch_assoc($query1)) {
    $query2 = mysql_query("SELECT * FROM user_info WHERE user_id = {$row[&#39;id&#39;]}");= mysql_query("SELECT * FROM user_info WHERE user_id = {$row[&#39;id&#39;]}");
}}

Darüber hinaus sind HTTP-Anfragen mit mehreren Datenbankabfragen ein Tabu in der Webentwicklung. Wenn Sie einen Join nicht zum Abfragen verwandter Datenbanktabellen verwenden können, muss die Datenbank normalisiert werden.

Eine weitere Möglichkeit, die Leistung bei SQL-Abfragen zu optimieren, besteht darin, Indizes zu bestimmten Spalten hinzuzufügen. Auf diese Weise können Datensätze mithilfe der Indexspalte schneller abgerufen werden. Obwohl Indizes im Vergleich zu regulären Spalten zusätzlichen Speicher erfordern, sind schnelle Abrufraten für Datensätze eine gute Benutzererfahrung. Typischerweise sind die Spalten, die indiziert werden müssen, die Spalten, die in JOIN-, ORDER BY-, GROUP BY- und WHERE-Klauseln verwendet werden.

SELECT * FROM employees WHERE address LIKE &#39;%Kansas City%&#39;* FROM employees WHERE address LIKE &#39;%Kansas City%&#39;

Die Verwendung von Platzhaltern in Abfragen erleichtert sicherlich das Filtern von Ergebnissen, aber diese Art von Abfrage ist einer der Hauptgründe, warum Webanwendungen langsamer werden. Anstatt Zeichenfolgen zum Speichern wiederholter Werte wie Stadt und Land zu verwenden, speichern Sie diese Feldtypen als Ganzzahlen und verwenden Sie eine andere Datenbanktabelle, um diese Ganzzahlen und ihre jeweiligen Zeichenfolgenwerte zu speichern. Auf diese Weise erfordern Abrufe, die diese Felder verwenden, nun Ganzzahlen anstelle von Zeichenfolgen.

SELECT id, first_name, last_name FROM employees, first_name, last_name FROM employees

如果可能,如果您不打算使用数据库表的所有列,则只指定要使用的SELECT查询中的哪些列而不是SELECT *。查询返回的列越多,内存和处理能力就越大。

7、缩小CSS和JavaScript

性能优化的另一种方法是缩小JS和CSS代码; 这将使人们无法阅读,但当我们谈论生产中的Web应用程序时,代码的可读性不是优先事项。同时缩小代码会减小文件的大小,从而缩短加载时间。浏览器可以快速解析这些文件,因为省略了注释和空格,从而减少了忽略它的过程。当混淆代码使其无法被人阅读时,只需对需要保护的代码进行模糊处理,因为此过程可能会破坏代码。

8、使用CDN优化性能

Web应用程序通常使用Bootstrap和jQuery等库,加载这些文件的最佳方式是通过内容交付网络,如Cloudflare。要优化Web应用程序的性能,请利用内容交付网络(CDN)。我们的大多数图像,CSS或JS文件都是静态的,因此在靠近用户所在位置的服务器上维护内容的缓存副本是明智的。通过这种方式,数据传播的距离更短,执行速度更快,这将减少应用程序的延迟。需要性能改进的Web应用程序必须考虑使用CDN来下载资源。CDN允许用户从更近的源下载内容,而不是从托管整个应用程序的位置加载内容,这将极大地影响应用程序的加载时间。

9、Web应用程序流量

另一件需要考虑的事情是流量以及应用程序响应用户请求的速度。在Web应用程序中,常见问题是流量,访问系统的用户数量以及服务器处理特定请求的请求和响应的能力。比如Stackify Retrace可以监控应用程序的流量。

So optimieren Sie die PHP-Leistung

Retrace确保您的应用程序完美地满足您的需求。Retrace支持Microsoft Azure,Amazon AWS和Google GCP,以最大限度地提高基于云的监控功能,从而确保应用程序的质量。

Das obige ist der detaillierte Inhalt vonSo optimieren Sie die PHP-Leistung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn