我有以下脚本来连接到数据库:
$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 秒以上的时间来加载上述内容(当它不执行上述操作时,它会立即加载)。
在 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/