2

在 CakePHP 的每个文档中都写到 requestAction 会降低 CakePHP 的性能。始终建议使用控制器操作并使用视图文件获取结果。但有时我真的需要requestAction。

CakePHP 书

如果在没有缓存 requestAction 的情况下使用会导致性能不佳。它很少适合在控制器或模型中使用。

哪些进程使 reuqestAction 降低性能。

应该怎么做,以防止 requestAction 的性能损失?添加这样的东西?

$this->autoRender = false
到控制器动作,

function beforeFilter() {
  if ( $this->params['action'] == "myaction" ) { return; }
}

到控制器类

4

3 回答 3

1

基本上 requestAction() 会通过额外的页面请求来触发您的操作。此外,requestAction() 对 url 的处理方式不同,因为它会返回字符串以外的数据。所以在控制器你需要先检查返回请求的类型。

这是一篇关于requestAction()的好文章

于 2012-06-10T16:39:19.580 回答
1

你可以先看看它是怎么写的

当我读到它时,它每次都会重新解析 URL(in Router::normalize()),创建新CakeRequest实例(总是加载 configuration),然后尝试Dispatcher::dispatch().

PS ..这是一个巨大的混乱,我什至没有看到缓存在哪一点被使用..如果有的话。

于 2012-06-10T16:44:03.950 回答
1

(经过 1.5 年的 CakePHP 经验)我可以说,如果有 requestAction,就存在重构需求。在最初的几个月里,我添加了太多的 requestActions。在获得 requestAction 降低性能的信息后,我不再添加。

几个月过去了,我几乎从我的代码中删除了所有 requestAction。在一个大代码库中,我们只有 3-4 个 requestAction,而且它们每天只被点击一次。如果你使用 requestAction,你会丢失从控制器层到视图层的有价值的信息。请重新考虑用法。

于 2013-10-26T17:33:32.180 回答