2012-02-05 40 views
0

我的網站上的某個頁面加載時間過長 - 大約2秒。在整個代碼中使用microtime之後,我已經計算出它花費的時間太長,並要求如何加速它的幫助。php,mysql,開放數據庫花費時間過長

我用於查找倍的代碼是

echo "<BR>3 - ".(microtime(true)-$startTime); #How long it takes for this page to do 
$sqldb=open_database(); #Open the database 
echo "<BR>4 - ".(microtime(true)-$startTime); #How long it takes for this page to do 

和我的結果是

3 - 5.1140758991241 
4 - 6.1172299385071 

所以從這個我推斷,該函數打開數據庫正在1秒。 用於打開數據庫的功能是

//This function is to open the database 
function open_database() { 
    //Now we will connect to the database 
    $sqldb=mysql_connect($_SESSION['hostname'], $_SESSION['dbusername'], $_SESSION['password']) OR die ('Unable to connect to database! Please try again later.'); 
    mysql_select_db($_SESSION['dbname'], $sqldb); #Select which database we wish to use - in this case the customer one 

    if(empty($sqldb)) { //If there is no database then we have an error - MASSIVE ERROR! 
     header('Location:'.$_SESSION['web_site'].'/error.php'); 
     die(); 
    } 
    return($sqldb); 
} 

請注意,會話變量下都在使用的mysql_connect,所以我只需要改變一個變量,當我更新到生產服務器。主機名是預生產服務器上的'locaLhost'。

所以我的問題是 - 爲什麼打開數據庫需要這麼久?請注意,因爲我處於試生產階段,所以數據庫非常小。

回答

2

會話存儲在文件系統中,並且從文件系統讀取也需要時間。如果它們存儲在php代碼中,那麼它們將立即可用於腳本。這可能是你的問題的一部分。

讓我提供一個可能的解決方案。創建2個新文件。

dbconfig.prod.php dbconfig.dev.php

把你的數據庫配置信息輸入到這些文件的正確的環境。在dev服務器上象徵性地鏈接dbconfig.dev.php到生產服務器上的dbconfig.php,象徵性地將dbconfig.prod.php鏈接到dbconfig.php然後在你的版本控制中忽略dbconfig.php

現在你不必爲數據庫配置存儲做一些非標準的會話,它可以解決你的時間問題。雖然IMO 1秒不是很多額外的時間。

+0

注意:會話*可能*存儲在文件系統中。不同的後端可用。 – Borealid 2012-02-05 04:44:09

+0

是的,但通常根據我的經驗,這些不同的後端在數據庫中。由於他沒有連接到數據庫,我認爲他會將會話存儲在文件系統中。 – thenetimp 2012-02-05 04:48:19

+0

實際上,如果他在訪問會話存儲時遇到性能問題,我推薦的第一件事就是使用memcached支持的會話... – Borealid 2012-02-05 04:50:08

0

爲什麼世界上你會將數據庫證書存儲在會話變量中?這些應該以php變量或常量的形式存在於site.config文件中,並且腳本應該從那裏加載它們。會話變量存在,因此您可以存儲基於連接的變量,而不是用於服務器端的配置信息。