PHP의 장점 중 하나는 속도가 매우 빠르다는 점인데, 이는 일반 웹사이트 애플리케이션에 충분하다고 할 수 있습니다. 그러나 사이트의 트래픽이 높거나 대역폭이 좁거나 기타 요인으로 인해 서버의 성능 병목 현상이 발생하는 경우 PHP 속도를 더욱 높일 수 있는 다른 방법을 생각해야 할 수도 있습니다. 이 기사에서는 사용자가 좀 더 "멋지게" 탐색할 수 있도록 여러 측면에서 이 작업을 수행하는 방법을 소개합니다.
코드 최적화
더 깔끔한 코드를 작성하는 방법을 다시 말씀드리고 싶지는 않습니다. 속도가 필요할 때 이미 PHP 소스 코드를 더 적게 최적화했을 수도 있습니다. 여기서 제안하는 것은 이 지루한 작업을 다른 도구로 완료할 수 있다는 것입니다. Zend Technologies 홈페이지(http://www.zend.com/)에서 무료로 제공되는 프로그램인 Zend Optimizer입니다. 그 원리는 간단합니다. Zend 엔진에서 생성된 중간 코드를 감지하고 이를 최적화하여 더 높은 실행 속도를 얻는 것입니다. 코드를 최적화하는 것은 다소 지루한 작업이고 최적화된 코드가 이해하기 어려워질 수 있다고 생각합니다. 특히 PHP 프로그램을 잠시 내려놓았는데 갑자기 고객이 변경을 요청하면 스스로 무엇을 해야 할지 모를 수도 있습니다. . 알았어요 ;-). 따라서 PHP 소스 코드가 비교적 복잡할 때 이러한 최적화 작업을 수행하려면 Zend Optimizer를 사용하는 것이 좋습니다. 장점은 코드를 복잡하고 이해하기 어렵게 만들지 않는다는 것입니다.
Zend Optimizer 설치는 매우 간단합니다. 사용 중인 플랫폼에 따라 미리 컴파일된 관련 라이브러리를 다운로드하고 php.ini에 두 줄을 추가한 후 웹 서버를 다시 시작하세요!
zend_optimizer.optimizati
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=Off
조금 놀라실 수도 있는데 두 줄이라고 나오지 않았나요, 왜 그랬나요? 세 줄이 됩니다. 그러나 세 번째 줄은 선택 사항입니다. 이 zend_loader를 비활성화하면 최적화가 더 빨라질 것이므로 이 줄을 php.ini 파일에 추가하는 것이 좋습니다. Zend Encoder Runtime을 사용하지 않는 경우에만 zend_loader를 비활성화할 수 있다는 점에 유의하세요. 아래에 Zend Encoder Runtime이 언급되어 있습니다.
더 빨리 가고 싶으세요? 캐시 사용
PHP 애플리케이션에 여전히 더 빠른 속도가 필요한 경우 다음 해결 방법은 캐싱입니다. 이를 수행하는 방법에는 몇 가지가 있습니다. 저는 Zend Cache(평가판), APC 및 Afterburner Cache를 사용해 보았습니다.
위에서 언급한 것은 모두 "버퍼 모듈"입니다.이들 원칙은 유사합니다. PHP 파일이 처음으로 요청되면 동일한 후속 요청에 대해 PHP 소스 코드의 중간 코드를 웹 서버의 메모리에 저장하여 메모리의 "컴파일된" 버전이 직접적으로 실행됩니다. 제공됩니다. 디스크 액세스를 최소화할 수 있으므로 이 방법은 실제로 PHP 성능을 크게 향상시킬 수 있습니다. 더욱 편리한 점은 PHP 소스 코드가 수정되면 버퍼링된 모듈이 이러한 변경 사항을 감지하고 다시 로드할 수 있으므로 고객이 이전 버전의 프로그램을 다운로드하는 것에 대해 걱정할 필요가 없다는 것입니다. 이러한 버퍼링 모듈은 훌륭하지만 어떤 것을 선택해야 합니까? 각각 소개하겠습니다.
Zend Cache는 Zend Technologies의 상용 제품입니다(PHP 엔진과 Zend Optimizer를 무료로 제공하는 회사이기도 합니다). 정말 나쁘지 않습니다. 첫 번째 실행 후에는 PHP의 속도가 크게 향상되었으며 서버에 더 많은 무료 리소스가 있다는 것을 확실히 알 수 있습니다. 단점은 비용을 지불해야 한다는 점이지만, 가격 대비 가치 측면에서는 여전히 그만한 가치가 있습니다.
Afterburner Cache는 Bware Technologies(http://bwcache.bware.it/)에서 제공하는 무료 버퍼 모듈입니다. 현재는 베타 버전으로만 Zend Cache와 같은 역할을 하는 것으로 보이지만 성능 향상은 Zend Cache만큼 좋지 않고, 기존 버전은 Zend Optimizer와 연동되지 않지만 무료입니다.
APC(Alternative PHP Cache)는 Community Connect(http://apc.communityconnect.com/)에서 제공하는 또 다른 무료 모듈입니다. 매우 안정적으로 작동하며 속도가 크게 향상되었습니다. 공식적인 테스트 데이터를 찾지 못했다는 점에 유의해야 합니다. 이는 단지 내 애플리케이션에 대한 테스트일 뿐이므로 결론을 내릴 수 없습니다.
웹 콘텐츠 압축(고객이 더욱 "즐겁게" 사용할 수 있도록)
위의 두 가지 방법을 사용한 후 PHP 애플리케이션의 성능이 크게 향상되었다고 생각합니다. 이제 살펴볼 차례입니다. 다른 측면에서 고려: 다운로드 속도. 애플리케이션이 회사 내에서만 실행되고 모든 고객이 100Mb/s 이더넷을 사용하여 서버에 연결하는 경우에는 문제가 되지 않을 수 있지만 일부 고객이 느린 모뎀 연결을 사용하는 경우 콘텐츠 압축 방법 사용을 고려해야 합니다. . IETF 사양에 따르면 대부분의 브라우저는 gzip 콘텐츠 압축을 지원합니다. 이는 웹 콘텐츠를 클라이언트의 브라우저로 보내기 전에 gzip을 사용하여 압축할 수 있다는 의미입니다. 브라우저는 데이터를 수신할 때 자동으로 압축을 풀고 사용자가 원본 페이지를 볼 수 있도록 합니다. 마찬가지로, 웹페이지의 콘텐츠를 압축하는 방법에는 여러 가지가 있습니다.
Mod_gzip은 Remote Communications(http://www.phpbuilder.com/columns/www.remotecommunications.com)에서 무료로 제공하는 Apache 모듈로, 정적 웹 페이지를 압축할 수 있습니다. 잘 작동합니다. 단지 아파치로 컴파일하기만 하면 됩니다(또는 DSO로 사용하기만 하면 됩니다). Remotecommunications 사람들은 mod_php, mod_perl 등의 동적 콘텐츠를 압축할 수도 있다고 말했습니다. 그런데 시도해 봤는데 안되는 것 같더군요. 나는 mod_gzip 메일링 리스트에서 이 버그가 다음 버전에서 수정될 것이라는 것을 읽었습니다(내 생각에는 버전 1.3.14.6f가 될 것 같습니다). 그러나 정적 콘텐츠 압축에는 계속 사용할 수 있습니다.
하지만 동적 콘텐츠도 압축하고 싶기 때문에 다른 방법을 찾아야 합니다. 한 가지 방법은 class.gzip encode.php(http://leknor.com/code/)를 사용하는 것입니다. PHP 스크립트의 시작과 끝에서 이 PHP 클래스를 호출하여 페이지 콘텐츠를 압축하세요. 전체 사이트에 이러한 압축이 필요한 경우 php.ini 파일의 auto_prepend 및 auto_append에서 이러한 함수를 호출할 수 있습니다. 꽤 잘 작동하지만 로드가 많은 사이트에서는 분명히 약간의 오버헤드가 발생합니다. 작동 방식에 대해 자세히 알아보려면 해당 클래스 코드를 살펴보세요(최소한 zlib 지원으로 PHP를 컴파일해야 합니다). 안에 들어있는 저자의 설명도 매우 자세해서 알아야 할 모든 것을 얻을 수 있습니다.
최근에는 PHP 출력 버퍼링에 관한 기사도 봤습니다. PHP4.0.4에는 새로운 출력 버퍼 처리 방법인 ob_gzhandler가 도입되었습니다. 그 기능은 위에서 소개한 클래스와 동일하지만 차이점은 php.ini에서 다음 구문만 사용해야 한다는 것입니다.
output_handler = ob_gzhandler ;
이는 PHP의 출력 버퍼링 기능을 활성화하고 PHP가 보내는 모든 것을 압축합니다. 몇 가지 특별한 이유로 여기에서 설정하지 않고 필요한 경우에만 기본 설정을 변경하려면(압축 없음), 압축해야 하는 PHP 소스 코드 디렉터리의 .htaccess 파일을 수정하면 됩니다.
php_value output_handler ob_gzhandler
... 또는 다음과 같은 방법으로 PHP 코드에서 직접 호출하십시오.
ob_start("ob_gzhandler")
이 출력 버퍼 핸들러 방법은 좋습니다. 서버에 추가 시스템 오버헤드를 가져오지 않습니다. 이 방법을 사용하는 것이 좋습니다. 그 변화는 다음 예에서 설명할 수 있습니다. 고객이 28.8K 모뎀을 사용하는 경우 이 과정을 마치면 갑자기 ISDN 액세스로 전환했다고 생각할 것입니다. 한 가지 주의할 점은 Netscape Communicator는 이미지 압축을 지원하지 않으므로 표시되지 않는다는 것입니다.따라서 고객이 모두 Internet Explorer를 사용하지 않는 한 jpeg 및 gif 이미지 압축을 비활성화해야 합니다. 다른 파일의 압축에는 문제가 없을 텐데, 특히 브라우저가 흔하지 않은 플러그인을 사용하거나 거의 사용하지 않는 브라우저라면 꼭 테스트 해보시길 권해 드립니다.
다른 유용한 것들...
Zend Technologies의 온라인 스토어는 올해 1월 24일에 출시되었으며 흥미로운 PHP 관련 제품을 판매합니다. 앞서 언급한 Zend Cache와 Zend Encoder(간단히 말하면, 소스 코드 유출 걱정 없이 고객에게 판매할 수 있도록 컴파일된 클래스를 생성할 수 있는 PHP 코드용 컴파일러입니다. 이러한 클래스를 실행해야 하는 웹 서버에서는 ( 디코딩을 위해 Zend Encoder Runtime), Zend Ide(많은 강력한 기능을 갖춘 PHP용 통합 개발 환경) 및 PHP 개발자를 위한 지원 서비스를 사용합니다.
결론
이 글에서 언급한 기술을 사용하면 사이트의 성능을 크게 향상시킬 수 있지만 다음 사항에 유의하세요.
1 병목 현상은 PHP가 아닐 수도 있습니다. 애플리케이션 개체(예: 데이터베이스)의 모든 측면을 검사합니다
2. 웹 서버의 성능은 제한되어 있으므로 성능 저하가 PHP 때문일 수도 있습니다. 서버를 업그레이드해야 합니다. 또는 로드 밸런싱된 시스템 사용을 고려하십시오(비용이 많이 듭니다).
3. 100Mb/s LAN에서는 콘텐츠 압축이 중요하지 않다고 생각하지 마십시오. 응용 프로그램은 매우 잘 수행될 수 있지만 느린 모뎀 사용을 고려해야 합니다.
위의 내용은 nikond90 디지털 SLR 사진에 대한 전체 가이드와 nikond90 디지털 SLR 사진에 대한 전체 가이드를 포함하여 PHP 속도 향상에 대한 전체 가이드를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.