gpt4 book ai didi

php - 扩展的 mysqli 类中的慢父::__construct

转载 作者:搜寻专家 更新时间:2023-10-31 21:41:23 25 4
gpt4 key购买 nike

我正在数据库类中扩展 mysqli。我注意到调用父构造函数需要将近 2 秒的时间。我想这可能是我的环境,因为我在部署之前在我的桌面上进行开发。但这对我来说似乎不太可能。

环境:

  • 操作系统 - Windows 7 专业版
  • WAMP 服务器
  • Apache/2.2.17 (Win32)
  • PHP 5.3.4
  • MySql 版本 5.1.53
  • NetBeans IDE 6.9.1

有问题的代码:

class DGMysqliLink extends MySQLi
{
public function __construct($aDSN)
{
// Construct the DSN
$aDSN['dbhost'] = (empty($aDSN['dbhost']))?ini_get("mysqli.default_host"):$aDSN['dbhost'];
$aDSN['dbuser'] = (empty($aDSN['dbuser']))?ini_get("mysqli.default_user"):$aDSN['dbuser'];
$aDSN['dbpass'] = (empty($aDSN['dbpass']))?ini_get("mysqli.default_pw"):$aDSN['dbpass'];
$aDSN['dbname'] = (empty($aDSN['dbname']))?'':$aDSN['dbname'];
$aDSN['dbport'] = (empty($aDSN['dbport']))?ini_get("mysqli.default_port"):$aDSN['dbport'];
$aDSN['dbsock']= (empty($aDSN['dbsock']))?ini_get("mysqli.default_socket"):$aDSN['dbsock'];

// Instantiate the object by invoking the parent's constructor.
// This takes nearly 2 seconds
parent::__construct($aDSN['dbhost'],$aDSN['dbuser'],$aDSN['dbpass'],
$aDSN['dbname'],$aDSN['dbport'],$aDSN['dbsock']);

// If there are any errors, deal with them now
if($this->connect_error){/* Do some stuff */}
}
}

为什么调用此构造函数需要这么长时间,我该如何解决?

最佳答案

没有办法解决这个问题,这只是 TCP/IP 的开销以及多层客户端和服务器代码相互通信的开销。但是,您可以使用持久连接。它们从 PHP 5.3 开始可用。要激活它们,只需在主机名前加上“p:”前缀,就像连接语句中的“p:localhost”一样。同样在 PHP.INI 中启用它:mysqli.allow_persistent = On

除此之外,它都是自动的。

举个例子,我的页面平均加载时间为 1.3 秒。当我加载主页时,进行 4 或 5 次 AJAX 调用来填写表单字段,这一次迅速跳到 7 或 8 秒。每个 ajax 调用都意味着一个新的 PHP 脚本,该脚本又与数据库建立了一个新的连接。好吧,我认为这里的问题很清楚。

使用持久连接允许 PHP 重用已经打开的连接,从而节省了为每个脚本打开和关闭新连接所花费的所有时间。在我的案例中,每个连接的时间缩短了大约 1 秒,大大提高了性能。

然而,有一些细节是关于重用“脏”连接的不良影响。它们在 manual 中有解释。 ,但这里的简短信息是:整理您的数据库连接和命令,并使它们持久化。如果性能是必须的,这就是要走的路。

关于php - 扩展的 mysqli 类中的慢父::__construct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com