speed up php::PDO->__construct
Asked Answered
H

1

6

i used webgrind and xdebug to messure my site performance. 85% of page loading time is taken for the function php::PDO->__construct (about 1 second) ...

this is unacceptable. can i somehow optimize this function? (caching, mysql configuration etc.)

i am using php, mysql and codeigniter with redbean. redbean uses that pdo construct function...

here is the function source code

/** 
 * 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; 
 } 
Hardheaded answered 1/3, 2013 at 15:16 Comment(4)
If that's unacceptable, then think about why you're calling __construct so many times and work it out from there.Dwelling
Google is great, man. took me 2 secondsGhost
BTW, charset should be set in DSNGhost
@YourCommonSense - yeah, but two seconds is unacceptable!!!!!!!!! ;-)Photolithography
H
9

The solution is quite simple ...

PDO connecting to localhost -> 1 second

PDO connecting to 127.0.0.1 -> 50 miliseconds...

dont aks me why ... seems to have something to do with try & wait for ipv6 connection, then fall back to good old ipv4 ... the ipv4 adresse does not try ipv6 ...

Hardheaded answered 1/3, 2013 at 16:49 Comment(1)
I have the exact opposite on my server: "localhost" is fast and "127.0.0.1" is slow. (Tested with PDO and MySQLi)Gavrah

© 2022 - 2024 — McMap. All rights reserved.