늦었지만 도착했어요! PHP8 리뷰가 왔습니다~
PHP 8 알파 1은 6월 25일에 출시되었고, PHP 8 알파 2는 7월 9일에 출시되었습니다. 일반적으로 알파 2는 약간 사용 가능한 버전이므로 주말 동안 평가해 보았습니다.
먼저 결과를 살펴보겠습니다:
JIT가 켜지지 않음
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가 켜져 있음:
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
그리고 Opcache가 켜지지 않음:
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가 켜지지 않음: 2.299s Opcache가 활성화되었지만 JIT가 활성화되지 않은 경우: 1.419s Opcache를 켜고 JIT를 켠 경우: 0.155s
JIT를 켠 경우 JIT를 켠 경우보다 9.15배에 가깝습니다. 여러 번 테스트한 결과 이 값은 8배에서 10배 사이로 안정적입니다.
MPF는 어떻게 작동하나요?
비즈니스에 더욱 가까워지기 위해 mpf 프레임워크
environment
aliyun centos 6.9
php7.test.com php-fpm 프로세스에서 테스트했습니다. php8.test.com php-fpm 하나의 프로세스
Mpf 두 개의 인터페이스
/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); }
스트레스 테스트
php7 상황 계산이 적음
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 더 많은 계산
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는 더 적은 계산을 활성화합니다
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는 더 많은 계산을 활성화합니다
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는 더 적은 계산을 비활성화합니다
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
php8 JIT는 많은 계산을 비활성화합니다
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
[image:BA1A37D 8 -760E -4637-901B-3E3521F969E7-4107-0000191504DD1B2E/86D37899-3B46-4BDA-B396-E5C8DD51068E.png]

8JIT는 13
倍,而且计算越多优化越明显,计算多情况下php8JIT是php7性能的25.7
php7 성능의 2배.
하지만 제가 생각하는 놀라운 문제가 하나 있습니다. PHP8에는 JIT 없는 계산에 있어서 최적화가 많이 되어 있는데, 테스트 방향에 문제가 있는 줄 알았는데, 여러 번 시연을 해본 결과 이 데이터가 정확했습니다. 시간이 있으면 여기에서 찾아보고 싶습니다. 최적화 포인트는 무엇입니까?
컴파일 프로세스
불만: PHP 수동 컴파일이 점점 더 번거로워지고 있습니다. 컴파일하는 데 2시간이 걸렸고, 모두가 더 많은 요구 사항을 작성할 수 있도록 함정을 공유하겠습니다
환경.
aliyun centos 6.9, 저희 회사는 주로 이 버전을 사용합니다.
php 소스 코드 컴파일
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复制代码
여기서 일반적으로 makefile 생성이 실패합니다. 생성이 성공한 후
make -j 8 make install cp php.ini-production /yourdir/php8/etc/php.ini
configure php.ini
opcache의 이전 구성을 기록해 두세요. ini 에서 JIT는 여전히 Opcache의 최적화입니다.
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
Configure failure 솔루션
다음은 ./configure failure
문제 1
No package 'sqlite3' found
Solution
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"复制代码
Note
이 작업을 직접 수행하면 작동하지 않습니다. yum Warehouse의 버전이 너무 낮습니다.
yum install sqlite-devel
문제 2
configure: error: Please reinstall the iconv library.
Solution
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
문제 3
No package 'oniguruma' found
마찬가지로 yum도 작동하지 않습니다. 버전이 너무 낮습니다.
yum install oniguruma-devel
Solution
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"
4번 문제
No package 'libzip' found
Solution
wget https://libzip.org/download/libzip-1.7.2.tar.gz tar -zxf libzip-1.7.2.tar.gzcd libzip-1.7.2 cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/lib/libzip-1.7.2 make make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libzip-1.7.2/lib/pkgconfig"复制代码
PHP 8과 JIT를 즐겨보세요!
위 내용은 늦었지만 도착했어요! PHP8 리뷰가 왔습니다~의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











