suchen
HeimBackend-EntwicklungPHP-TutorialUmfassende Interpretation der Optimierung und Verbesserungen der PHP8.0-Version

Umfassende Interpretation der Optimierung und Verbesserungen der PHP8.0-Version

Wenn Sie nicht unter einem Felsen gelebt haben oder in der Vergangenheit gelebt haben, werden Sie feststellen, dass JIT hereinkommtPHP 8: Die Umfrage wurde heute stillschweigend geschlossen, mit Eine überwältigende Mehrheit dafür. Zusammengeführt in PHP8, daher ist dies offiziell. Dieser Artikel erklärt umfassend die Optimierung und Verbesserung der PHP8.0-Version.

Offizielle PHP8-Ankündigung „PHP 8 ist da! Das PHP-Team hat die erste Beta-Version Alpha1 veröffentlicht

Lehnen Sie sich jetzt zurück und lesen Sie den folgenden Artikel, der mit Mythen aufräumt, in dem wir ein paar Dinge darüber klären, was JIT ist und welche Vorteile es bietet Bringen Sie Verwirrung und vertiefen Sie sich in die Funktionsweise (aber nur ein wenig, weil ich Sie nicht langweilen möchte).

Da ich nicht weiß, mit wem ich spreche, beginne ich mit einfachen Fragen und arbeite mich dann zu komplexen Fragen vor, die Sie überspringen können, wenn Sie bereits sicher sind, dass Sie es wissen Die Antwort auf die Frage im Titel Dieser Teil. . .

Was ist JIT?

PHP implementiert eine virtuelle Maschine, einen virtuellen Prozessor, den wir Zend VM nennen. PHP kompiliert für Menschen lesbare Skripte in Anweisungen (wir nennen sie Opcodes), die die virtuelle Maschine verstehen kann. Diese Ausführungsphase nennen wir „Kompilierungszeit“. Während der „Laufzeit“-Phase der Ausführung führt die virtuelle Maschine (Zend VM) die Anweisungen des Codes (Opcodes) aus.

Das funktioniert alles großartig, Tools wie APC (früher) und OPCache (jetzt) ​​können die Anweisungen des Codes (Opcodes) zwischenspeichern, sodass die „Kompilierungszeit“ nur dann erfolgt, wenn es sein muss.

Zunächst gibt es eine Codezeile, die erklärt, was JIT ist:

Just-in-time ist eine Compilerstrategie, die eine Zwischendarstellung des Codes akzeptiert und diese zur Laufzeit in Abhängigkeiten einer architekturspezifischen Maschine umwandelt Code für die rechtzeitige Ausführung.

In PHP bedeutet dies, dass das JIT die von Zend VM generierten Anweisungen als Zwischendarstellung verwendet und architekturabhängigen Maschinencode ausgibt, sodass der Host des Codes nicht mehr ZendVM, sondern die CPU ist.

Warum benötigt PHP JIT?

Vor PHP 7.0 lag der Schwerpunkt der PHP-internen Community auf der Leistung, was durch einen gesunden Wettbewerb durch das HHVM-Projekt von Facebook entstanden war. Die meisten Kernänderungen in PHP 7.0 waren im PHPNG-Patch enthalten, der die Art und Weise, wie PHP Speicher und CPU in seinem Kern nutzt, erheblich verbessert hat, und seitdem ist jeder von uns gezwungen, sich auf die Leistung zu konzentrieren.

Seit PHP 7.0 gab es einige Leistungsverbesserungen, Optimierungen von HashTable (PHPs Kerndatenstrukturen), Zend VM-Spezialisierungen für bestimmte Opcodes, Compiler-Spezialisierungen für bestimmte Sequenzisierungen und laufende Verbesserungen der Optimierungskomponente von OPCache. . . Darüber hinaus gibt es so viel anderes, es ist so langweilig.

Es ist eine brutale Tatsache, dass diese Optimierungen uns nur begrenzt weiterbringen können und wir mit unserer Fähigkeit, es weiter zu verbessern, schnell näher kommen oder vielleicht an eine Mauer stoßen.

