正在研究php框架,突然發現一個奇特的問題:框架中php代碼連接數據庫使用PDO和mysqli,盡然會導致頁面加載速度上產生很大的差距。一開始還以為是框架本身造成的這種現象,所以在本地寫了一個基礎的測試用例,只是分別用PDO和Mysqli連接數據庫,看看頁面響應速度。並且在php代碼剛開始執行和執行結束輸出微秒差值。
第一種連接DB方式:
$t1 = microtime();
/* Connect to a MySQL server 連接數據庫服務器 */
$link = mysqli_connect(
'localhost', /* The host to connect to 連接MySQL地址 */
'xxxx', /* The user to connect as 連接MySQL用戶名 */
'xxxx', /* The password to use 連接MySQL密碼 */
xxxx'); /* The default database to query 連接數據庫名稱*/
if (!$link) {
printf("Can't connect to MySQL Server. Errorcode: %s ", mysqli_connect_error());
exit;
} else {
echo "connet ok
";
}
$t2 = microtime();
echo $t2-$t1;
執行效率貼圖:
以上兩張圖,都是php使用mysqli連接數據庫,可以看到TTFB響應時間超長,都1s以上了,這只是打開一個只連接數據庫的頁面,但是頁面上開始執行和結束的微秒有的時候差距蠻大。大部分是在0.0023微秒。
第二種方式:
$t1 = microtime();
$dbms='mysql'; //數據庫類型
$host='127.0.0.1:3306'; //數據庫主機名
$dbName='xxxx'; //使用的數據庫
$user='xxxx'; //數據庫連接用戶名
$pass='xxxx'; //對應的密碼
$dsn="$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass); //初始化一個PDO對象
echo "connect ok
";
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "
");
}
//默認這個不是長連接,如果需要數據庫長連接,需要最后加一個參數:array(PDO::ATTR_PERSISTENT => true) 變成這樣:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
$t2 = microtime();
echo $t2-$t1;
執行貼圖:
php使用PDO連接DB,頁面的響應時間都在ms級,php代碼從開始執行和執行結束所輸出的微秒差值有的時候相等,而TTFB的時間也相差很大呢。
請看到的貼的懂得大師們,做個點評,說明下,謝謝