인쇄 vs 에코, 어느 것이 더 빠릅니까?

藏色散人
풀어 주다: 2023-04-04 21:34:01
원래의
3359명이 탐색했습니다.

우리 대부분과 마찬가지로 나도 print를 echo로, ++$i를 $i++로, 큰따옴표를 작은따옴표로 바꾸는 등 의미 없는 미세 최적화에 대한 블로그 게시물을 읽는 데 지쳤습니다. 왜 그렇습니까? 99.999999%의 경우에는 중요하지 않습니다. APC와 같은 PHP 가속기를 설치하거나 데이터베이스 열에 누락된 색인을 추가하거나 홈 페이지에서 1000개의 데이터베이스 요청을 피하는 것이 좋습니다.

인쇄 vs 에코, 어느 것이 더 빠릅니까?

이 질문에 대한 답을 정말로 알고 싶다고 가정해 보세요. 가장 빠른 속도를 찾기 위해 스크립트를 작성하고 백만 번 실행하는 대신, PHP 코드 작성 내용을 더 잘 이해할 수 있도록 때때로 유용할 수 있는 몇 가지 흥미로운 도구를 보여 드리겠습니다.

"Vulcan 논리 디스어셈블러"인 VLD를 입력하세요. VLD는 Derrick Rethans가 작성했으며 VLD 홈 페이지에서 볼 수 있듯이 "Zend 엔진에 연결되어 스크립트의 모든 opcode(실행 단위)를 덤프"합니다.

VLD 설치는 매우 간단합니다. 최신 버전을 다운로드하고 다른 PHP 확장과 마찬가지로 설치하세요.

$ phpize
$ ./configure
$ sudo make install
로그인 후 복사

PHP에서 확장을 활성화하세요. ini 파일:

extension=vld.so
로그인 후 복사

이제 내부를 살펴볼 시간입니다. 두 개의 간단한 파일을 만듭니다. 하나는 echo를 사용하고 다른 하나는 print:

// print.php
로그인 후 복사

를 사용하여 명령줄에서 이 스크립트를 실행합니다. activate=1 매개변수는 VLD 출력을 활성화합니다. 다음 스크립트에서 생성된 opcode를 살펴보겠습니다.

$ php -d vld.active=1 print.php
로그인 후 복사

-

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
로그인 후 복사

-

$ php -d vld.active=1 echo.php
로그인 후 복사

-

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
로그인 후 복사

차이가 보이나요? 예, print는 실제로 무언가를 반환하기 때문에 opcode를 사용합니다. echo가 print보다 빠르다는 결론을 내릴 수 있습니다. 그러나 스크립트에 인쇄할 호출이 수백 개 있더라도 opcode에는 비용이 들지 않습니다.

print는 항상 1을 반환하므로 echo에서는 불가능한 다음과 같은 흥미로운 작업을 수행할 수 있습니다.

[php]
로그인 후 복사

콘텐츠가 많은 스크립트를 실행할 때 실행되는 opcode 수를 알고 싶으십니까? 다음을 시도해 보세요.

$ php -d vld.active=1 print.php 2> output
$ grep "number of ops" output | cut -f 5 -d ' ' | (tr '\n' +; echo 0) | bc
로그인 후 복사

새로운 WordPress 설치를 시도했습니다. 내 노트북에서 "버스 오류"로 끝나기 전에 스크립트가 일시 중지되었지만 opcode 수가 230만 개를 초과했습니다.

위 내용은 인쇄 vs 에코, 어느 것이 더 빠릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