为什么我的控制器这么慢?

时间:2016-04-12 19:56:24

标签: php symfony

我正在一个从外部服务器检索数据(7k行CSV格式化字符串)的应用程序来更新我自己的实体。每行都是股票中的一个项目。

今天工作做得很好,但速度非常慢:超过60秒(prod env)检索数据,将其推入2D阵列,更新BDD,最后加载显示bdd内容。 仅显示页面时,它大约20秒(仍然是产品)。

此分析器的时间轴结果仅显示记录:Symfony's profiler timeline 我再也无法描述" updateAction"因为我没有出现在最后十个请求列表中。

2天前我正在检查CSV文件的每一行,只在需要的时候添加它,我是软删除项目,以便在以后返回库存时恢复它但是以这个速度我试了很多东西才能正常表演。 在begening一切都在控制器中,我移动了在专用服务中添加/删除的功能,然后在存储库中最终将其恢复到我的控制器中。为了获得不错的结果,我试图清空数据库,然后重新填充而不检查。首先,使用LOAD DATA LOCAL INFILE但它与我的表格模式不兼容(或者我不明白的东西),现在我只是在填充CSV之前清空表格(没有任何控制)。我之前给出的时间分数是最后一次尝试(这是最好的)。 但是应该谈谈 这是我的控制器:

public function majMatosClanAction()
{
    $resMaj = $this->majClanCavernes();
    if ($resMaj === NULL) 
    {
        $this->get('session')->getFlashBag()->add('alert-danger', 'Unidentified');
        return $this->redirect($this->generateUrl('loki_gbl'));
    } else if ($resMaj === FALSE)
    {
        $this->get('session')->getFlashBag()->add('alert-warning','password update required');
        return $this->redirect($this->generateUrl('loki_gbl_ST'));
    } else
    {
        $this->get('session')->getFlashBag()->add('alert-success','success');
        return $this->redirect($this->generateUrl('loki_gbl_voirMatosClan'));
    }
}

这是我的控制器调用的函数:

public function majClanCavernes()
{
    $user = $this->get('security.token_storage')->getToken()->getUser();
    $outils = $this->container->get('loki_gbl.outils');

    if ($user !== NULL) 
    {
        $pwd = $user->getGob()->getPwd();
        $num = $user->getGob()->getNum();
        if($outils->checkPwd($num, $pwd) !== TRUE) return FALSE;

        $em = $this->getDoctrine()->getManager();

        //This is a temporary solution
//////////////////////////////////////////////
        $connection = $em->getConnection();
        $platform   = $connection->getDatabasePlatform();
        $connection->executeUpdate($platform->getTruncateTableSQL('MatosClan', true ));
//////////////////////////////////////////////

        $repository = $em->getRepository('LokiGblBundle:MatosClan');

        $urlMatosClan = "http://ie.gobland.fr/IE_ClanCavernes.php?id=".$num."&passwd=".$pwd;
        //encode and format the string via a service
        $infosBrutes = $outils->fileGetInfosBrutes($urlMatosClan);
        //$csv is a 2D array containing the datas
        $csv = $outils->getDatasFromCsv($infosBrutes);

        foreach($csv as $item)
        {
            $newItem = new MatosClan;                   
            $newItem->setNum($item[0]);
            $newItem->setType($item[1]);
            [...]
            $em->persist($newItem);
        }
        $em->flush();
        return TRUE;
    }
    else{
        return NULL;
    }
}

有什么问题? 7k线不是那么大!

可能是缺少hardware问题吗?

1 个答案:

答案 0 :(得分:1)

查看doctrine的批处理文档here

您还可以禁用日志记录:

$em->getConnection()->getConfiguration()->setSQLLogger(null);