HINWEIS: Wenn wir sagen „wir können es nicht mehr verbessern“, meinen wir eigentlich: „Wir müssen Kompromisse eingehen, um es nicht mehr weiter zu verbessern.“ sieht aus wie „Attraktiv“. . . Immer wenn wir über Leistungsoptimierung sprechen, diskutieren wir Kompromisse. Oft besteht ein Kompromiss zwischen Einfachheit und Leistung. Wir alle denken gerne, dass der einfachste Code der schnellste Code ist, aber in der modernen Welt der C-Programmierung ist das nicht der Fall. Der schnellste Code ist in der Regel Code, der darauf vorbereitet ist, die Vorteile architekturabhängiger oder plattformabhängiger (Compiler-)spezifischer Funktionen zu nutzen. Einfachheit garantiert nicht die beste Leistung. . .

Derzeit scheint die JIT-Funktionalität von PHP der beste Weg zu sein, um mehr Leistung aus PHP herauszuholen.

Wird JIT meine Website schneller machen?

Möglich, nicht offensichtlich.

ist möglicherweise nicht die Antwort, die Sie erwartet haben: Im Allgemeinen funktionieren in PHP geschriebene Anwendungen I/O绑定 und JIT am besten mit CPU绑定 Code.

Was genau bedeutet „I/O- und CPU-Bindung“?

Wir verwenden die Begriffe I/O绑定 und CPU绑定, wenn wir die allgemeinen Leistungsmerkmale eines Codeabschnitts oder einer Anwendung beschreiben möchten.

Der einfachste Weg, es auszudrücken, ist:

  • Ein Stück I/O-gebundener Code, wenn wir die I/O, die er ausführt, verbessern (reduzieren, optimieren) können schneller laufen.

  • Ein Teil des CPU-gebundenen Codes wird schneller ausgeführt, wenn wir die von der CPU ausgeführten Anweisungen verbessern (reduzieren, optimieren) oder (auf magische Weise) die Taktrate der CPU erhöhen können: )

  • Ein Code oder eine Anwendung kann I/O-gebunden, CPU-gebunden oder gleichermaßen an CPU und I/O gebunden sein.

  • Im Allgemeinen neigen PHP-Anwendungen dazu, E/A-gebunden zu sein – was sie verlangsamt, ist die E/A, die sie ausführen – das Herstellen von Verbindungen, das Lesen und Schreiben von Datenbanken, Caches, Dateien, Sockets usw .

Wie sieht CPU-gebundenes PHP aus?

Aufgrund der Natur der meisten PHP-Anwendungen sind viele PHP-Programmierer nicht mit CPU-gebundenem Code vertraut – ihre Aufgabe besteht oft darin, eine Verbindung zu einer Datenbank oder vielleicht einem Cache herzustellen und einige Lightweight-Aufgaben zu erledigen gibt eine html/json/xml-Antwort aus.

Möglicherweise schauen Sie sich in der Codebasis um und finden eine Menge Code, der nichts mit I/O zu tun hat, oder sogar Code, der Funktionen aufruft, die völlig von I/O getrennt sind, und werden verwirrt, und ich scheinen zu implizieren, dass dies nicht der Fall ist. Es besteht keine Notwendigkeit, Ihre Anwendung CPU-gebunden zu machen, auch wenn es möglicherweise mehr Codezeilen gibt, die Nicht-E/A verarbeiten als E/A.

PHP ist tatsächlich ziemlich schnell, es ist eine der am schnellsten interpretierten Sprachen der Welt. Es gibt keinen signifikanten Unterschied zwischen dem Aufruf einer Funktion durch die Zend-VM, die nichts mit I/O zu tun hat, und dem Ausführen desselben Aufrufs im Maschinencode.

Es gibt offensichtlich einen Unterschied, aber Tatsache ist, dass Maschinencode eine Aufrufkonvention hat, Zend VM eine Aufrufkonvention hat, Maschinencode einen Prolog hat, Zend VM einen Prolog hat: Etwas in einem Zend-Opcode aufrufen c_level_function() oder Maschinencode hat keinen wesentlichen Einfluss auf die Leistung der aufrufenden Anwendung – obwohl er offenbar einen großen Einfluss auf diesen Aufruf hat.

