我Symfony的页面是不是太慢了(它加载在大约400毫秒),但考虑到一个事实,这只是一个简单的Hello World页面基本身份验证,应在加载小于100ms。 当我进入探查,我看到这一点:
请注意,它只是说,“防火墙”为250毫秒。 我以为防火墙只是为了保持用户离开网页的某些区域负责 - 我无法想象,采取任何时间超过几毫秒的时间加上它需要从数据库中获取(在这种情况下是用户信息的时间61毫秒)。
可能有人解释一下什么是防火墙实际上呢? 如果您有关于如何提高防火墙的性能,同时,将不胜感激任何一般的指针。
注 :我用Google搜索这个当然,我想指定了前面那我连接到MySQL数据库的IP地址,而不是主机名。 这似乎是慢Symfony的防火墙,我能找到的所有其他情况下的问题。
从我的项目的一些资源,可能是相关的:
- security.yaml
- routing.yaml
- Astrups / SpectacleBundle /实体/ user.php的
- Astrups / SpectacleBundle /服务/ Sha1Salted.php
我做了一些google搜索,我发现这个家伙 ,似乎已经回答了你的问题。
15分钟研究后,我最终搞清楚,这是由于PHP PDO构造函数(我的防火墙是第一个连接到数据库,因为我用实体用户)。 有了这些知识的问题被很快发现( [1] , [2] ):事实证明使用DNS名称(如“本地主机”)而不是IP(如“127.0.0.1”)导致此问题。
该parameters.yml文件的简单编辑(改变本地主机为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";
输出是:
Connection took 230.18503189087 ms
Query took 64.532995223999 ms
这填补了Symfony的探查完美的空白。 好消息是,当我的应用程序开始运行,它会连接到MySQL服务器在本地通过插座,所以它可能会被速度极快! 很少有开发过程中我能做的速度虽然,除了本地镜像MySQL服务器。
因此,要总结的答案; 该Symfony的防火墙最初创建到MySQL数据库的连接,并在我的情况,这一方面是相当缓慢。 MySQL的连接时间占了我的情况的防火墙的成型时间80%以上。
注:我已经连接到由IP地址的MySQL服务器,我已经添加了skip-name-resolve
到MySQL的配置无济于事。
MySQL服务器可能是问题。 尝试添加skip-name-resolve
到[mysqld]
你的部分my.cnf
文件。 这从传入连接的IP地址进行反向DNS查找停止MySQL的。