Php 如何改进CGridView';她在易的表演
我只是好奇CGridView在Yii框架中的性能。我用Yii构建了一个简单的应用程序。在模型的管理页面上,只需列出所有记录,并进行分页(30/页)和自定义排序,到目前为止效果非常好 但我发现渲染CGridView需要4-5秒。在4-5秒内呈现30条记录页面是否正常?我觉得有点慢!因为它不是一个复杂的表,只有8列。生成的SQL查询运行速度很快(在2-3毫秒内完成),尽管包含一些关系 我在谷歌上搜索了很多关于优化的信息,发现了以下官方文件: 专注于CGridView问题,我尝试使用cache,并找到了真正的好帮手 我的做法是在控制器的filter()函数中添加COutputCache:Php 如何改进CGridView';她在易的表演,php,yii,Php,Yii,我只是好奇CGridView在Yii框架中的性能。我用Yii构建了一个简单的应用程序。在模型的管理页面上,只需列出所有记录,并进行分页(30/页)和自定义排序,到目前为止效果非常好 但我发现渲染CGridView需要4-5秒。在4-5秒内呈现30条记录页面是否正常?我觉得有点慢!因为它不是一个复杂的表,只有8列。生成的SQL查询运行速度很快(在2-3毫秒内完成),尽管包含一些关系 我在谷歌上搜索了很多关于优化的信息,发现了以下官方文件: 专注于CGridView问题,我尝试使用cache,并找
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
array( 'COutputCache+admin,_lists', 'duration' => 600,'varyByParam'=>array('sort','page'), ),
);
}
您可以添加普通视图页面和部分页面,以秒为单位设置过期时间,并告诉Yii要检测缓存更改的参数
当您重新访问页面时,这会有很大帮助,包括排序和分页。将页面渲染时间降低到40-50 ms,这太棒了
但是我还没有找到一个好方法来加速第一次渲染。你有什么好的建议吗?首先,在你的网页上显示你的日志,看看发生了什么,我们可以提供帮助
第二,不,这不正常。?你在哪台服务器上?您是否使用CActiveRecord关系?有多少也许答案只是使用CDbCriteria.with来不延迟加载相关表。在我的例子中,性能低下的原因是对数据列使用html类型。您必须检查排序,每当排序字段不是索引时,您将从Yii构建的查询中获得缓慢的结果4-5秒对于CGridView来说似乎真的很长。您是在使用“标准”Gii CRUD生成的gridview还是对其进行了大量修改?请查看yii日志,看看您的代码中有哪些部分比较慢。确保对网格视图ajax请求使用
renderPartial
。您可以尝试yiibooster
json网格视图。我将从分析摘要开始仔细查看,最初的SQL可能看起来很小,但上面的3个关系为您提供了额外的90个查询,可以在30条记录的页面上运行。您也可以查看。我正在挖掘框架的源代码,CGridView->renderTableBody()占用95%的页面渲染时间。我会深入挖掘。