2012-05-17 76 views
2

我目前正在编写一个PHP应用程序,我注意到我的页面加载速度有点慢。我需要约2秒(准确地说是2.0515811443329)。存储数据库(PDO)连接

我已经查明了瓶颈是什么,它是我创建到我的MySQL数据库的PDO连接的部分。

我'连接()'方法不会做任何exoctic的东西。它只是看起来像这样:

public function connect ($database, $host, $username, $password) 
{ 
    try 
    { 
     $this->db = new \PDO("mysql:dbname=".$database.";host=".$host, $username, $password); 
     if (!$this->db) 
     { 
      throw new \Exception('Failed to connect to the database!'); 
     } 

     $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 
    } 
    catch (\Exception $e) 
    { 
     echo '<strong>Exception: </strong>'.$e->getMessage(); 
     return false; 
    } 

    return true; 
} 

所以,当我注释掉调用“连接()”方法,那么我的页面加载:0.035506010055542

这是一个巨大的差异。我可以想象,创建与数据库的连接确实需要一些时间,但需要超过1.5秒......我不确定这是否正常?

如果这是正常的,它占用了这段时间,那么有没有办法来存储数据库连接?就像把它放在会话中一样?实际上,据我所知,将它存储在会话中是不可能的。但这将是理想的解决方案。将连接存储在某处直到用户关闭浏览器。

无论如何,我的PDO/MySQL有问题吗?我可以简单地存储连接资源吗?这样我就不必每次都重新连接到我的数据库每个新页面?

PS。我在本地主机(Windows)上完成了这一切。

+0

你连接的主机是什么?如果它是一个通过TCP的远程主机,你可能会得到一个缓慢的DNS查找或类似 –

+0

@Michael我想我编辑我的文章,当你写这个。我在帖子末尾添加了它。本地主机和Windows。 – w00

+0

如果只使用命令行'mysql -u username -p password',连接到localhost是否也需要很长时间? –

回答

3

你可能会做与 '本地主机' 作为地址的连接。尝试将其更改为“127.0.0.1”。这应该解决问题。

+0

令人惊叹!从来没有想过这样的事情会成为问题。但的确,它解决了我的问题。现在,我的页面在数据库连接中加载时间不到一秒! – w00

+2

问题是为什么它有所作为? –

1

您可以使用PDO创建与数据库的持久连接。来自manual

许多Web应用程序将受益于与数据库服务器建立持久连接。持久连接在脚本结束时未关闭,但在另一个脚本使用相同凭据请求连接时缓存并重新使用。持久连接缓存可以避免每次脚本需要与数据库通信时建立新连接的开销,从而导致更快的Web应用程序。

而且例如:

<?php 
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true 
)); 
?> 
+0

谢谢,维旺迪的回答实际上解决了这个问题。但是,当应用程序准备就绪时,这仍然会派上用场。 – w00