2

現在、PHP アプリケーションを作成していますが、ページの読み込みが遅いことに気付きました。約 2 秒かかります (正確には 2.0515811443329)。

ボトルネックが何であるかを突き止めました。それは、MySQL データベースへの PDO 接続を作成している部分です。

私の「connect()」メソッドは、エキゾチックなことは何もしません。単純に次のようになります。

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;
}

したがって、「connect()」メソッドの呼び出しをコメント アウトすると、ページが読み込まれます: 0.035506010055542

これは大きな違いです。データベースへの接続の作成には時間がかかると想像できますが、1.5 秒以上かかります...これが正常かどうかわかりませんか?

その時間がかかるのが正常な場合、データベース接続を保存する方法はありますか? セッションに入れたいですか?実際、私が知る限り、セッションに保存することはできません。しかし、それは理想的なソリューションです。ユーザーがブラウザを閉じるまで、接続をどこかに保存します。

とにかく、私の PDO / MySQL に問題はありますか? そして、どういうわけか接続リソースを単純に保存できますか? 新しいページごとに毎回データベースに再接続する必要がないようにするには?

PS。私はこれをすべてローカルホスト(Windows)で行っています。

4

2 に答える 2

3

おそらく「localhost」をアドレスとして接続しています。これを「127.0.0.1」に変更してみてください。これで問題は解決するはずです。

于 2012-05-17T18:03:19.410 に答える
1

を使用して、データベースへの永続的な接続を作成できますPDO説明書より

多くの Web アプリケーションは、データベース サーバーへの永続的な接続を確立することで恩恵を受けます。永続的な接続はスクリプトの最後で閉じられませんが、別のスクリプトが同じ資格情報を使用して接続を要求したときにキャッシュされ、再利用されます。永続的な接続キャッシュを使用すると、スクリプトがデータベースと通信する必要があるたびに新しい接続を確立するオーバーヘッドを回避できるため、Web アプリケーションが高速になります。

そして例:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>
于 2012-05-17T17:42:12.333 に答える