2012-05-28 2 views
4

많은 sites도 읽었습니다. here 심지어 Zend Framework 응용 프로그램의 성능을 향상시키기 위해 Zend_Application을 부트 스트랩에 사용하지 않지만 다음과 같은 사이트를 찾을 수 없었습니다. 이것은 입증되었습니다.Zend_Application을 사용하지 않는 Zend Framework 프로젝트

이 방법을 설명하고 일부 코드 샘플을 제공 할 수있는 곳을 아십니까?

감사

답변

6

:

여기

다소 당신이 후에 어떻게 될 것인가에 들어가는하지만, 모듈 식 접근 방식 (덜 여전히 흥미 없음)를 참조한다 링크입니다

https://gist.github.com/2822456

아래의 내용을 완성하기 위해 복제되었습니다. 테스트를 거치지 않았지만 일반적으로 생각하는 방식 (!)에 대한 몇 가지 아이디어가 효과가있을 수 있습니다. 이제 조금 밟아 보았으므로 Zend_Application, 부트 스트랩 클래스 및 구성 가능/재사용 가능한 응용 프로그램 자원에 대해 큰 감사를 표합니다. ;-)

// Do your PHP settings like timezone, error reporting 
// .. 

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/_zf/application')); 

// Define application environment 
defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path(), 
))); 

// Get autoloading in place 
require_once 'Zend/Loader/Autoloader.php'; 
$autoloader = Zend_Loader_Autoloader::getInstance(); 
// Any additional configs to autoloader, like custom autoloaders 

// Read config 
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV); 

// bootstrap resources manually: 
// * create db adapter 
// * create resource autoloaders with the mappings you need 
// * etc 

// Get the singleton front controller 
$front = Zend_Controller_Front::getInstance(); 

// Set controller directory 
$front->setControllerDirectory(APPLICATION_PATH . '/controllers'); 

// Or set module directory 
$front->setModuleDirectory(APPLICATION_PATH . '/modules'); 

// Other front config, like throw exceptions, etc. 
// ... 
// 
// Create a router 
$router = new Zend_Controller_Router_Rewrite(); 

// Add routes to the router 
$router->addRoute('myRoute', new Zend_Controller_Router_Route(array(
    // your routing params 
))); 
// More routes... 
// Alternatively, the routes can all be in an xml or ini file and you can add 
// them all at once. 

// Tell front to use our configured router 
$front->setRouter($router); 

// Add an plugins to your $front 
$front->registerPlugin(new My_Plugin()); 
// other plugins... 

// Dispatch the request 
$front->dispatch(); 

일부보기 /보기 렌더러 작업이있을 수도 있습니다. 그러나 다른 곳에서 언급했듯이 ViewRenderer는 단순한 성능 저하를 초래합니다.성능은 문제가 있다면, 당신은 ViewRenderer을 비활성화하고 액션 컨트롤러는 $front->dispatch()$request$response 개체가 자동으로 생성됩니다를 호출 할 때 $this->view->render('my/view-script.phtml')

사용하여 자신의 렌더링을 호출 할 수 있도록 할 것입니다. 응답의 Content-Type 헤더에 charset을 설정하는 것과 같이 부트 스트랩에서 특정 작업을 수행하려는 경우 직접 요청/응답 객체를 만들고 원하는 것을 수행 한 다음 앞면에 첨부 할 수 있습니다 with $front->setResponse($response); 요청 오브젝트와 같습니다.

내 예제에서는 Padraic 노트가 성능 조회를 초래하는 Zend_Loader_AutoloaderZend_config_Ini을 사용합니다. 다음 단계는 설정을 위해 배열을 사용하고, 프레임 워크에서 require_once 호출을 제거하고, 다른 오토로더 등을 등록하는 것입니다. 독자에게 남은 연습 ... ;-)

2

안녕하세요이 (가) 부트 스트랩에서 Zend_Application를 사용하지 않는 다소 동의하지 내가 아직 더는이 기술의 구체적인 예를 볼 수 있습니다.

개인적으로 나는 응용 프로그램을 부트 스트래핑하기 위해 Zend_app을 사용하지 않을 경우 이점을 알지 못합니다. a) 자신의 일을 '젠드 웨이'라고 가정하고 b) 프로젝트가 크거나 젠드 프레임 워크를 사용하여 또는 그 문제에 대해). Zend_App는 표준화 된 구조 내에서 일치 복잡한 부트 스트랩 을 만들기에 좋은 곳입니다 동안

, 그것은 기본 성능에 상당한 성능 저하없이 오지 않는다. 보다 직접적인 부트 스트랩 (Zend_App가 도착할 때까지 ZF의 전형)이 훨씬 빠르며 구성 파일없이 일 수도 있습니다.

촬영 : Pádraic Brady link.

글쎄, 위의 내용은 이해할 수 없다. 그는 기본적으로 Zend_App은 복잡한 부트 스트랩에 적합하지만 성능이 좋다고 말했다. 그러나 모든 프레임 워크/프레임 워크 구성 요소에 대한 전제가 아닌가? 저는 Padraic이 매우 영리한 사람이라는 것을 알고 있습니다. 그리고 저는 그가 자신의 추론을 가지고 있다고 확신합니다. 그러나 저는이 제안에 대한 예/증거를보고 싶습니다. 당신이 벤치 마크 기본 응용 프로그램을 최신 젠드 프레임 워크를 사용하고 기존의 비 Zend_App 방법을 사용하여 < 1.10에서 젠드 프레임 워크를 사용하지만, 분명 완벽하지 Zend_App 명확하게 빠른에 있지만 나는 말을 할 수 귀하의 질문에 대답 아마도

대부분의 앱을 설치하고 실행해야하므로 '실적이 좋다'는 가치가 있는지 여부는 개발자에게 추측됩니다. 난 그냥 함께이 던진

http://www.osebboy.com/blog/zend-framework-modules/

+0

이 점에 유의해야합니다 문서도 2 세 이상입니다 ... 그 이후로 상황이 바뀌 었는지 궁금합니다 –

+0

동의합니다. Zend_App은 훌륭하게 작동하며 깨끗합니다. – conradfr

+1

예, 테스트 케이스 및 벤치 마크가 없어도 조금 불필요한 것 같습니다. 내가 사용한 트릭은 Zend 라이브러리의 모든 require/include를 제거하는 것입니다. – conradfr