2012-05-17 4 views
2

В настоящее время я пишу PHP-приложение, и я заметил, что моя страница загружается любопытно медленно. Я занимаю около 2 секунд (точнее, 2.0515811443329).Подключение базы данных базы данных (PDO)

Я выяснил, что такое узкое место, и это та часть, где я создаю соединение PDO с моей базой данных MySQL.

Метод «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; 
} 

Так что, когда я закомментировать вызов метода «подключения()», то мои загрузки страницы в: 0.035506010055542

Это огромная разница. Я могу себе представить, что создание соединения с базой данных занимает некоторое время, но занимает больше 1,5 секунд ... Я не уверен, что это нормально?

Если это нормально, это занимает такое количество времени, то есть способ сохранить соединение с базой данных? Как положить его на сеанс? На самом деле, насколько я знаю, сохранение его в сеансе невозможно. Но это было бы идеальным решением. Хранение соединения где-нибудь, пока пользователь не закроет свой браузер.

В любом случае, существует ли проблема с моим PDO/MySQL? И я могу как-то сохранить ресурс подключения? Так что мне не нужно повторно подключаться к моей базе данных каждый раз для каждой новой страницы?

PS. Я делаю все это на локальном хосте (Windows).

+0

С каким хостом вы подключаетесь? Если это удаленный хост по TCP, вы можете получить медленный поиск DNS или что-то в этом роде –

+0

@Michael, я думаю, я редактировал свой пост в то время, когда вы это писали. Я добавил его в конце своего сообщения. Localhost и Windows. – w00

+0

Есть ли соединение с localhost также занимает много времени, если вы просто используете командную строку 'mysql -u username -p password'? –

ответ

3

Вы, вероятно, налаживая связь с 'локальный' в качестве адреса. Попытайтесь изменить это на «127.0.0.1». Это должно решить проблему.

+0

Удивительно! Никогда не думал, что что-то подобное может быть проблемой. Но на самом деле это решило мою проблему. Моя страница загружается менее чем через секунду с подключением к базе данных! – w00

+2

Вопрос в том, почему это имеет значение? –

1

Вы можете создать постоянное соединение с базой данных с помощью PDO. От manual

Многие веб-приложения получат преимущества от постоянных подключений к серверам баз данных. Стойкие соединения не закрываются в конце скрипта, но кэшируются и повторно используются, когда другой скрипт запрашивает соединение с использованием тех же учетных данных. Постоянный кеш подключений позволяет избежать накладных расходов на установление нового соединения каждый раз, когда скрипт должен разговаривать с базой данных, что приводит к более быстрому веб-приложению.

И пример:

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

Спасибо, ответ Вивенди на самом деле устранил проблему. Но это все же пригодится, когда приложение будет готово к работе. – w00

Смежные вопросы