私のSymfonyページは遅すぎません(約400ミリ秒でロードされます)が、基本認証を備えた単純なhello worldページであることを考えると、100ミリ秒未満でロードされるはずです。プロファイラーを入力すると、次のように表示されます。
250ミリ秒の間は「ファイアウォール」と表示されるだけです。ファイアウォールがユーザーをページの特定の領域に入れないようにする責任があると私は思った-数ミリ秒以上データベースからユーザー情報を取得するのにかかる時間(この場合は61ミリ秒)。
誰かがファイアウォールが実際に何をしているのか説明できますか?ファイアウォールのパフォーマンスを向上させる方法に関する一般的な指針がある場合は、それをいただければ幸いです。
注:私はもちろんこれをグーグル化しており、MySQLデータベースにホスト名ではなくIPアドレスで接続していることを前もって指定したい。これは、私が見つけたSymfonyファイアウォールの遅い他のすべてのケースの問題であるように思われました。
関連する可能性のある私のプロジェクトからのいくつかのリソース:
悲しいかな、それは判明しました Rawdreeg は部分的に正しかったです。 MySQLサーバーに接続するのにかかる時間をプロファイルする20行のPHPスクリプトを作成しました:
<?php
$time = microtime(true);
$con = new PDO(...);
$connect_time = microtime(true);
$result = $con->query('SHOW TABLES');
$query_time = microtime(true);
var_dump($result->fetchAll(PDO::FETCH_ASSOC));
$time_con = ($connect_time - $time) * 1000;
$time_query = ($query_time - $connect_time) * 1000;
echo "Connection took $time_con ms\n";
echo "Query took $time_query ms\n";
出力は次のとおりです。
接続に230.18503189087ミリ秒かかった クエリに64.532995223999ミリ秒かかった
Symfonyプロファイラーの空白を完全に埋めます。良いニュースは、私のアプリケーションが稼働すると、ソケットによってローカルでMySQLサーバーに接続するため、おそらく非常に高速になるでしょう!ただし、MySQLサーバーをローカルでミラーリングする以外に、開発中の速度についてできることはほとんどありません。
答えを要約すると、 Symfonyファイアウォールは最初にMySQLデータベースへの接続を作成しますが、私の場合、その接続は非常に低速です。 MySQL接続時間は、私の場合、ファイアウォールのプロファイル時間の80%以上を占めています。
注:私はすでにMySQLサーバーにIPアドレスで接続しており、skip-name-resolve
をMySQLの設定に使用しないでください。
私はググリングをしました、そして this guy があなたの質問に対する答えを持っているようです。
15分の調査の結果、PHP PDOコンストラクターが原因であることがわかりました(私のファイアウォールは、ユーザーとしてエンティティを使用しているため、最初にデータベースに接続するものです)。問題はすぐに見つかりました( [1] 、 [2] ):IPではなくDNS名( 'localhost'など)を使用することが判明したため( '127.0.0.1')がこの問題の原因です。
Parameters.ymlファイルを単純に編集(localhostを127.0.0.1に変更)すると、ファイアウォールのロード時間を最小限に抑えることができました。
MySQLサーバーに問題がある可能性があります。 skip-name-resolve
ファイルの[mysqld]
セクションにmy.cnf
を追加してみてください。これにより、MySQLは着信接続のIPアドレスで逆DNSルックアップを実行できなくなります。