什么是Symfony防火墙需要这么长时间?

Hub*_*bro 58 php symfony symfony-2.2

我的Symfony页面不是太慢(它加载大约400毫秒)但考虑到它只是一个简单的hello world页面,带有基本身份验证,它应该在不到100毫秒的时间内加载.当我进入探查器时,我看到了这个:

Profiler时间轴

注意它只是说"防火墙"250毫秒.我认为防火墙只是负责让用户远离页面的某些区域 - 我无法想象花费的时间超过几毫秒加上从数据库中获取用户信息所需的时间(在这种情况下是61毫秒).

有人可以解释防火墙实际上做了什么吗?如果您有关于如何提高防火墙性能的任何一般性指示,那将非常感激.


注意:我当然用Google搜索了这个,我想预先指出我是通过IP地址连接到MySQL数据库,而不是主机名.对于我能找到的慢速Symfony防火墙的所有其他情况,这似乎是个问题.


我项目中的一些资源可能是相关的:

小智 11

我做了一些谷歌搜索,我看到这个人,似乎有你的问题的答案.

经过15分钟的研究,我最终发现这是由于PHP PDO构造函数(我的防火墙是第一个连接到数据库,因为我使用实体作为用户).有了这些知识,很快就发现了问题([1],[2]):因为事实证明使用DNS名称(如"localhost")而不是IP(如"127.0.0.1")会导致此问题.

对parameters.yml文件进行简单编辑(将localhost更改为127.0.0.1)就可以将防火墙加载时间减少到最小.

  • 我在问题中明确指出这不是**问题.检查**注意:**部分. (6认同)

Hub*_*bro 9

唉,原来Rawdreeg部分正确.我制作了一个20行PHP脚本来分析连接MySQL服务器所需的时间:

<?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";
Run Code Online (Sandbox Code Playgroud)

输出是:

Connection took 230.18503189087 ms
Query took 64.532995223999 ms

其中填充的Symfony分析器的空白完美.好消息是,当我的应用程序上线时,它将通过套接字本地连接到MySQL服务器,因此它可能会非常快!除了在本地镜像MySQL服务器之外,在开发过程中我几乎无能为力.

总结答案; Symfony防火墙最初创建与MySQL数据库的连接,在我的情况下,该连接非常慢.在我的案例中,MySQL连接时间占防火墙配置时间的80%以上.


注意:我已经通过IP地址连接到MySQL服务器了,我添加skip-name-resolve到MySQL配置无济于事.