正在研究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<br/>";
}
$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<br/>";
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数: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的时间也相差很大呢。
请看到的贴的懂得大师们,做个点评,说明下,谢谢
已懂,作结