什么是Symfony防火墙需要这么久?

我的Symfony页面不是太慢(大约在400毫秒内加载),但考虑到这只是一个简单的hello world页面,基本authentication,它应该在100 ms以内加载。 当我进入探查器时,我看到:

分析器时间表

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

有人可以解释一下防火墙的function吗? 如果您有任何关于如何提高防火墙性能的通用指针,那将不胜感激。


注意 :我已经Google了,当然​​,我想指定我正在连接到MySQL数据库的IP地址,而不是主机名。 这似乎是我能find的慢Symfony防火墙的其他情况下的问题。


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

  • security.yaml
  • routing.yaml
  • Astrups / SpectacleBundle /实体/ user.php的
  • Astrups / SpectacleBundle /服务/ Sha1Salted.php

我做了一些Googlesearch,看到这个人 ,似乎有你的问题的答案。

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

对parameters.yml文件进行简单编辑(将localhost更改为127.0.0.1)的做法是将防火墙加载时间降至最低。

唉,原来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"; 

输出是:

 连接花了230.18503189087毫秒
查询花了64.532995223999 ms 

完美地填充了Symfony剖析器的空白。 好消息是,当我的应用程序上线时,它将通过套接字在本地连接到MySQL服务器,所以它可能会快得很快! 但是在开发过程中,我无法做到这一点,除了在本地镜像MySQL服务器。

所以总结一下答案。 Symfony防火墙最初创build到MySQL数据库的连接,在我的情况下,连接速度很慢。 在我的情况下,MySQL连接时间占防火墙configuration时间的80%以上。


注意:我已经通过IP地址连接到MySQL服务器,并且我已经将skip-name-resolve添加到了MySQLconfiguration中,但无济于事。

你的MySQL服务器可能是问题。 尝试将skip-name-resolve添加到my.cnf文件的[mysqld]部分。 这会阻止MySQL对传入连接的IP地址进行反向DNS查找。