Php 优化Zend框架路由

Php 优化Zend框架路由,php,zend-framework,optimization,routes,zend-route,Php,Zend Framework,Optimization,Routes,Zend Route,我使用的是使用Zend工具生成的传统Zend框架应用程序。我的应用程序中有几个模块,都是使用Zend工具生成的。我打算在我的应用程序中使用Zend框架中的默认路由 例如:www.host.com/module/controller/action/param1/value1/param2/value2 以下是我的问题: 就性能而言,使用默认路由是最快的解决方案,对吗? 既然我永远都不会改变路线,有没有办法让 路由过程更快吗?比如缓存?跳过路由 整个过程?或者其他技术? 定制路线的好处是什么?这对搜

我使用的是使用Zend工具生成的传统Zend框架应用程序。我的应用程序中有几个模块,都是使用Zend工具生成的。我打算在我的应用程序中使用Zend框架中的默认路由

例如:www.host.com/module/controller/action/param1/value1/param2/value2

以下是我的问题:

就性能而言,使用默认路由是最快的解决方案,对吗? 既然我永远都不会改变路线,有没有办法让 路由过程更快吗?比如缓存?跳过路由 整个过程?或者其他技术? 定制路线的好处是什么?这对搜索引擎优化更好吗? 我可以跳过AJAX调用的路由过程吗?我知道答案 基本上是否定的,但也许我可以为AJAX调用进一步优化我的调用 注:

我了解路由过程本身以及它在Zend中的工作方式 框架但是,由于我不会使用大多数功能 我想是时候进行微调了:


提前感谢。

您有两种方法,一种是扩展Zend_Front_控制器并覆盖其分派方法并设置自己的Front,另一种是对Zend代码本身进行更改

打开

内部调度法

查找并删除以下代码

 $router = $this->getRouter();
    $router->setParams($this->getParams());

执行此操作后,获取请求对象$this->\u请求 并根据url参数设置控制器、操作、模块名称

$this->_request()->setModuleName($get[0]);

您有两种方法,一种是扩展Zend_Front_控制器并覆盖其分派方法并设置自己的Front,另一种是对Zend代码本身进行更改

打开

内部调度法

查找并删除以下代码

 $router = $this->getRouter();
    $router->setParams($this->getParams());

执行此操作后,获取请求对象$this->\u请求 并根据url参数设置控制器、操作、模块名称

$this->_request()->setModuleName($get[0]);

您是否分析了ZF路由组件的性能,还是认为这是应用程序的瓶颈

在我看来,如果您需要低延迟,那么通过禁用最舒适的功能来优化页面速度并不是达到目标的最佳尝试。也许你应该开始优化你的SQL查询了,slowlog是这里的关键词,或者xdebug可以帮助你分析应用程序并发现瓶颈

这都是关于时间的

在zend框架启动之前缓存怎么样?在解释器php启动之前,缓存和交付如何?听起来不错?您可能希望使用proxys来实现良好的低延迟响应,并执行类似的操作

即使您从代理中得到缓存未命中,您也希望使用PHP操作码缓存,如APC、XCache等。。。。
对于如何加速和优化zend框架的问题,您想阅读。

您是分析了ZF路由组件的性能,还是认为这是应用程序的瓶颈

在我看来,如果您需要低延迟,那么通过禁用最舒适的功能来优化页面速度并不是达到目标的最佳尝试。也许你应该开始优化你的SQL查询了,slowlog是这里的关键词,或者xdebug可以帮助你分析应用程序并发现瓶颈

这都是关于时间的

在zend框架启动之前缓存怎么样?在解释器php启动之前,缓存和交付如何?听起来不错?您可能希望使用proxys来实现良好的低延迟响应,并执行类似的操作

即使您从代理中得到缓存未命中,您也希望使用PHP操作码缓存,如APC、XCache等。。。。 如果您想了解如何加速和优化zend框架,请阅读

一,。就性能而言,使用默认路由是最快的解决方案,对吗

是的,但不使用任何路由系统显然是最快的解决方案

二,。既然我永远不会改变路由,有没有办法让路由过程更快?比如缓存?跳过路由 整个过程?或者其他技术

嗯,就是这样,路线主要用于灵活性、国际化和SEO

Zend Framework路由器的问题在于它依赖并封装前端控制器实例,因此afaik很难缓存路由器,因为FC本身封装了其他不可缓存的东西,如PDO实例

因此,对于每个请求,都会一次又一次地计算所有路由

当使用复杂路由同时避免路由计算时,一个可能的解决方案是将所有路由转储到本机Apache重写规则,与ZF相比,它将非常快,此解决方案的主要问题是您需要手动计算反向路由,并且每当您更改路由时,您都需要手动编辑它

