2013-03-01 8 views
5

Użyłem webgrind i xdebug, aby zaryzykować wydajność mojej strony. 85% czasu ładowania strony jest przyjmowane dla funkcji php :: PDO -> __ Konstrukt (około 1 sekundy) ...Przyspiesz php :: PDO -> __ skonstruuj

jest to niedopuszczalne. czy mogę jakoś zoptymalizować tę funkcję? (buforowanie, konfiguracja mysql itp.)

Używam php, mysql i codeigniter z redbean. Redbean zastosowania że PDO funkcję skonstruować ...

tutaj jest kod źródłowy funkcji

/** 
* Establishes a connection to the database using PHP PDO 
* functionality. If a connection has already been established this 
* method will simply return directly. This method also turns on 
* UTF8 for the database and PDO-ERRMODE-EXCEPTION as well as 
* PDO-FETCH-ASSOC. 
* 
* @return void 
*/ 
public function connect() { 
    if ($this->isConnected) return; 
    $user = $this->connectInfo['user']; 
    $pass = $this->connectInfo['pass']; 
    //PDO::MYSQL_ATTR_INIT_COMMAND 
    $this->pdo = new PDO( 
       $this->dsn, 
       $user, 
       $pass, 
       array(1002 => 'SET NAMES utf8', 
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
          PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 

       ) 
    ); 
    $this->pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); 
    $this->isConnected = true; 
} 
+0

Jeśli to nie do przyjęcia, pomyśl o tym, dlaczego tak często dzwonisz do __construct i opracowujesz go. –

+4

[Google jest wspaniałe, stary. zajęło mi to 2 sekundy] (http://stackoverflow.com/questions/9800577/why-is-constructing-pdo-connection-slow) –

+2

BTW, zestaw znaków powinien być ustawiony w DSN –

Odpowiedz

7

Rozwiązanie jest dość proste ...

PDO podłączeniem do localhost -> 1 sekundy

PDO podłączeniem do 127,0 .0,1 -> 50 milisekund ...

Nie wiem dlaczego ... wydaje się mieć coś wspólnego z wypróbowaniem & poczekaj na połączenie ipv6, a następnie powróć do starego dobrego ipv4 ... adres ipv4 nie próbuje ipv6 ...

0

PDO jest wbudowany w tak ... powinno być tak szybko, jak to możliwe. Czy ten serwer MySql znajduje się na tym samym serwerze, czy jest to host zdalny gdzie indziej? Ponadto, czy mysql_connect wymaga tyle czasu, aby się połączyć? Używam Redbean zbyt i to < 0,01 s init, że ...