我的网站上有使用数据库的页面和没有的页面。
当我需要数据库时,我使用$conn = connect()
进行连接。但这意味着我需要把它放在所需的任何地方。如果我将它放在一个包含文件中并将该文件放入每个页面,即使不需要数据库也会连接它。这是个好主意吗?创建连接会在不需要时导致问题或其他问题,还是仅在需要时才连接?
答案 0 :(得分:1)
当您不需要引入可避免的少量开销时,连接到数据库。如果您需要尽可能快地运行页面,则可以通过避免不必要的数据库连接进行优化。
这表示作为PHP总执行时间的一部分所占的开销有多大差异,例如,如果您的PHP脚本简单快速,那么数据库连接按百分比浪费的时间占比较大。如果您的PHP脚本执行了很多其他操作,那么数据库连接占总时间的百分比较小。
数据库连接的速度也可能有所不同,具体取决于服务器的速度,MySQL是否配置了DNS依赖等等。
当我使用Zend Framework时,我们实现了“懒惰”连接。您可以随时创建Zend_Db_Adapter对象的实例,但该类不会连接到类构造函数。它在您运行第一个查询时(或当您明确调用getConnection()
方法时)连接到数据库。
另一个考虑因素是,当您完成运行查询后,断开与数据库之间的关系。
假设您每秒处理1000个PHP请求(平均每毫秒一个),并且每个PHP请求持续100毫秒。因此,在任何给定的时刻,您平均可能有100个PHP请求正在进行中。如果您的PHP代码所做的第一件事是连接到数据库,它最后做的是断开与数据库和其他资源的连接(通过自动请求清理),那么您也可以随时激活100个数据库连接。
但是如果延迟连接到数据库,并在完成查询数据库后立即断开连接,并避免在某些请求上完全连接,那么平均而言,并发数据库会话数会少得多。
这有助于减少数据库服务器上的资源使用,从而允许每秒完成更多吞吐量和更多数量的PHP请求。