Сначало надо выяснить что так долго там делаеться, запросы к базе или php код исполняеться
В своеей обертке pdo сделай подсчет кол. запросов и время их исполнения
я себе зделал так (+/-)
<?php
class DB {
protected static $connection;
private static $instance = null;
private $querycount = 0;
private $querytime = 0.0;
public static function getInstance() {
if(is_null(self::$instance)) {
self::$instance = new DB;
}
return self::$instance;
}
public static function connection() {
if (is_null(static::$connection)) {
# Данные от бд
$dbcfg = [
'host' => 'localhost',
'name' => 'myblog',
'user' => 'root',
'pass' => ''
];
# Параметры подключения
$opt = [
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
try {
static::$connection = new PDO("mysql:host=".$dbcfg['host'].";dbname=".$dbcfg['name'], $dbcfg['user'], $dbcfg['pass'], $opt);
} catch (PDOException $e) {
throw new RuntimeException('Не удалось установить соединение с базой данных:%s'. $e->getMessage());
}
}
return static::$connection;
}
public static function prepare($sql, $values = null) {
$stime = microtime(true);
$sth = static::connection()->prepare($sql);
$sth->execute($values);
self::getInstance()->querytime += (microtime(true) - $stime);
self::getInstance()->querycount++;
return $sth;
}
public static function getQueryCount() {
return self::getInstance()->querycount;
}
public static function getQueryTime() {
return self::getInstance()->querytime;
}
public static function __callStatic($method, array $arguments ) {
return call_user_func_array([static::connection(), $method], $arguments);
}
}
?>В функцие prepare идет подсчет времени исполнения запросов и кол. запросов.
Потом я себе в футере делаю
<?='Генирация: ' . round(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"], 3) . 'сек. Память: ' . round(memory_get_usage() / 1024, 2) . 'Кб. Запросов: ' . DB::getQueryCount() . ' Время выполнения запросов: ' . round(DB::getQueryTime(), 3). 'сек.';?>