通常情况下,这是可伸缩性与性能之比

三,。定制路线的好处是什么 锿?这对搜索引擎优化更好吗

嗯,这取决于tm:

/列表?类型=产品vs/产品,第二条路线获胜

然而,/products/page/1 vs/products?page=1是一个双赢的好例子,事实并非如此,但这是另一个故事

其他优点:

i18n 搜索引擎优化 可用性 有意义的url 四,。我可以跳过AJAX调用的路由过程吗?我知道答案基本上是否定的,但也许我可以进一步优化我的AJAX调用

我看不到任何反对这一点的人。我经常使用它,除了RESTfull API

一,。就性能而言,使用默认路由是最快的解决方案,对吗

是的,但不使用任何路由系统显然是最快的解决方案

二,。既然我永远不会改变路由,有没有办法让路由过程更快?比如缓存?跳过路由 整个过程?或者其他技术

嗯,就是这样,路线主要用于灵活性、国际化和SEO

Zend Framework路由器的问题在于它依赖并封装前端控制器实例,因此afaik很难缓存路由器,因为FC本身封装了其他不可缓存的东西,如PDO实例

因此,对于每个请求,都会一次又一次地计算所有路由

当使用复杂路由同时避免路由计算时,一个可能的解决方案是将所有路由转储到本机Apache重写规则,与ZF相比,它将非常快,此解决方案的主要问题是您需要手动计算反向路由,并且每当您更改路由时,您都需要手动编辑它

通常情况下,这是可伸缩性与性能之比

三,。定制路线的好处是什么?这对搜索引擎优化更好吗

嗯,这取决于tm:

/列表?类型=产品vs/产品,第二条路线获胜

然而,/products/page/1 vs/products?page=1是一个双赢的好例子,事实并非如此,但这是另一个故事

其他优点:

i18n 搜索引擎优化 可用性 有意义的url 四,。我可以跳过AJAX调用的路由过程吗?我知道答案基本上是否定的,但也许我可以进一步优化我的AJAX调用



我看不到任何反对这一点的人。除了RESTfull API之外,我经常使用它。

每次提问后,您都会自己回答问题;对于最后一个问题,我建议你稍微老一点。@Liyali我知道大部分问题都有点多余,但我主要关心的是性能优化:谢谢你的文章;我觉得你已经知道答案了:D@Baba哈哈哈:D是的,我有一个微优化的习惯:P如果不使用它,那就吹它@松果。。不擅长写很多故事。。如果这是一个纯粹的代码问题,我现在就把它扼杀了:在每一个问题之后,你自己回答你的问题;对于最后一个问题,我建议你稍微老一点。@Liyali我知道大部分问题都有点多余,但我主要关心的是性能优化:谢谢你的文章;我觉得你已经知道答案了:D@Baba哈哈哈:D是的,我有一个微优化的习惯:P如果不使用它,那就吹它@松果。。不擅长写很多故事。。如果这是一个纯粹的代码问题,我现在就杀了它:谢谢你的回答。我想你是在回答我关于跳过路由过程的第二个问题。您将$this->_request->setModuleName$get[0]放在哪里;?那么$get[0]是什么?Zend_Controller_Front中没有定义它?$get只是一个示例,它基本上是当前的$\u get,url中的第一个参数。我明白了,所以基本上我需要执行setModuleName$get[0];,setControllerName$get[1];&setActionName$get[2];。但是在查询字符串中发送的其他参数呢?我也需要在这里设置它们吗?首先从$\u GET取消设置这些参数,然后执行$this->\u request->setParams$\u GET;完美:只是想知道,这样设置路线会不会给我带来麻烦?这真的提供了良好的性能增益吗?谢谢你的回复。我想你是在回答我关于跳过路由过程的第二个问题。您将$this->_request->setModuleName$get[0]放在哪里;?那么$get[0]是什么?Zend_Controller_Front中没有定义它?$get只是一个示例,它基本上是当前的$\u get,url中的第一个参数。我明白了,所以基本上我需要执行setModuleName$get[0];,setControllerName$get[1];&setActionName$get[2];。但是在查询字符串中发送的其他参数呢?我也需要在这里设置它们吗?首先从$\u GET取消设置这些参数,然后执行$this->\u request->setParams$\u GET;完美:只是想知道,这样设置路线会不会给我带来麻烦?这真的能带来很好的性能提升吗?谢谢你的回复。我同意你的观点,优化SQL查询和缓存将是加速我的网站的更好的解决方案。然而,我主要关心的是理解

