Zend框架项目,而不使用Zend_Application(Zend Framework proje

2019-07-29 14:26发布

我一直在阅读上的许多网站 ,甚至在这里 ,为了提高Zend Framework的应用程序的性能是不使用Zend_Application的引导,但一直没能找到有此表现出了现场。

难道你们知道有这个方法描述,可能为我提供了一些代码样本的地方?

谢谢

Answer 1:

我只是把这个在一起:

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,让你的动作控制器调用使用自己的渲染$this->view->render('my/view-script.phtml')

当你调用$front->dispatch()$request$response对象将被自动创建。 如果你想在引导做具体到他们的东西 - 比如设置在响应的Content-Type头的字符集 - 那么你可以创建你的请求/响应对象自己,做你想要什么,然后将其连接到前与$front->setResponse($response); 同为请求对象。

虽然我看到我的示例使用Zend_Loader_AutoloaderZend_config_Ini这帕德里克笔记招致性能命中。 下一步将是利用数组的配置,从框架剥离require_once调用,注册不同的自动加载磁带机等,以解决这些,练习留给读者... ;-)



Answer 2:

您好我在引导中不使用Zend_Application有点不同意,没有我还没有看到这种技术的具体例子。

个人而言,我不认为在不使用Zend_app提供引导您的应用程序受益,假设)你做的事情“了Zend方式”和b)你的项目或者是足够大的,或只是简单地使用权证Zend框架(或任何为物)。

虽然Zend_App是伟大的标准化结构中创建一致的复杂白手起家,这并不是没有打基线性能显著的性能。 更直接的引导(典型的ZF直到Zend_App的到来)远远更快,也可以不配置文件来完成。

从帕德里克·布雷迪链接服用。

然而对于我上面没有任何意义,他基本上只是说Zend_App是伟大的复杂白手起家,但增加了一个性能命中。 但是,这不就是为前提的任何框架/框架组件? 我知道,帕德里克是一个非常聪明的家伙,我敢肯定,他有他的道理,但我也很想看到这个建议的例子/证据。

也许在回答你的问题,你可以基准采用了最新的Zend框架,然后一个基本的应用程序中使用来自<1.10 Zend框架使用旧的非Zend_App的方式,但我要说,虽然显然并不完美Zend_App显然更快地获得大部分应用程序的向上和运行,因此这是否值得“对性能的影响”是我猜取决于开发人员(一个或多个)。

这里是一个有点进入,你是什么之后,但提到了一个模块化的方法(仍然有趣的,没有少)的链接:

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



文章来源: Zend Framework project without using Zend_Application