PDO连接间歇性地变慢

时间:2018-04-13 15:35:28

标签: php mysql pdo xampp

我有以下脚本连接到数据库:

$db = new PDO("mysql:dbname=dbname;host=127.0.0.1;charset=utf8mb4", 'root', '',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

我正在使用xampp,并且间歇性地加载上面需要3秒多时间(如果它不执行上述操作则立即加载)。

我已经通过使用XDebug验证了上述内容,请看下面的截图: Connect 1 Connect 2

在谷歌开发者工具中,TTFB(第一个字节的时间)也与连接数据库所需的时间相匹配。

我尝试过的事情:

  • 将http.conf中的ServerName属性设置为ServerName 127.0.0.1:80
  • 在连接脚本中使用主机127.0.0.1而不是localhost
  • 在http.conf中将HostnameLookups设置为Off
  • 在http.conf中将Listen端口更改为8080(Listen 127.0.0.1:8080),这只是导致它说localhost拒绝连接
  • 在regedit中禁用IPv6
  • 将主机文件更改为记录127.0.0.1 localhost和127.0.0.1 127.0.0.1
  • 禁用XDebug并没有什么不同
  • 我安装了BitDefender Anti Virus并尝试禁用
  • 将skip-name-resolve添加到my.ini
  • 添加bind-address =" 127.0.0.1"到my.ini
  • 刷新DNS缓存

可能还有其他我忘记的事情。

我使用的是谷歌浏览器,但所有浏览器都存在同样的问题。

如何快速连接数据库而不是挂3秒钟?

1 个答案:

答案 0 :(得分:0)

这只是一个建议,而不是解决方案。 连接到数据库的速度可能会有所不同,具体取决于您使用的硬件。我注意到你在本地运行它。

我不确定你希望它有多快,但如果你想减少连接速度的时间,你应该考虑使用单例模式进行后续连接。

通常它应该类似于以下代码段:

Class Database
{
    protected static $connection = null;

    public static function connect ()
    {
         if (! is_null (self::$connection)) {
               return self::$connection;
         }

         self::$connection = new PDO("mysql:dbname=dbname;host=127.0.0.1;charset=utf8mb4", 'root', '' ", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'"));
         $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

         return self::$connection;
    }
}

Database::connect ()->query ('some random query'); // this will still take 3 sec
Database::connect ()->query ('some random query'); // this will run faster

P.S这不会避免第一次连接的速度,但感觉连接是开放的,以便后续连接足够快。 在采用单身模式之前,请先阅读单身模式的优缺点。