Hinweis: Aufrufkonvention bezieht sich grob auf eine Reihe von Anweisungen, die vor der Eingabe einer anderen Funktion ausgeführt werden, und Prolog bezieht sich auf eine Reihe von Anweisungen, die bei Eingabe einer anderen Funktion ausgeführt werden: in In beiden Fällen , schiebt die Aufrufkonvention die Parameter auf den Stapel und der Prolog entfernt sie vom Stapel.

Was ist mit Loops, Tail Calls und X? Ich höre Sie fragen: PHP ist tatsächlich sehr intelligent, und wenn die Optimierungskomponente von OPCache aktiviert ist, ist es, als würde Ihr Code auf magische Weise in die effizienteste Form umgewandelt, die Sie schreiben können.

Nun ist es wichtig zu beachten, dass JIT die Aufrufkonvention von Zend-Funktionen nicht ändert, sondern die von der VM festgelegte – Zend muss daher jederzeit in der Lage sein, zwischen JIT- und VM-Modus zu wechseln die Entscheidung, die durch die VM Calling-Konvention festgelegte Entscheidung beizubehalten. Wenn also das JIT läuft, werden diese Anrufe überall nicht wesentlich beschleunigt.

Wenn Sie sehen möchten, wie CPU-gebundener PHP-Code aussieht, schauen Sie sich die Zend/bench.php Dokumentation an... Dies ist offensichtlich ein extremes CPU-Codebeispiel, aber es sollte uns eine Vorstellung davon geben, wo Das JIT glänzt wirklich. Es liegt auf dem Gebiet der Mathematik.

Ist PHP der ultimative Kompromiss für schnellere Mathematik?

Nein, wir haben dies getan, um den Umfang von PHP zu erweitern, und zwar um einiges.

Nach Meinung dieses sehr voreingenommenen PHP-Entwicklers machen Sie das Web falsch, wenn Sie im Jahr 2019 Webprogrammierer sind und nicht darüber nachgedacht haben, PHP in Ihrem nächsten Projekt zu verwenden.

Die Verbesserung der Fähigkeit, Mathematik in PHP schneller auszuführen, scheint auf den ersten Blick ein sehr enger Rahmen zu sein.

Dies öffnet jedoch tatsächlich die Tür zu maschinellem Lernen, 3D-Rendering, 2D-Rendering (GUI) und Datenanalyse (um nur einige zu nennen).

Warum können wir es nicht in PHP 7.4 verwenden?

Ich habe JIT gerade den „ultimativen Kompromiss“ genannt, und ich denke, dass es so ist: Es ist wohl eine der komplexesten Compiler-Strategien, die jemals entwickelt wurden, vielleicht die komplexeste. Die Einführung von JIT bringt erhebliche Komplexität mit sich.

Wenn Sie Dmitry (den Autor von JIT) fragen würden, ob er PHP komplex gemacht hat, würde er sagen: „Nein, ich hasse Komplexität“ (dies ist ein direktes Zitat).

Letztendlich verstehen wir Komplexität nicht, und derzeit gibt es nur sehr wenige interne Entwickler (weniger als ein paar), die die JIT-Implementierung wirklich verstehen.

PHP 7.4 schreitet schnell voran und die Zusammenführung mit PHP 7.4 wird uns eine Version von PHP hinterlassen, die nur wenige Leute debuggen, reparieren oder verbessern können (im wahrsten Sinne des Wortes). Für diejenigen, die gegen die Zusammenführung mit PHP 7.4 gestimmt haben, ist diese Situation inakzeptabel.

In der Zeit zwischen jetzt und PHP 8 werden viele von uns in ihrer Freizeit hart daran arbeiten, das JIT zu verstehen:

Wir müssen noch einige Funktionen implementieren und müssen überarbeitet werden php8 Um Tools zu schreiben, müssen wir zunächst JIT verstehen. Wir brauchen diese Zeit und sind äußerst dankbar, dass eine Mehrheit der Wähler es für angebracht hielt, sie uns zu schenken.

Komplexität ist kein Synonym für schrecklich:

