【问题标题】:How to improve CGridView's performance in YiiYii中如何提高CGridView的性能
【发布时间】:2012-12-12 09:40:51
【问题描述】:

我只是好奇CGridView在Yii Framework中的表现。我用 Yii 构建了一个简单的应用程序。在模型的管理页面上,简单地列出所有记录,分页 (30/page) 和自定义排序,到目前为止效果很好。

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

我google了很多优化,找到了这个官方文档: http://www.yiiframework.com/doc/guide/1.1/en/topics.performance

关注CGridView的问题,尝试使用缓存,发现COutputCache确实是个好帮手。

我的做法是在Controller的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 毫秒,这太棒了!

但是我还没有找到加速第一次渲染的好方法。你有什么好的建议吗?

【问题讨论】:

  • 4-5 秒对于 CGridView 来说似乎真的很长。你是在使用“标准”的 Gii CRUD 生成的 gridview 还是修改了很多?
  • 看一下 yii 日志,看看你的代码哪一部分是慢的。确保您使用 renderPartial 来处理网格视图 ajax 请求。你可以试试yiibooster json 网格视图。
  • 我要从分析摘要开始,最初的 SQL 可能看起来很小,但上面的 3 个关系为您提供了额外的 90 个查询,可以在 30 条记录的页面上运行。跨度>
  • 我在挖掘Framework的源码,CGridView->renderTableBody() 占用了95%的页面渲染时间。会深入挖掘。

标签: php yii


【解决方案1】:

就我而言,性能低下的原因是数据列使用 html 类型。

【讨论】:

    【解决方案2】:

    首先,在您的网页中显示您的日志,看看发生了什么,以便我们提供帮助。

    第二,不,不正常。 ¿ 你在哪个服务器上?你在使用 CActiveRecord 关系吗?多少?也许答案只是使用 CDbCriteria.with 不延迟加载相关表。

    【讨论】:

      【解决方案3】:

      你必须检查排序,当排序字段不是索引时,你会从 Yii 构建的查询中得到缓慢的结果

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-23
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多