2011-09-18 3 views
7

Zend MVC의 성능이 좋지 않아 어려움을 겪고 있습니다.Zend Framework 느린 프로파일 링 MVC 설정

는 난 단지 die()을하는 하나의 컨트롤러를 설정하고, 나는 Xdebug는 활성화, 나를 말한다 내 요청에 webgrind 뽑아 : 정확히 무슨 일이 너무 오래 걸리는 결정

789 different functions called in 2150 milliseconds (1 runs, 137 shown) 

나는 데 문제 :

[procedural]  {main} O 1 9 2150 
[class]  Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap O 5 7 1203 
[class]  Zend_Config_Ini->_processKey O 622  451  1191 
[class]  Zend_Config_Ini->_processSection O 2 49 1023 
[class]  Zend_Application_Bootstrap_BootstrapAbstract->_executeResource O 16 11 1017 

(위의 꽤 많이 내 application.ini에 정의 된 클래스를 발사 부트 스트랩의 나에게 말한다 -하지만 사람들이 느린 아무 생각이 없다)

,369을

처리 시간의 대부분을 차지하는 코드의 단계를 정확히 찾아내는 좋은 방법은 무엇입니까?

+1

* (팁) * [젠드 프레임 워크 성능 가이드] (http://framework.zend.com/manual/en/performance.html) – Gordon

+0

@Gordon 그것은 많은 곳에서 시대가 오래되었습니다 - 그 중 많은 부분이 실제로 그렇게 효과적이지는 않습니다. 심지어 어떤 사람들은 더 나쁜 성과를 내기도합니다. –

+0

@ Jani의 범죄는 아니지만 증거가없는 무언가를 주장하는 사람과 공식적인 레퍼런스 가이드 사이에 선택의 여지가 있다면 공식적인 레퍼런스 가이드를 계속 사용하겠습니다. 나는 거기에 주어진 충고로 좋은 결과를 얻었다. – Gordon

답변

7

당신은 당신의 느린 함수 호출이 무엇인지 찾을 출력을 webgrind 확장 할 수 있어야한다. 또는 프로파일 링 세션 중에 function trace feature 개의 Xdebug를 사용하여 함수 호출에 대한 자세한 정보를 얻을 수 있습니다.

일반적으로 가능한 경우 캐시를 사용해야합니다. Memcache는 APC보다 Zend_Cache 백엔드보다 빠르지 만 코드의 빠른 속도 향상을 얻으려면 APC 확장을 설치해야합니다 (개발 모드에서도). 저는 Zend Framework Quick Start on my blog (그 게시물은 이탈리아어이지만 벤치 마크 데이터는 영어로되어 있습니다)에 미치는 영향을 벤치마킹 한 결과 홈 페이지의 속도가 3 배 빨라서 인상적이었습니다.

Zend_Application 구성 파일 (예 : 프로파일 링 시간의 절반)에 캐시 아이디어를 적용했습니다. 필자는 Zend Framework 프로젝트 리더 인 Matthew Weier O'Phinney와 here을 논의했습니다. 내가 한 것은 기본값 인 Zend_Application_loadConfig 메서드를 구문 분석 된 파일의 결과를 캐시하는 사용자 지정 메서드로 재정의하는 것입니다. 이 전략을 구현하는 클래스를 찾을 수 있습니다 here on github.

+0

함수 추적이 내가 찾고있는 것이 었습니다! 또한, 귀하의 application.ini 캐시 접근 방식은 내 경우에 대한 전망 :) –

4

공식 성능 가이드에서 설명한대로 require_once 라이브러리를 제거한 후 개발자 컴퓨터에도 Zend Server CE, APC 또는 eAccelerator와 같은 opcode 캐시를 설치해야합니다. 또한

, 당신은 순서대로 application.ini 필요할 수 있습니다 데이터 캐싱에서 구성 할 수있는 몇 가지 자원 플러그인을 잘 수행하는 등 Zend_Db, Zend_Loader, 같은

돈 (내가 여기 옵 코드 캐싱 차이를 설명하지 않습니다) 프로덕션 환경에서 opcode 및 메모리 캐싱을 사용한다는 사실을 잊어서는 안됩니다. 따라서 가까운 조건에서 벤치 마크해야합니다.

개발 중에는 무효화가 매우 빠르기 때문에 확실히 캐시를 정의하므로 ms를보기 전에 적어도 두 번 연속하여 페이지를 새로 고침하십시오.

그리고 나서 "진짜"병목 현상에 대해 걱정할 수 있습니다.

ZF 부트 스트랩 성능에 관한 내용입니다. 하지만 귀하의 질문은 프로파일 링 코드에 관한 것입니다. 나는 그것을 위해 비 무료 도구를 사용하지만, Kcachegrind과 함께 Xdebug는 아주 잘 또한 작업을 수행합니다 http://xdebug.org/docs/profiler

+0

어떤 도구를 사용하고 있습니까? 나는 여전히 좋은 PHP 프로파일 러를 찾고있다. – Fabio

+0

Zend Studio + Zend Debugger로 프로필을 만듭니다. My Zend Debugger는 Zend Server CE에 설치되어 있지만 원하는 램프 스택에 다운로드하여 설치할 수 있습니다. 나는 젠드 디버거도 PhpStorm에서 작동한다는 것을 읽었지만, 디버깅뿐만 아니라 거기에서도 프로파일 링을하는지 알지 못한다. –

+0

솔직히 Xdebug + Kcachegrind는 젠드 스튜디오 솔루션에있다. 내 클라이언트의 Zend Server Entreprise와의 통합이 그 유일한 이유입니다. –