Symfony2模板化renderResponse导致CPU使用率上升

时间:2016-06-02 00:14:45

标签: php symfony doctrine-orm twig

我的工作遍历用户并根据他们的偏好发送个性化电子邮件。我在Symfony2中使用模板引擎来生成HTML。

基本上这样的东西在循环中运行:

public function getHTML($user) 
{
    $templating = $this->getContainer()->get('templating');
    $html = $templating->renderResponse( 
                'recommendation.html.twig',
                 array(
                   'user' => $user
                 )
             )->getContent();
    return $html;
}

问题是CPU使用率高达100%,处理每个用户需要更长时间。以下是一些数据:

Took 5.4851469993591 seconds 
Took 12.790720939636 seconds 
Took 23.007503032684 seconds 
Took 34.852293014526 seconds 
Took 43.901736021042 seconds 
Took 66.028288125992 seconds 

每行代表处理100个用户所花费的时间。所以前100个用户需要5秒,接下来的12秒,依此类推。

关于如何提高绩效的任何建议?

1 个答案:

答案 0 :(得分:2)

当您获取托管实体时,它可能会积累一个大量的托管实体身份映射。

在电子邮件发送的每次迭代中,请查看实体经理clear or detach

最好结合迭代结果使用它,有一个good example in the documentation

对于执行大量迭代的作业,它可以对速度和内存消耗产生巨大影响。

对于长时间运行的脚本,如果没有一点工作,Doctrine通常不是很好。