php8에 mysql 확장을 추가하는 단계는 다음과 같습니다. 1. MySQL 클라이언트 라이브러리를 설치합니다. 2. PHP 8용 개발 도구를 설치합니다. 3. MySQL 확장 소스 코드를 다운로드합니다. 5. MySQL 확장을 활성화합니다. MySQL 확장; 6. 웹 서버만 다시 시작합니다.

php5와 php8의 차이점은 성능, 언어 구조, 유형 시스템, 오류 처리, 비동기 프로그래밍, 표준 라이브러리 기능 및 보안 측면에서 있습니다. 자세한 소개: 1. 성능 향상 PHP5와 비교하여 PHP8은 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 컴파일하고 최적화하여 실행 속도를 향상시킵니다. PHP8에는 몇 가지 새로운 언어 구조와 기능이 도입되었습니다. PHP8은 명명된 매개변수를 지원하므로 개발자는 매개변수 순서 대신 매개변수 이름을 전달할 수 있습니다.

이번 글에서는 apache2.4 설치 방법과 php8.0 설정 방법을 소개하겠습니다. 글에는 사진과 함께 apache2.4+php8.0 설정 방법이 자세히 나와 있습니다.

PHP8은 mysqli와 PDO를 사용하여 데이터베이스에 연결할 수 있습니다. 자세한 소개: 1. 연결할 데이터베이스 서버 이름, 사용자 이름, 비밀번호 및 데이터베이스 이름을 전달하여 mysqli를 사용하여 데이터베이스에 연결합니다. 그런 다음 `connect_error` 속성을 사용하여 연결 성공 여부를 확인하고 연결이 실패하면 오류 메시지를 출력합니다. 마지막으로 `close()` 메소드를 호출하여 연결을 닫습니다. 2. PDO를 사용하여 데이터베이스에 연결하고 데이터베이스 서버 이름, 비밀번호, 데이터베이스 이름 등을 전달하여 연결합니다.

php8 데이터 형식의 방법에는 문자열을 정수로 변환, 정수를 문자열로 변환, 문자열을 부동 소수점 수로 변환, 부동 소수점 수를 문자열로 변환, 배열을 문자열로 변환, 문자열을 배열로 변환, 부울 값을 정수로 변환, 정수를 문자열로 변환 등이 있습니다. 부울 값 및 변수 유형 결정 및 변환. 자세한 소개: 1. 문자열을 정수로 변환하는 작업에는 intval() 함수와 (int) 강제 형식 변환이 포함됩니다. 2. 정수를 문자열로 변환하는 작업에는 strval() 함수와 (문자열) 강제 형식 변환이 포함됩니다. 부동 소수점에 대한 문자열 등등.

이 기사에서는 PHP 8의 JIT를 안내하고 JIT가 해석 프로세스에 참여하는 방법에 대해 설명합니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.

php8의 향상된 성능에는 다음이 포함됩니다. 1. JIT 컴파일러 도입 3. 가비지 수집 메커니즘 개선 5. 새로운 언어 기능 최적화 8. 새로운 메모리 관리 메커니즘을 도입합니다. 9. 코드 생성을 최적화합니다. 자세한 소개: 1. JIT 컴파일러의 도입 PHP8은 보다 효율적인 실행을 위해 PHP 코드를 기계어 코드로 변환할 수 있는 동적 컴파일 기술인 JIT 컴파일러를 도입합니다.

php8의 기능: 1. 명명된 매개변수, 4. 주석, 6. 일치 표현식, 7. 향상된 유형 시스템, 10. 일관성 개선. 자세한 소개: 1. JIT 컴파일러인 PHP8은 PHP 코드를 기본 기계 코드로 컴파일하여 프로그램의 실행 속도를 향상시키는 JIT(Just-In-Time) 컴파일 기술을 도입합니다. 2. 명명된 매개변수, PHP8은 명명된 매개변수를 지원하여 다음을 사용할 수 있습니다. 함수 호출 시 매개변수 이름 등
