私は自分のエンティティを更新するために外部サーバーからデータ(7k行のCSV形式の文字列)を取得するアプリです。各行は在庫のアイテムです。なぜコントローラが遅いのですか?
今日は仕事はうまくいっていますが、データを取得し、2D配列でプッシュし、BDDを更新し、最終的にbddコンテンツを表示するページをロードするために、60秒以上(prod env) ページを表示しているときだけ、約20秒です(まだプロットしています)。
これは、レコードのみを表示しているときのプロファイラのタイムラインの結果です。Symfony's profiler timeline さらに、最新の10個のリクエストリストには表示されません "updateAction"の原因をプロファイルできません。
2日前私はCSVファイルの各行をチェックして必要な場合にのみ追加しましたが、在庫を戻すときに後で元に戻すためにアイテムをソフト削除していましたが、正常なパフォーマンス。 すべての機能が制御装置に組み込まれていたので、専用サービスで追加/削除した機能をリポジトリに移動して、最終的にコントロールに戻しました。まともな結果を得るために、私はデータベースを空にして、チェックせずにそれを補充しようとしました。まず、LOAD DATA LOCAL INFILEを使用していますが、テーブルパターンと互換性がない(または私が何かを理解していない)ので、CSVを入力する前にテーブルを空にしています。私が以前に与えたタイムスコアは、この最後の試み(これは最高のもの)であった。ここ しかしenought話 は私のcontrolerです:
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;
}
}
間違っているもの:ここ
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'));
}
}
は私のコントローラ通話機能ですか? 7kラインはそれほど大きくありません!
hardware号の問題がありますか?
ので、一部は遅いのですか?あなたはそれをプロファイリングしましたか? –
私はしましたが、viewActionだけがプロファイラに見つかりました。 "最後の10の結果"でも、updateActionを見つけることができません。私はメッセージを編集し、symfonyのプロファイラが私に与えているタイムラインを追加しました。 –