我和Yii有一个很大的问题,因为渲染简单的东西需要10秒钟。
例如:
控制器:
public function actionFailed($id=null) {
if(!is_null($id)) $this->_viewcity=$id;
$failed = Delivery::model()->findAll('failed IS NOT NULL AND city_id = '.$this->_viewcity.' ORDER BY id DESC');
$cities = City::model()->findAll('active > 0');
$this->render('failed',array(
'failed'=>$failed,
'cities'=>$cities,
'city'=>City::model()->findByPk($this->_viewcity),
));
}
仅在视图中
使用foreach ($failed as $d)
。
查询日志:http://jsfiddle.net/kwqabmc0/
如何优化此功能?我的SQL服务器是23ms平移,前面提到的页面需要很长时间才能加载。
答案 0 :(得分:1)
您在视图中使用Delivery.items
和Delivery.user
的延迟加载。
尝试
$failed = Delivery::model()->with('items', 'user')->findAll('failed IS NOT NULL AND city_id = '.$this->_viewcity.' ORDER BY id DESC');
或者不要在视图中使用这些关系。