이 기사에서는 PHP 최적화, 버퍼링 및 압축을 위한 실용적인 솔루션을 제시합니다.
널리 사용되는 웹 프로그래밍 언어인 PHP의 가장 큰 장점은 속도입니다. PHP4는 이 작업을 매우 잘 수행했으며 이보다 더 빠른 스크립트 언어는 거의 찾을 수 없습니다. 그러나 애플리케이션 부하가 높거나 대역폭이 상대적으로 작거나 서버 성능에 영향을 미치는 다른 병목 현상이 있는 경우에는 제가 처방한 처방 중 일부를 시도하여 효과가 있는지 확인하는 것이 좋습니다.
1. 코드 최적화
코드 최적화라고 하면 깔끔하고 명확한 코드가 떠오를 수도 있지만 이것이 이 글의 의미는 아닙니다. 속도를 추구하려면 PHP 소스 코드에 상응하는 조정을 해야 하기 때문입니다. 일반적으로 중복된 주석은 코드를 읽을 수 없도록 제거됩니다. 그러나 좋은 자질을 가진 프로그래머에게 이것은 정말 놀라운 일입니다. 다행스럽게도 Zend Technologies는 이를 수행하는 데 도움이 되는 Zend 최적화 엔진을 출시했습니다. 지금은 무료이지만 Zend Optimizer 라이선스를 따라야 합니다. 본 제품은 엔진에서 생성된 중간 코드를 최적화할 수 있습니다.
본 엔진 설치는 비교적 간단합니다. 플랫폼에 해당하는 버전을 다운로드한 후 압축 파일의 압축을 푼 후 php.ini 파일에 다음 두 줄을 추가하고 웹 서버를 다시 시작하면 완료됩니다.
zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=끄기
Win32 플랫폼인 경우 다음과 같아야 합니다:
zend_optimizer.optimization_level=15
zend_extension_ts="C:경로 o endOptimizer.dll"
zend_loader.enable=끄기
! 그거 실수 아니지? 왜 세 줄인가? 실제로 세 번째 줄은 선택 사항입니다. zend_loader를 끄면 속도가 약간 향상될 수 있으므로 이 세 번째 줄을 php.ini에 넣는 것이 좋습니다. 이 기능을 끄기 위한 전제 조건은 Zend 암호화 프로그램을 사용하지 않는다는 것입니다.
2. 버퍼링
속도를 더욱 향상시키고 싶다면 버퍼링 기술의 활용을 고려해야 합니다. Zend Cache(베타 버전), APC, Afterburner Cache 및 jpCache를 포함한 몇 가지 대체 솔루션이 있습니다.
위의 모듈은 모두 .php 파일에 대한 첫 번째 요청으로 생성된 중간 코드를 웹 서버의 메모리에 저장한 다음 후속 요청에 대해 "컴파일된" 버전을 반환합니다. 이렇게 하면 디스크 읽기 및 쓰기와 모든 메모리 작업이 줄어들기 때문에 이 프로세스를 통해 애플리케이션 성능이 크게 향상될 수 있습니다.
이러한 제품은 이미 많이 있으므로 누구를 선택해야 할까요?
Zend Cache는 대용량 PHP 페이지를 처음 로드한 후에는 확실히 속도가 향상되는 것을 느낄 수 있으며 서버는 더 많은 리소스를 확보하게 됩니다. 불행하게도 이 제품은 돈이 들지만 어떤 경우에는 돈을 아끼고 싶지 않을 수도 있습니다.
Afterburner Cache는 Bware Technologies의 제품으로 현재 베타 버전입니다. Zend Cashe와 동일한 것 같지만 Zend Cache만큼 좋은 결과를 얻을 수 없고 Zend 최적화 엔진과도 작동하지 않지만 무료입니다. , 그래서 I 이 모듈이 사용됩니다.
APC(Alternative PHP Cache)는 Community Connect에서 출시한 또 다른 무료 모듈로 프로덕션 환경에 준비된 것으로 보입니다.
3. 웹 콘텐츠 압축
점점 더 혼잡해지는 네트워크에서는 대역폭을 절약하는 것이 물을 절약하는 것만큼 중요합니다. IETF 표준에 따르면 대부분의 브라우저는 gzip을 사용하여 압축된 콘텐츠를 지원해야 합니다. 이는 gzip으로 압축된 콘텐츠를 브라우저로 보낼 수 있고 브라우저가 데이터의 압축을 투명하게 풀 수 있음을 의미합니다.
mod_gzip은 Remote Communications에서 출시한 무료 Apache 모듈로, 정적 웹 콘텐츠를 압축하여 브라우저로 보낼 수 있습니다. 대부분의 정적 웹 페이지에 이 모듈이 적합합니다.
Remotecommunications 회사 사람들은 이 모듈이 mod_php, mod_perl, mod 등에서 생성된 모든 동적 콘텐츠를 지원한다고 말했지만, mod_gzip 메일링 목록에 따르면 여전히 작동하지 않는 것 같습니다. 이 문제는 해결될 것으로 예상되지 않습니다
.
1.3.14.6f까지.
동적 콘텐츠를 압축하려면 스크립트의 시작과 끝 부분에 사용되는 PHP 클래스인 class.gzip_encode.php를 사용할 수 있습니다. 전체 웹 사이트에 대해 php.ini의 auto_prepend 및 auto_append에 있는 함수가 호출됩니다. 자세한 내용은 이 수업의 프로그램을 읽어보면 알 수 있습니다. 이 프로그램에는 설명이 잘 되어 있고 저자가 거의 모든 것을 알려줍니다. 하지만 이를 사용하기 전에 PHP가 zlib를 지원하도록 컴파일되어야 합니다.
PHP 4.0.4의 경우 새로운 해결책은 위 클래스와 동일한 효과를 얻을 수 있는 ob_gzhandler를 사용하는 것입니다. 간단히 다음 문장을 php.ini에 추가하면 됩니다.
이렇게
하면 PHP가 출력 버퍼링을 활성화하고 모든 출력을 압축할 수 있습니다. 모든 내용을 압축하여 출력하고 싶지 않은 특별한 이유가 있는 경우 .htaccess 파일에 다음 줄을 추가하여 해당 디렉터리의 파일을 압축할 수 있습니다.
php_value output_handler ob_gzhandler는
PHP 코드에 직접 추가할 수도 있습니다.
ob_start("ob_gzhandler");
이 압축 기술은 매우 효과적이지만 Netscape Communicator 사용자에게는 그래픽 파일을 압축할 수 없기 때문에 불완전해 보입니다. Mu⑺Stop의 문제점은 무엇입니까? JPEG 및 gif 파일 압축에는 이 문제가 없나요?
결론:
이 기사에서 논의된 기술을 사용하면 웹 사이트 성능이 향상되지만 다음 사항에 유의하십시오.
- PHP가 병목 현상의 원인이 아닐 수도 있습니다. 다른 원인(예: 데이터베이스)을 다시 확인하세요
. - 서버 성능 상태를 최대화할 수 없습니다. 따라서 PHP와 버퍼링에 대해 불평하기 전에 서버를 업그레이드해야 할 때인지 아니면 동적 로드 밸런싱 기술을 채택해야 할 때인지 고려해보세요(많은 비용이 듭니다).
- 콘텐츠 압축을 과소평가하지 마십시오. 100Mb 인트라넷에서 PHP 애플리케이션의 속도 향상을 확인하는 동안 모뎀 사용자가 100Kb HTML 페이지에 대해 불평하는 부분을 잊지 마십시오.