올해말에는 PHP8이 곧 출시될 예정입니다. 이 주요 버전에는 공용체 유형, 정적 반환, 주석 속성 등 많은 새로운 기능이 포함되어 있지만 가장 기대되는 개선 사항은 JIT 컴파일러입니다.
더 많은 기능은 PHP8을 참조하세요PHP 8이 출시되었습니다! PHP 팀이 첫 번째 베타 버전 Alpha1 출시
이론적으로 JIT가 PHP 스크립트 컴파일을 처리하는 방식은 애플리케이션 속도를 높일 수 있습니다. 하지만 이 접근 방식이 우리의 기대에 부응하는지 살펴보겠습니다.
이 글에 사용된 PHP-8은 최종 버전이 아니라는 점을 참고해주세요.
먼저 실행할 코드를 작성해 보겠습니다. 버블 정렬은 최악의 정렬 알고리즘이고 이런 종류의 테스트에만 이 정렬 알고리즘을 사용할 수 있기 때문에 선택했습니다.
<?php function bubble_sort($array){ $start = microtime(true); do { $sw = false; for($i = 0, $size = count($array) - 1; $i < $size; $i++) { if( $array[$i] > $array[$i + 1] ) { list( $array[$i + 1], $array[$i] ) = array($array[$i], $array[$i + 1]); $sw = true; } } } while($sw); $end = microtime(true); return $end - $start; } $array = array(1000, -202, 3, 0, 2, 77, 5, -1, 4, 34, -203, 1, 0.5 , -3, 0.88, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -2010000 ); echo "\n"; echo bubble_sort($array); echo "\n"; ?>
이 스크립트가 잘 작성되지 않았다는 것을 알고 있습니다. 특히 중간에 있는 불쾌한 배열은 더욱 그렇습니다. 나는 무작위 배열을 생성할 수 있다는 것을 알고 있습니다. 또한 파일에서 이 배열을 읽을 수 있다는 것도 알고 있습니다. 그러나 나는 다른 요소를 고려할 필요가 없는 매우 느린 버블링 알고리즘을 원합니다. 나는 이 벤치마크에서 추가적인 소음을 원하지 않습니다.
먼저, 현재 버전의 PHP 7.4에서 스크립트를 실행했습니다.
docker container run --rm -v $(pwd):/script/ php:7.4 php /script/bubble.php
100번 실행한 결과 평균 0.10253500938416초의 시간이 걸렸습니다. 나쁘지 않습니다.
이제 PHP-8에서 실행 중이므로 아직 JIT를 활성화하지 마세요.
docker container run --rm -v $(pwd):/script/ martinpham/php8:fpm-extra-alpine php /script/bubble.php
100회 동일한 실행의 평균 시간은 0.098223924636841초입니다. 솔직히 말해서 이러한 개선은 그다지 눈에 띄지 않습니다.
이제 오랫동안 기다려온 JIT를 테스트해 보겠습니다.
docker container run --rm -v $(pwd):/script/ keinos/php8-jit php /script/bubble.php
평균 실행 시간은 0.053637981414795초입니다! JIT는 정말 놀랍습니다! 실행 시간에 대해 매우 걱정하는 나 같은 사람에게는 이것이 큰 도움이 됩니다. 숫자로만 보면 크게 느껴지지 않지만(0.04458594322초 향상), 백분율로 환산하면 45.39%로 우위를 더 잘 알 수 있다.
다양한 각도에서 비교하고 싶어서 2009년 PHP-5.3 버전을 사용하여 이 코드를 실행해봤습니다.
docker 컨테이너 실행 --rm -v $(pwd):/script/ php:5.3 php /script/bubble.php
평균 0.64574003219604초가 걸렸습니다. JIT가 활성화된 PHP-8보다 0.5921020508이 더 많습니다(-1,103.88 감소). 맙소사, 우리가 2009년에 어떻게 여기까지 왔지?
참고:
내가 선택한 스크립트에는 순수한 버블링 알고리즘만 있습니다. 물론 여행하는 외판원 문제나 이진 트리와 같은 다른 코드를 시도해 볼 수도 있습니다. 결과는 비슷해야 합니다.
기사에서 언급했듯이 이 벤치마크가 실행된 PHP-8 버전은 최종 버전이 아니므로 최종 릴리스에는 다른 개선 사항이 추가될 가능성이 있습니다.
테스트 결과에서 소수점 이하 자릿수를 많이 유지했습니다. 비록 매우 장황해 보이지만 최대한 정확하고 싶었습니다.
벤치마킹에서는 keinos와 martinpham의 docker 이미지를 사용합니다. 사실, 다른 도구도 많이 있습니다. 마음에 드는 도구를 선택하여 사용해 볼 수 있습니다.
테스트를 실행한 노트북은 Linux Manjaro, 3GHz Intel Core i5, 32GB RAM이었습니다. 다른 구성에서는 정확한 숫자가 다를 수 있지만 개선 사항은 비슷할 것이라고 생각합니다.
JIT 컴파일러에 대한 자세한 소개는 이 기사를 참조하세요.PHP8 새로운 기능 JIT 자세한 그래픽 설명
위 내용은 PHP 8은 얼마나 많은 성능 향상을 달성했습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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