2013-03-01 14 views
5

Ich benutzte Webgrind und Xdebug, um meine Website-Leistung zu messen. 85% der Ladezeit für die Funktion php :: PDO genommen -> __ construct (etwa 1 Sekunde) ...beschleunigen php :: PDO -> __ Konstrukt

dies ist nicht akzeptabel. Kann ich diese Funktion irgendwie optimieren? (Caching, MySQL-Konfiguration usw.)

Ich verwende PHP, MySQL und Codeigniter mit Redbean. redbean Anwendungen, die Funktion pdo konstruieren ...

hier ist die Funktion Quellcode

/** 
* 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

Wenn das inakzeptabel ist, dann denke darüber nach, warum du __construct so oft anrufst und es von dort aus durchführst. –

+4

[Google ist großartig, Mann. nahm mich 2 Sekunden] (http://stackoverflow.com/questions/9800577/why-is-constructing-pdo-connection-slow) –

+2

BTW, Zeichensatz sollte in DSN gesetzt werden –

Antwort

7

Die Lösung ist ganz einfach ...

Anschluss PDO auf localhost -> 1 Sekunde

PDO Verbindung zu 127,0 .0.1 -> 50 miliseconds ...

nicht aks mich warum ... scheint, etwas mit Versuch zu haben & Warte auf ipv6 Verbindung, dann fällt zurück zu gutem altem ipv4 ... die ipv4 Adresse versucht nicht ipv6 ...

0

PDO ist build-in so ... es sollte so schnell wie möglich sein. Ist dieser MySql-Server auf demselben Server oder ist er ein Remote-Host woanders? Hat mysql_connect die gleiche Zeit für die Verbindung benötigt? Ich verwende Redbean zu und es ist < 0,01s zu, dass init ...