可以在Zend框架中使用路由模块。我并不理解我的人创建自定义路由,在我的情况下,我永远不会创建任何自定义路由,所以我想也许我可以把它从图片中去掉,因为我将始终使用默认路由。我相信zend中使用的默认路由可以覆盖大多数情况下的许多基础。我认为所有的路由选择都可能是功能膨胀的一种情况,但我也可以看到,如果试图用Zend framework功能改造某些现有框架,路由将是有用的。请记住,框架的其他组件是否会将路由器/路由用于内部使用。例如,Zend_View_Helper_Url正在使用路由器创建一个我认为非常有用的Url。如果您更改路由的内部使用,则可能不允许zf加载路由器资源,您可能会得到其他组件的意外行为。@breiti确实有道理。似乎从图片中删除路由器可能会导致隐藏的问题。谢谢您的回复。我同意你的观点,优化SQL查询和缓存将是加速我的网站的更好的解决方案。然而,我主要关心的是理解在Zend框架中使用route模块的意义。我并不理解我的人创建自定义路由,在我的情况下,我永远不会创建任何自定义路由,所以我想也许我可以把它从图片中去掉,因为我将始终使用默认路由。我相信zend中使用的默认路由可以覆盖大多数情况下的许多基础。我认为所有的路由选择都可能是功能膨胀的一种情况,但我也可以看到,如果试图用Zend framework功能改造某些现有框架,路由将是有用的。请记住,框架的其他组件是否会将路由器/路由用于内部使用。例如,Zend_View_Helper_Url正在使用路由器创建一个我认为非常有用的Url。如果您更改路由的内部使用,则可能不允许zf加载路由器资源,您可能会得到其他组件的意外行为。@breiti确实有道理。似乎从图片中删除路由器可能会导致隐藏的问题。+1最后一个完整的答案是:D现在有更多的问题;关于第2点,将所有路由转储到本机Apache重写规则:1您是否有指向教程的链接或有关如何执行此操作的更多信息?在使用Apache和重写规则方面,我几乎一无所知。2我觉得使用重写规则意味着我必须停止在我的项目中使用Zend_应用程序,对吗?我认为完全跳过路由器是必须的。我读过很多次有人说Zend_应用程序应该避免性能问题。1好吧,它主要是关于regex的,imo最好的地方是深入了解apache手册。2 True和false,如果不使用任何路由,路由器将实例化,但不会计算或循环通过任何路由。所以这可能是一个进步,但我不确定这样做是否值得。我明白了。这是您在可伸缩性与性能之前所说的。从图中删除路由器意味着性能提高,但另一方面,如果框架中的其他组件本身依赖它,则可能会导致大量重构。我认为我应该正常构建应用程序,然后分析性能并测试移除路由器是否会有显著的收益。@Songo,没错。不要做预优化邪恶tm,配置文件,并尝试找到更快的改进与性能与可伸缩性,我有一些Zf+Doctrine2应用程序,它通过基本的优化和配置每天处理近5000.000个请求。我见过的最显著的性能优化是自动加载、操作码和将核心类合并在一起以限制I/OI。到了优化的时候,我一定会记住你的建议;再次非常感谢您给我一个满意的答案:+1最后是一个完整的答案:D现在有更多的问题;关于第2点,将所有路由转储到本机Apache重写规则:1您是否有指向教程的链接或有关如何执行此操作的更多信息?在使用Apache和重写规则方面,我几乎一无所知。2我觉得使用重写规则意味着我必须停止在我的项目中使用Zend_应用程序,对吗?我认为完全跳过路由器是必须的。我读过很多次有人说Zend_应用程序应该避免性能问题。1好吧,它主要是关于regex的,imo最好的地方是深入了解apache手册。2 True和false,如果不使用任何路由,路由器将实例化,但不会计算或循环通过任何路由。所以这可能是一个进步,但我不确定这样做是否值得。我明白了。这是您在可伸缩性与性能之前所说的。从图中删除路由器意味着性能提高,但另一方面,如果框架中的其他组件本身依赖它,则可能会导致大量重构。
我认为我应该正常构建应用程序,然后分析性能并测试移除路由器是否会有显著的收益。@Songo,没错。不要做预优化邪恶tm,配置文件,并尝试找到更快的改进与性能与可伸缩性,我有一些Zf+Doctrine2应用程序,它通过基本的优化和配置每天处理近5000.000个请求。我见过的最显著的性能优化是自动加载、操作码和将核心类合并在一起以限制I/OI。到了优化的时候,我一定会记住你的建议;再次感谢您给我一个满意的答复: