这种方法比CakePHP中的requestAction更好吗?

这种方法比CakePHP中的requestAction更好吗?,cakephp,Cakephp,requestAction主要在CakePHP中用于呈现应用程序所有页面上或最初未找到的内容 例如:在网站每一页的页脚显示注册用户总数 在requestAction方法中,这可以通过请求UsersController的操作来完成,该操作返回模型用户的计数。我们将其命名为userscont()。此请求应位于此应用程序视图使用的布局中 在我建议的方法中,这可以通过在AppController中使用用户模型来实现,然后为用户计数设置一个变量,例如,在所有布局和视图中都应该可用 //in AppCont

requestAction
主要在CakePHP中用于呈现应用程序所有页面上或最初未找到的内容

例如:在网站每一页的页脚显示注册用户总数

在requestAction方法中,这可以通过请求UsersController的操作来完成,该操作返回模型用户的计数。我们将其命名为userscont()。此请求应位于此应用程序视图使用的布局中

在我建议的方法中,这可以通过在AppController中使用用户模型来实现,然后为用户计数设置一个变量,例如,在所有布局和视图中都应该可用

//in AppController

function beforeRender(){
  $this->uses = array('Model', 'User');
  $this->set('totalUsers',$this->User->find('count'));
}
因此,在任何布局、视图或元素中,我们都可以轻松地使用$totalUsers值

<div class="footer">Currently, we have <?php echo $totalUsers;?> registered users.</div>
目前,我们已经注册了用户。

这里的“更好”一词是指性能。这两种方法中哪一种性能更好

侧面图 当对几种可能性的相对表现有疑问时,不要依赖他人的建议(这可能纯粹是猜测):简介

附带一个shell,它是生成基准信息的一种方便方法(并且是两种更准确/可靠的替代方法):

footer
元素的内容应该是自给自足的,例如:

<?php
$User = ClassRegistry::init('User');
// $betterExample = $User->expensiveCall(); // more relevant where the call is slow
$totalUsers = $User->find('count');
?>
<div class="footer">Currently, we have <?php echo $totalUsers;?> registered users.</div>
其他技术? 还有其他类似的技术可以使用(包括将元素与
requestAction
)结合使用),但原则始终是一样的:不要急于执行可能不需要的逻辑(获取数据),有效地使用缓存

echo $this->element(
    'footer',
    array(),
    "cache" => array('config' => 'element_config', 'key' => 'footer')
);
<?php
$User = ClassRegistry::init('User');
// $betterExample = $User->expensiveCall(); // more relevant where the call is slow
$totalUsers = $User->find('count');
?>
<div class="footer">Currently, we have <?php echo $totalUsers;?> registered users.</div>
class User extends AppModel {

    public function updateCounterCache($keys = array(), $created = false) {
        Cache::delete('footer', 'element_config');
        return parent::updateCounterCache($keys, $created);
    }
}