Print vs. Echo, welches ist schneller?

藏色散人
Freigeben: 2023-04-04 21:34:01
Original
3347 Leute haben es durchsucht

Wie die meisten von uns habe ich es satt, Blogbeiträge über bedeutungslose Mikrooptimierungen wie das Ersetzen von print durch echo, ++$i durch $i++ oder doppelte Anführungszeichen durch einfache Anführungszeichen zu lesen. Warum? Weil es in 99,999999 % der Fälle keine Rolle spielt. Installieren Sie besser einen PHP-Beschleuniger wie APC oder fügen Sie diese fehlenden Indizes in den Datenbankspalten hinzu oder versuchen Sie, 1000 Datenbankanfragen auf der Homepage zu vermeiden.

Print vs. Echo, welches ist schneller?

Angenommen, Sie möchten wirklich die Antwort auf diese Frage wissen. Anstatt zu versuchen, ein Skript zu schreiben und es millionenfach auszuführen, um die höchste Geschwindigkeit zu finden, zeige ich Ihnen lieber einige interessante Tools, die Sie manchmal nützlich finden könnten, weil sie es Ihnen ermöglichen, besser zu verstehen, was Sie PHP-Code schreiben.

Betreten Sie VLD, den „Vulcan Logic Disassembler“. VLD wurde von Derrick Rethans geschrieben und wie Sie auf der VLD-Homepage sehen können, „hakt es sich in die Zend-Engine ein und speichert alle Opcodes (Ausführungseinheiten) des Skripts“.

Die Installation von VLD ist sehr einfach. Laden Sie die neueste Version herunter und installieren Sie sie wie jede andere PHP-Erweiterung:

$ phpize
$ ./configure
$ sudo make install
Nach dem Login kopieren

Aktivieren Sie die Erweiterung in PHP. ini-Datei:

extension=vld.so
Nach dem Login kopieren

Es ist Zeit, unter die Haube zu schauen. Erstellen Sie zwei einfache Dateien, eine mit echo und die andere mit print:

// print.php
Nach dem Login kopieren

Führen Sie diese Skripte über die Befehlszeile mit -d vld aus. Der Parameter activate=1 aktiviert die VLD-Ausgabe. Schauen wir uns die von diesen Skripten generierten Opcodes an:

$ php -d vld.active=1 print.php
Nach dem Login kopieren

-

number of ops:  4
compiled vars:  none
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   1     0  PRINT                                            ~0      'foo'
         1  FREE                                                     ~0
   2     2  RETURN                                                   1
         3* ZEND_HANDLE_EXCEPTION
Nach dem Login kopieren

-

$ php -d vld.active=1 echo.php
Nach dem Login kopieren

-

number of ops:  3
compiled vars:  none
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   1     0  ECHO                                                     'foo'
   2     1  RETURN                                                   1
         2* ZEND_HANDLE_EXCEPTION
Nach dem Login kopieren

Merken Sie den Unterschied? Ja, print verwendet auch einen Opcode, weil er tatsächlich etwas zurückgibt. Wir können daraus schließen, dass Echo schneller ist als Drucken. Aber ein Opcode kostet nichts, selbst wenn ein Skript Hunderte von Aufrufen zum Drucken hat.

Da print immer 1 zurückgibt, können Sie die folgenden interessanten Dinge tun, die in echo nicht möglich sind:

[php]
Nach dem Login kopieren

Ich frage mich, was zu tun ist, wenn ein Skript mit einer großen Anzahl an Codes ausgeführt wird ? Versuchen Sie Folgendes:

$ php -d vld.active=1 print.php 2> output
$ grep "number of ops" output | cut -f 5 -d ' ' | (tr '\n' +; echo 0) | bc
Nach dem Login kopieren

Ich habe es mit einer neuen WordPress-Installation versucht. Das Skript pausiert, bevor es mit einem „Busfehler“ auf meinem Laptop endet, aber die Anzahl der Opcodes hat 2,3 Millionen überschritten.

Das obige ist der detaillierte Inhalt vonPrint vs. Echo, welches ist schneller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage