Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何改进CGridView';她在易的表演_Php_Yii - Fatal编程技术网

Php 如何改进CGridView';她在易的表演

Php 如何改进CGridView';她在易的表演,php,yii,Php,Yii,我只是好奇CGridView在Yii框架中的性能。我用Yii构建了一个简单的应用程序。在模型的管理页面上,只需列出所有记录,并进行分页(30/页)和自定义排序,到目前为止效果非常好 但我发现渲染CGridView需要4-5秒。在4-5秒内呈现30条记录页面是否正常?我觉得有点慢!因为它不是一个复杂的表,只有8列。生成的SQL查询运行速度很快(在2-3毫秒内完成),尽管包含一些关系 我在谷歌上搜索了很多关于优化的信息,发现了以下官方文件: 专注于CGridView问题,我尝试使用cache,并找

我只是好奇CGridView在Yii框架中的性能。我用Yii构建了一个简单的应用程序。在模型的管理页面上,只需列出所有记录,并进行分页(30/页)和自定义排序,到目前为止效果非常好

但我发现渲染CGridView需要4-5秒。在4-5秒内呈现30条记录页面是否正常?我觉得有点慢!因为它不是一个复杂的表,只有8列。生成的SQL查询运行速度很快(在2-3毫秒内完成),尽管包含一些关系

我在谷歌上搜索了很多关于优化的信息,发现了以下官方文件:

专注于CGridView问题,我尝试使用cache,并找到了真正的好帮手

我的做法是在控制器的filter()函数中添加COutputCache:

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%的页面渲染时间。我会深入挖掘。