我知道(通过阅读 SO 和其他网站上的无数帖子)持久连接并不是绝大多数开发人员非常喜欢的东西(如果脚本突然终止,连接没有关闭,你可能会结束锁定一些表等)但它真的那么糟糕吗?
在我的开发机器(T3400 双核 CPU、4 GB RAM 和 5400RPM 硬盘)上,页面加载时间因我使用的是持久连接还是非持久连接而有很大不同。非持久连接的 2.09 秒与持久连接的(大约)68 毫秒非常不同。这里有两个示例屏幕截图供您查看:non-persistent与persistent。
我了解持久连接的风险(我并没有真正每天使用它们,虽然我觉得这个概念很有趣并且我想探索它),但是没有任何方法可以检测非关闭连接吗?
例如,类似于 mysqli 的change_user
但用于 PDO 的等价物,或者某种 PHP 脚本,服务器作为 cron 作业每 X 秒运行一次以检查剩余物并随后关闭它们?我正在阅读,register_shutdown_function
但是,如果我理解正确,它会在脚本完成后被调用,所以在实践中,这可能意味着每次脚本完成时它都会结束关闭我的持久连接。还是我错了?
编辑
为了准确起见,我忘了提及我的软件堆栈,所以让我来弥补一下。我当前的堆栈由以下元素组成:Windows 7 (x86) SP1
作为操作系统,,Apache 2.4.3
(PHP 5.4.9
我总是使用最新版本)和MySQL 5.5.28
. 将堆栈运行为localhost
(我可能正在将其迁移到专用机器,但现在它保持这样)。