Spät aber angekommen! Die PHP8-Rezension finden Sie hier~
PHP 8 Alpha 1 wurde am 25. Juni veröffentlicht und PHP 8 Alpha 2 wurde am 9. Juli veröffentlicht. Im Allgemeinen ist Alpha 2 eine einigermaßen brauchbare Version, also habe ich sie am Wochenende evaluiert.
Werfen wir zunächst einen Blick auf die Ergebnisse:
JIT ist nicht aktiviert
php -d opcache.jit_buffer_size=0 Zend/bench.php simple 0.025simplecall 0.012simpleucall 0.012simpleudcall 0.012mandel 0.135mandel2 0.211ackermann(7) 0.082ary(50000) 0.012ary2(50000) 0.010ary3(2000) 0.186fibo(30) 0.283hash1(50000) 0.039hash2(500) 0.041heapsort(20000) 0.089matrix(20) 0.110nestedloop(12) 0.096sieve(30) 0.045strcat(200000) 0.019------------------------ Total 1.419
JIT ist aktiviert:
php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php simple 0.001simplecall 0.000simpleucall 0.000simpleudcall 0.000mandel 0.005mandel2 0.006ackermann(7) 0.010ary(50000) 0.005ary2(50000) 0.004ary3(2000) 0.011fibo(30) 0.027hash1(50000) 0.027hash2(500) 0.018heapsort(20000) 0.011matrix(20) 0.011nestedloop(12) 0.006sieve(30) 0.004strcat(200000) 0.009------------------------ Total 0.155
Und Opcache ist nicht aktiviert:
php Zend/bench.php simple 0.051simplecall 0.017simpleucall 0.083simpleudcall 0.089mandel 0.506mandel2 0.409ackermann(7) 0.095ary(50000) 0.012ary2(50000) 0.010ary3(2000) 0.187fibo(30) 0.367hash1(50000) 0.040hash2(500) 0.041heapsort(20000) 0.097matrix(20) 0.122nestedloop(12) 0.093sieve(30) 0.063strcat(200000) 0.018------------------------ Total 2.299
Opcache ist nicht aktiviert: 2,299s Wenn Opcache aktiviert ist, JIT jedoch nicht: 1,419 s Wenn Opcache aktiviert ist und JIT aktiviert ist: 0,155 s
Mit aktiviertem JIT ist es fast das 9,15-fache des Werts ohne aktiviertes JIT. Nach mehreren Tests liegt dieser Wert stabil zwischen dem 8-fachen und dem 10-fachen.
Wie funktioniert MPF?
Um nah an unserem Geschäft zu sein, haben wir unter der MPF-Framework-Umgebung
aliyun centos 6.9
php7.test.com php-fpm einen Prozess getestet php8.test.com php-fpm ein Prozess
Mpf zwei Schnittstellen
/v1/hello/wzh/index1
public function index1() { $this->output('123'); }
/v1/hello/wzh/index2
public function index2() { $a = 0; for ($i = 0; $i < 1000000; $i++) $a++; $this->output($a); }
Lassen Sie uns einen Stresstest durchführen
php7 mit weniger Berechnung
wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index1 Running 5s test @ https://php7.test.com/v1/hello/wzh/index1 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 432.97ms 76.00ms 527.38ms 92.17% Req/Sec 8.38 5.36 20.00 63.85% 396 requests in 5.09s, 121.43KB readRequests/sec: 77.78 Transfer/sec: 23.85KB
php7 Mehr Berechnungen
wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index2 Running 5s test @ https://php7.test.com/v1/hello/wzh/index2 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.02s 569.99ms 1.96s 57.14% Req/Sec 3.18 3.43 10.00 80.88% 70 requests in 5.03s, 21.60KB read Socket errors: connect 0, read 0, write 0, timeout 42 Requests/sec: 13.91 Transfer/sec: 4.29KB
php8 JIT schaltet weniger Berechnungen ein
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1 Running 5s test @ https://php8.test.com/v1/hello/wzh/index1 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 34.48ms 4.34ms 95.45ms 87.87% Req/Sec 84.61 13.36 121.00 85.28% 5083 requests in 5.03s, 1.67MB readRequests/sec: 1010.55 Transfer/sec: 340.43KB
php8 JIT schaltet mehr Berechnungen ein
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2 Running 5s test @ https://php8.test.com/v1/hello/wzh/index2 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 97.84ms 4.97ms 159.50ms 92.12% Req/Sec 30.27 4.42 50.00 86.50% 1814 requests in 5.07s, 614.71KB readRequests/sec: 357.76 Transfer/sec: 121.23KB
php8 JIT schaltet weniger Berechnungen aus
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1 Running 5s test @ https://php8.test.com/v1/hello/wzh/index1 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 38.10ms 6.47ms 239.60ms 94.01% Req/Sec 77.50 12.76 110.00 89.63% 4622 requests in 5.04s, 1.52MB readRequests/sec: 916.22 Transfer/sec: 308.65KB
[Bild:BA1A37D. 8 -760E -4637-901B-3E3521F969E7-4107-0000191504DD1B2E/86D37899-3B46-4BDA-B396-E5C8DD51068E.png]

