우리 대부분과 마찬가지로 나도 print를 echo로, ++$i를 $i++로, 큰따옴표를 작은따옴표로 바꾸는 등 의미 없는 미세 최적화에 대한 블로그 게시물을 읽는 데 지쳤습니다. 왜 그렇습니까? 99.999999%의 경우에는 중요하지 않습니다. APC와 같은 PHP 가속기를 설치하거나 데이터베이스 열에 누락된 색인을 추가하거나 홈 페이지에서 1000개의 데이터베이스 요청을 피하는 것이 좋습니다.
이 질문에 대한 답을 정말로 알고 싶다고 가정해 보세요. 가장 빠른 속도를 찾기 위해 스크립트를 작성하고 백만 번 실행하는 대신, 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!