在CakePHP的每个文档中都写到requestAction会降低CakePHP的性能。始终建议使用控制器操作并使用视图文件获取结果。但有时我真的需要requestAction。
如果在没有缓存的情况下使用requestAction可能会导致性能不佳。它 很少适合在控制器或模型中使用。
哪些进程使reuqestAction降低性能。
应该怎么做,以防止requestAction的性能损失? 添加这样的东西?
$this->autoRender = false
控制器动作,
function beforeFilter() {
if ( $this->params['action'] == "myaction" ) { return; }
}
到控制器类
答案 0 :(得分:1)
基本上,requestAction()会通过额外的页面请求来执行您的操作。此外,requestAction()以不同方式处理url,因为它将返回除string之外的数据。因此,在控制器中,您需要首先检查返回请求的类型。
这是一篇关于requestAction()
的好文章答案 1 :(得分:1)
您可以先查看how it is written。
当我读到它时,每次它会重新解析URL(在Router::normalize()
中),创建新的CakeRequest
实例(always loads configuration),然后尝试{{ 3}}
P.S。 ..这是一个巨大的混乱,我甚至不知道在哪个地方使用缓存..如果有的话。
答案 2 :(得分:1)
(经过1。5年的CakePHP经验)我可以说,如果有requestAction,则存在重构需求。在最初的几个月里,我添加了太多的requestActions。在获得requestAction降低性能的信息后,我没有再添加。
几个月过后,我几乎从代码中删除了每个requestAction。在一个大代码存储库中,我们只有3-4个requestActions,它们每天只会被击中一次。如果使用requestAction,则缺少从控制器层到视图层的有价值信息。请重新考虑使用情况。