13
倍,而且计算越多优化越明显,计算多情况下php8JIT是php7性能的25.7
Kompilierungsprozess
Beschwerde: Die manuelle Kompilierung von PHP dauerte 2 Stunden und ich bin auf N Fallstricke gestoßen. Damit jeder mehr Anforderungen schreiben kann, werde ich die Fallstricke teilen
Aliyun Centos 6.9, unser Unternehmen verwendet normalerweise diese Version.
php-Quellcode-Kompilierung
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2 Running 5s test @ https://php8.test.com/v1/hello/wzh/index2 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 766.16ms 181.30ms 887.08ms 88.37% Req/Sec 6.25 5.36 20.00 91.36% 215 requests in 5.09s, 72.86KB readRequests/sec: 42.22 Transfer/sec: 14.31KB
Hier schlägt die Makefile-Generierung normalerweise fehl. Es gibt später Beispiele für eine fehlgeschlagene Generierung.
wget https://downloads.php.net/~carusogabriel/php-8.0.0alpha2.tar.gz tar -zxf php-8.0.0alpha2.tar.gzcd php-8.0.0alpha2 ./configure --prefix=/yourdir/php8 --with-config-file-path=/yourdir/php8/etc --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-static --enable-sockets --with-zip --enable-calendar --enable-bcmath --enable-mbstring --with-zlib --with-iconv=/usr/local/libiconv --enable-gd --enable-mbstring --with-freetype --with-mysql-sock=/tmp/mysql.sock --disable-ipv6 --enable-debug --with-openssl --enable-opcache复制代码
configure php.ini
Denken Sie daran, die alte Konfiguration des Opcaches aufzuschreiben. ini ist JIT immer noch eine Optimierung von Opcache.
make -j 8 make install cp php.ini-production /yourdir/php8/etc/php.ini
Fehlerlösung konfigurieren
Hier sind einige Probleme mit ./configure failed
Problem 1
zend_extension=opcache.so opcache.enable=1 ; 命令行测试的话这里一定要打开 opcache.enable_cli=1 opcache.memory_consumption=512 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.validate_timestamps=1 opcache.revalidate_freq=300 opcache.fast_shutdown=1 opcache.enable_file_override = 1 opcache.blacklist_filename = /etc/php.d/opcache.blacklist ; 这里就是新的jit的配置 opcache.jit=1205 opcache.jit_buffer_size=64M
Lösung
No package 'sqlite3' found
Hinweis
Dies direkt zu tun wird nicht funktionieren, die Version im Yum-Warehouse ist zu niedrig.
wget https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz tar -zxf sqlite-autoconf-3320300.tar.gzcd sqlite-autoconf-3320300 ./configure --prefix=/usr/local/lib/sqlite-3.32.0 make CFLAGS="-g -O2 -DSQLITE_ENABLE_COLUMN_METADATA"make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/sqlite-3.32.0/lib/pkgconfig"复制代码
Problem 2
yum install sqlite-devel
Lösung
configure: error: Please reinstall the iconv library.
Problem 3
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxf libiconv-1.14.tar.gzcd libiconv-1.14 ./configure make make install
Ähnlich funktioniert yum auch nicht, die Version ist zu niedrig.
No package 'oniguruma' found
Lösung
yum install oniguruma-devel
Problem Vier
wget https://github.com/kkos/oniguruma/archive/v6.9.5_rev1.tar.gz tar -zxf v6.9.5_rev1.tar.gzcd oniguruma-6.9.5_rev1/ autoreconf -vfi ./configure --prefix=/usr/local/lib/oniguruma-6.9.5 make make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/oniguruma-6.9.5/lib/pkgconfig"
Lösung
No package 'libzip' found
Viel Spaß mit PHP 8 & JIT!
Das obige ist der detaillierte Inhalt vonSpät aber angekommen! Die PHP8-Rezension finden Sie hier~. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Unterschiede zwischen PHP5 und PHP8 bestehen in Bezug auf Leistung, Sprachstruktur, Typsystem, Fehlerbehandlung, asynchrone Programmierung, Standardbibliotheksfunktionen und Sicherheit. Detaillierte Einführung: 1. Leistungsverbesserung: PHP8 führt einen JIT-Compiler ein, der einige hochfrequente Ausführungscodes kompilieren und optimieren kann, wodurch die Ausführungsgeschwindigkeit verbessert wird. PHP8 führt einige neue Sprachstrukturen und Funktionen ein. PHP8 unterstützt benannte Parameter, sodass Entwickler Parameternamen anstelle der Parameterreihenfolge usw. übergeben können.

Die Schritte zum Hinzufügen der MySQL-Erweiterung zu PHP8 sind: 1. Installieren Sie die MySQL-Client-Bibliothek. 3. Laden Sie den MySQL-Erweiterungsquellcode herunter. 5. Aktivieren Sie die MySQL-Erweiterung MySQL-Erweiterung; 6. Starten Sie einfach einen Webserver neu.

In diesem Artikel erfahren Sie, wie Sie Apache2.4 installieren und PHP8.0 konfigurieren. Der Artikel enthält Bilder und detaillierte Schritte zur Installation und Konfiguration von Apache2.4+php8.0~

PHP8 kann MySQLi und PDO verwenden, um eine Verbindung zur Datenbank herzustellen. Detaillierte Einführung: 1. Verwenden Sie MySQL, um eine Verbindung zur Datenbank herzustellen, indem Sie den Datenbankservernamen, den Benutzernamen, das Kennwort und den Datenbanknamen für die Verbindung übergeben. Verwenden Sie dann das Attribut „connect_error“, um zu prüfen, ob die Verbindung erfolgreich ist, und geben Sie eine Fehlermeldung aus, wenn die Verbindung fehlschlägt. Schließen Sie abschließend die Verbindung, indem Sie die Methode „close()“ aufrufen. 2. Verwenden Sie PDO, um eine Verbindung zur Datenbank herzustellen, und stellen Sie eine Verbindung her, indem Sie den Namen des Datenbankservers, das Kennwort und den Datenbanknamen usw. übergeben.

Zu den Methoden des PHP8-Datentyps gehören die Konvertierung von Zeichenfolgen in Ganzzahlen, die Konvertierung von Ganzzahlen in Zeichenfolgen, die Konvertierung von Zeichenfolgen in Gleitkommazahlen, die Konvertierung von Gleitkommazahlen in Zeichenfolgen, die Konvertierung von Arrays in Zeichenfolgen, die Konvertierung von Zeichenfolgen in Arrays, die Konvertierung von Booleschen Werten in Ganzzahlen und die Konvertierung von Ganzzahlen in Bestimmung und Konvertierung boolescher Werte und Variablentypen. Ausführliche Einführung: 1. Die Konvertierung einer Zeichenfolge in eine Ganzzahl umfasst die Funktion intval() und die erzwungene Typkonvertierung (int). 2. Die Konvertierung einer Ganzzahl in eine Zeichenfolge umfasst die Funktion strval() und die erzwungene Typkonvertierung (String). eine Zeichenfolge zu einem Gleitkommapunkt und so weiter.

Dieser Artikel führt Sie durch die JIT in PHP 8 und spricht darüber, wie JIT am Interpretationsprozess teilnimmt. Ich hoffe, dass er für alle hilfreich ist!

Die verbesserte Leistung von PHP8 umfasst: 1. Einführung des JIT-Compilers; 3. Verbesserung des Garbage-Collection-Mechanismus; 6. Optimierung der String-Verarbeitung; . Verbessern Sie die Array-Verarbeitung. 8. Führen Sie einen neuen Speicherverwaltungsmechanismus ein. 9. Optimieren Sie die Codegenerierung. Detaillierte Einführung: 1. Die Einführung des JIT-Compilers PHP8 stellt den JIT-Compiler vor, eine dynamische Kompilierungstechnologie, die PHP-Code für eine effizientere Ausführung konvertieren kann.

Funktionen von PHP8: 1. Benannte Parameter; 4. Konstruktorattributverbesserung 8. Verbessertes Typsystem; 10. Konsistenzverbesserungen. Detaillierte Einführung: 1. Der JIT-Compiler PHP8 führt die Just-in-Time-Kompilierungstechnologie ein, die PHP-Code in nativen Maschinencode kompiliert und dadurch die Ausführungsgeschwindigkeit des Programms verbessert. 2. Benannte Parameter: PHP8 unterstützt benannte Parameter und ermöglicht die Verwendung von Parameternamen beim Aufruf von Funktionen usw.
