php - PDO 连接间歇性缓慢

标签 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

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

我尝试过的事情:

  • 将 http.conf 中的 ServerName 属性设置为 ServerName 127.0.0.1:80
  • 在连接脚本中使用主机 127.0.0.1 而不是 localhost
  • 在 http.conf 中将 HostnameLookups 设置为 Off
  • 在 http.conf 中将监听端口更改为 8080(监听 127.0.0.1:8080),这只是导致它显示 localhost 拒绝连接
  • 在 regedit 中禁用 IPv6
  • 更改了主机文件以包含记录 127.0.0.1 localhost 和 127.0.0.1 127.0.0.1
  • 禁用 XDebug 不会产生任何影响
  • 我安装了 BitDefender 防病毒软件并尝试将其禁用
  • 将skip-name-resolve添加到my.ini
  • 将bind-address="127.0.0.1"添加到my.ini
  • 刷新 DNS 缓存

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

我使用的是 Google Chrome,但所有浏览器都遇到同样的问题。

如何才能使与数据库的连接始终保持快速,而不是挂起 3 秒以上?

最佳答案

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

我不确定你想要多快,但如果你想减少连接速度时间,你应该考虑在后续连接中使用单例模式。

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

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 这不会避免第一个连接的速度,但感知到连接对于后续连接保持开放状态,它会足够快。 在采用单例模式之前,请先阅读它的优缺点。

关于php - PDO 连接间歇性缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49820594/

相关文章:

javascript - 从 MAC 照片应用程序上传到 PHP 表单

php - 保存在下拉列表的数据库值中

javascript - 下拉框不通过 php 发送表单数据

mysql - 在 MySQL 中如何设置属性的限制

php/mysql事务

php - Mysql 按 2 列排序,分别代表价格和新价格

php - 将一张表连接到多张表

mysql - Laravel 迁移(错误号 : 150 "Foreign key constraint is incorrectly formed")

php - PDO,使用带转义的 PDO 获取内容并回显它

PHP mysql PDO 连接 'user' @'@localhost'