Komplexität kann schön sein, und wie ein Nebel ist JIT diese Art von Komplexität. Im Prinzip kann man etwas Komplexes vollständig verstehen und seine scheinbare Komplexität nur geringfügig reduzieren. Mit anderen Worten: Selbst wenn es 20 interne Entwickler gäbe, die mit JIT so vertraut sind wie Dmitry, würde das nicht wirklich etwas an der Komplexität von JIT ändern.

Wird sich die PHP-Entwicklung verlangsamen?

Es gibt keinen Grund zu der Annahme, dass dies der Fall ist. Wir haben genug Zeit, um mit Zuversicht sagen zu können, dass, wenn PHP 8 allgemein verfügbar ist, genug von uns mit JIT vertraut sein werden, um mindestens genauso nützlich zu sein wie heute, wenn es um die Behebung von Fehlern und die Weiterentwicklung von PHP geht.

Wenn Sie versuchen, dies auf den Punkt zu bringen, dass JIT von Natur aus komplex ist, bedenken Sie, dass wir die meiste Zeit, die wir mit der Einführung einer neuen Funktion verbringen, tatsächlich damit verbringen, diese Funktion zu besprechen. Für die meisten Funktionen oder sogar Korrekturen kann das Schreiben des Codes Minuten oder Stunden dauern und die Diskussionen können Wochen oder Monate dauern. In seltenen Fällen kann das Schreiben des Codes für eine Funktion Stunden oder Tage dauern, aber in diesen seltenen Fällen dauern Diskussionen immer länger.

Eine detaillierte Analyse von PHP8 finden Sie unter „Graphische JIT-Erläuterung der neuen Funktionen von PHP8“ „Um wie viel Verbesserung hat sich die Leistung von PHP 8 verbessert?

Dieser Artikel wurde direkt von der chinesischen PHP-Website übersetzt: https://blog.krakjoe.ninja/2019/03/php-gr8.html

Das obige ist der detaillierte Inhalt vonUmfassende Interpretation der Optimierung und Verbesserungen der PHP8.0-Version. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:krakjoe. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Wann würden Sie ein Merkmal gegenüber einer abstrakten Klasse oder Schnittstelle in PHP verwenden?Wann würden Sie ein Merkmal gegenüber einer abstrakten Klasse oder Schnittstelle in PHP verwenden?Apr 10, 2025 am 09:39 AM

In PHP eignet sich das Merkmal für Situationen, in denen die Wiederverwendung von Methoden erforderlich ist, aber nicht zur Erbschaft geeignet ist. 1) Das Merkmal ermöglicht Multiplexing -Methoden in Klassen, um die Komplexität mehrerer Vererbungskomplexität zu vermeiden. 2) Bei Verwendung von Merkmalen müssen Sie auf Methodenkonflikte achten, die durch die Alternative und als Schlüsselwörter gelöst werden können. 3) Überbeanspruchte des Merkmals sollte vermieden werden und seine einzelne Verantwortung sollte beibehalten werden, um die Leistung zu optimieren und die Code -Wartbarkeit zu verbessern.

Was ist ein Abhängigkeitsinjektionsbehälter (DIC) und warum eine in PHP verwenden?Was ist ein Abhängigkeitsinjektionsbehälter (DIC) und warum eine in PHP verwenden?Apr 10, 2025 am 09:38 AM

Abhängigkeitsinjektionsbehälter (DIC) ist ein Tool, das Objektabhängigkeiten für die Verwendung in PHP -Projekten verwaltet und bereitstellt. Die Hauptvorteile von DIC sind: 1. Entkopplung, Machen von Komponenten unabhängig, und der Code ist leicht zu warten und zu testen; 2. Flexibilität, leicht zu ersetzen oder zu ändern; 3.. Testbarkeit, bequem für die Injektion von Scheinobjekten für Unit -Tests.

Erklären Sie die SPLFixedArray und seine Leistungseigenschaften im Vergleich zu regulären PHP -Arrays.Erklären Sie die SPLFixedArray und seine Leistungseigenschaften im Vergleich zu regulären PHP -Arrays.Apr 10, 2025 am 09:37 AM

