我假设您已经完成了性能调优指南第 1 点和第 3 点。这真的很有帮助。
对于数字 2,您可以使用CHttpCacheFilter
类 CategoryController 扩展控制器 {
私人 $_categoryLastUpdate;
公共功能过滤器(){
返回数组(
大批(
'CHttpCacheFilter + 视图',
'cacheControl' => " max-age=604800, 必须重新验证",
'etagSeedExpression' => 函数() {
返回 $this->getCategoryLastUpdate();
}
'lastModifiedExpression' => 函数() {
返回 $this->getCategoryLastUpdate();
}
)
)
}
公共函数 actionView($id){
$object = Category::model()->findByPk($_GET['id']);
$this->render('view', array('object' => $object));
}
公共函数 getCategoryLastUpdate(){
if (!isset($this->_categoryLastUpdate)){
$obj = Category::model()->findByPk($_GET['id'], array('select' => 'lastUpdate'));
$this->_categoryLastUpdate
}
返回 $this->_categoryLastUpdate;
}
}
它基本上会按类别计算 ETag 和 LastUpdate。而要保存查询,它会首先只计算对象lastUpdate
的。Category
对于第一,您始终可以使用CCacheDependency。只需在线程列表对象中创建一个字段,例如lastUpdate
. 当一个新线程提交时,只需更新该字段并将其用于 CCacheDependency。
由于我看到您使用了非常大的分页,因此我认为您想阅读有关优化分页显示的四种方法(如果您将 MySQL 用于数据库和线程搜索/列表)。