我正在使用使用Zend tool
生成的传统Zend框架应用程序。我的应用程序中有几个模块,它们都使用 Zend tool
生成。我打算在我的应用程序中使用 Zend 框架中的default routes
。
例如:www.host.com/module/controller/action/param1/value1/param2/value2
以下是我的问题:
- 性能方面,使用默认路由是最快的解决方案,对吧?
- 既然我永远不会改变路线,有没有办法让路由过程更快?例如缓存?跳过路由完全是过程?或任何其他技术?
- 定制路线的优点是什么? 对SEO更好吗?
- 是否可以跳过 AJAX 调用的路由过程?(我知道答案主要是否,但也许我可以针对 AJAX 调用进一步优化我的调用)
注意:
我了解路由过程本身以及它在 Zend 中的工作方式框架。但是,由于我不将使用大多数功能可用 我想也许是时候微调:)
提前谢谢。
是1 .性能方面,使用默认路由是最快的解决方案,对吧?
的,但不使用任何路由系统是最快的解决方案(显然)。
阿拉伯数字。由于我永远不会更改路由,有没有办法使路由过程更快?例如缓存?跳过路由 完全是过程?或任何其他技术?
嗯,就是这样,路线主要用于灵活性、国际化、SEO。
Zend Framework Router 的问题在于它依赖于并包装前端控制器实例,因此很难(不可能 afaik)缓存路由器,因为 FC 本身包装了其他不可缓存的 PDO 实例等内容。
因此,对于每个请求,都会一次又一次地计算所有路由。
使用复杂路由同时避免路由计算时,一个可能的解决方案是将所有路由转储到本机 Apache 重写规则,与 ZF 相比,它将非常快,此解决方案的主要问题是您需要手动计算反向路由,每当您对路由进行更改时,您都需要手动编辑它。
通常,它是可扩展性与性能。
3 .定制路线的优点是什么?对SEO更好吗?
好吧,它"取决于"(tm):
/list?type=products
对/products
,第二条路线获胜。
然而,/products/page/1
与/products?page=1
是双赢的(实际上并非如此,但这是另一回事)。
其他优点:
- i18n
- 搜索引擎优化
- 可用性
- 有意义的网址
4 .是否可以跳过 AJAX 调用的路由过程?(我知道答案大多是否定的,但也许我可以针对 AJAX 调用进一步优化我的调用)
我看不出有什么缺点。我经常这样做,除了RESTfull API。
您是否分析了 ZF 路由组件的性能,或者是否假设这是应用程序的"瓶颈"?!
在我看来,如果您需要低延迟,通过禁用最舒适的功能来优化页面速度并不是获得目标的最佳尝试。愿你应该开始优化你的SQL查询(slowlog是这里的关键词)或其他东西(xdebug可以真正帮助你分析你的应用程序并发现瓶颈)。
一切都与时机有关...
在 zend 框架启动之前缓存呢?在解释器 (php) 启动之前缓存和交付怎么样?听上去很好?您可能希望使用像 Varnish 这样的代理来实现良好的低延迟响应并执行类似操作。
即使你从代理那里得到缓存未命中,你也想使用PHP操作码缓存(如APC,XCache等)。对于如何加速和优化 zend 框架的问题,您需要阅读 Zend 性能指南。
你有两种方法,要么扩展Zend_Front_Controller并覆盖它的调度方法并设置自己的前端,要么在zend代码本身中进行更改。
打开
Zend/Controller/Front.php
dispatch()
法内幕
查找并删除以下代码
$router = $this->getRouter();
$router->setParams($this->getParams());
和
$this->_plugins->routeStartup($this->_request);
try {
$router->route($this->_request);
} catch (Exception $e) {
if ($this->throwExceptions()) {
throw $e;
}
$this->_response->setException($e);
}
/**
* Notify plugins of router completion
*/
$this->_plugins->routeShutdown($this->_request);
完成此操作后,将请求对象$this->_request并根据URL参数设置控制器、动作、模块名称。
$this->_request()->setModuleName($get[0]);