SplfixedArray ist ein Array mit fester Größe in PHP, das für Szenarien geeignet ist, in denen hohe Leistung und geringe Speicherverbrauch erforderlich sind. 1) Es muss die Größe beim Erstellen angeben, um den durch dynamischen Einstellungen verursachten Overhead zu vermeiden. 2) Basierend auf C -Spracharray betreibt direkt Speicher und schnelle Zugriffsgeschwindigkeit. 3) Geeignet für eine großräumige Datenverarbeitung und speicherempfindliche Umgebungen, muss jedoch mit Vorsicht verwendet werden, da seine Größe festgelegt ist.

Wie kann PHP -Datei sicher sicher hochladen?Wie kann PHP -Datei sicher sicher hochladen?Apr 10, 2025 am 09:37 AM

PHP überlädt Datei -Hochladen über die Variable $ \ _ Dateien. Zu den Methoden zur Sicherstellung gehören: 1. Upload -Fehler, 2. Dateityp und -größe überprüfen, 3.. Dateiüberschreibung verhindern, 4. Verschieben von Dateien auf einen dauerhaften Speicherort.

Was ist der Null -Koalescing -Operator (??) und der Null -Koalescing -Zuweisungsoperator (?? =)?Was ist der Null -Koalescing -Operator (??) und der Null -Koalescing -Zuweisungsoperator (?? =)?Apr 10, 2025 am 09:33 AM

In JavaScript können Sie NullCoalescingoperator (??) und NullCoalescingAssignmentoperator (?? =) verwenden. 1.??? 2.??= Weisen Sie den Wert des rechten Operanden die Variable zu, jedoch nur, wenn die Variable null oder undefiniert ist. Diese Operatoren vereinfachen die Codelogik und verbessern die Lesbarkeit und Leistung.

Was ist CSP -Header (Content Security Policy Ricture) und warum ist es wichtig?Was ist CSP -Header (Content Security Policy Ricture) und warum ist es wichtig?Apr 09, 2025 am 12:10 AM

CSP ist wichtig, da es XSS -Angriffe verhindern und das Laden der Ressourcen begrenzen und die Sicherheit der Website verbessern kann. 1.CSP ist Teil von HTTP -Reaktionsüberschriften und begrenzt böswilliges Verhalten durch strenge Richtlinien. 2. Die grundlegende Verwendung besteht darin, nur Laderessourcen aus demselben Ursprung zuzulassen. 3. Erweiterte Verwendung kann mehr feinkörnige Strategien festlegen, z. V.

Was sind HTTP -Anforderungsmethoden (erhalten, posten, setzen, löschen usw.) und wann sollte jeder verwendet werden?Was sind HTTP -Anforderungsmethoden (erhalten, posten, setzen, löschen usw.) und wann sollte jeder verwendet werden?Apr 09, 2025 am 12:09 AM

Zu den HTTP -Anforderungsmethoden gehören GET, Post, Put und Löschen, mit denen Ressourcen erhalten, übermittelt, aktualisiert und gelöscht werden. 1. Die GET -Methode wird verwendet, um Ressourcen zu erhalten, und eignet sich für Lesevorgänge. 2. Die Post -Methode wird verwendet, um Daten zu übermitteln und häufig neue Ressourcen zu erstellen. 3. Die Put -Methode wird zum Aktualisieren von Ressourcen verwendet und eignet sich für vollständige Updates. V.

Was ist HTTPS und warum ist es für Webanwendungen von entscheidender Bedeutung?Was ist HTTPS und warum ist es für Webanwendungen von entscheidender Bedeutung?Apr 09, 2025 am 12:08 AM

HTTPS ist ein Protokoll, das auf der Grundlage von HTTP eine Sicherheitsschicht hinzufügt, die hauptsächlich die Privatsphäre und die Datensicherheit der Benutzer durch verschlüsselte Daten schützt. Zu den Arbeitsprinzipien gehören TLS -Handshake, Zertifikatüberprüfung und verschlüsselte Kommunikation. Bei der Implementierung von HTTPS müssen Sie auf Zertifikatverwaltung, Leistungsauswirkungen und Mischinhalteprobleme achten.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen