程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP頁面靜態化實現

PHP頁面靜態化實現

編輯:關於PHP編程

現在的網站一般都需要與數據庫進行打交道,訪問量較大時會對數據庫造成很大的壓力。將一些動態頁面執行的結果進行緩存,當下次進行訪問時,直接訪問緩存可以減少對數據庫的壓力。同時也可以加快服務器的響應速度。緩存的結果可以存放到外存上,也可以存在內存中。在下一次訪問該頁面時直接從外存(內存)中直接讀取上次的結果。


[php]
<?php 
     
    //首先查看緩存文件  
    if(file_exists("static.html")){ 
        //緩存時間為3分鐘  
        if(time()-filemtime("static.html")<60*3){ 
            //將靜態文件內容返回給客戶端  
            $start_time = microtime(); 
            echo "我是從靜態文件中讀取的數據:"."<br/>"; 
            echo file_get_contents("static.html"); 
            $end_time   = microtime(); 
            echo "靜態文件使用時間:".($end_time-$start_time); 
            exit; 
        } 
    } 
    //如果是首次訪問,或者是上次緩存的時間超過3分鐘,則從數據庫中讀取數據  
    $host     = "127.0.0.1"; 
    $user     = "root"; 
    $password = "123456"; 
    //記錄開始時間  
    $start_time = microtime(); 
    mysql_connect($host,$user,$password); 
    mysql_select_db("mydb"); 
    mysql_query("set names utf8"); 
     
    $sql        = "SELECT name,address,email FROM users"; 
    $resource   = mysql_query($sql); 
    echo "我是從數據庫中讀取的數據:<br/>"; 
    ob_start();//打開輸出緩沖  
    echo "<table border='1'><tr><th>姓名</th><th>地址</th><th>Email</th></tr>"; 
    //輸出取得的信息  
    while($userInfo = mysql_fetch_assoc($resource)){ 
        echo "<tr>"; 
        echo "<td>".$userInfo['name']."</td>"; 
        echo "<td>".$userInfo['address']."</td>"; 
        echo "<td>".$userInfo['email']."</td>"; 
        echo "</tr>"; 
    } 
    $end_time=microtime(); 
    $str=ob_get_contents();//獲取緩沖區的內容  
    ob_end_flush(); 
    echo "從數據庫讀數據的時間:".($end_time-$start_time); 
    file_put_contents("static.html",$str); 
?> 

<?php
 
 //首先查看緩存文件
 if(file_exists("static.html")){
  //緩存時間為3分鐘
  if(time()-filemtime("static.html")<60*3){
   //將靜態文件內容返回給客戶端
   $start_time = microtime();
   echo "我是從靜態文件中讀取的數據:"."<br/>";
   echo file_get_contents("static.html");
   $end_time   = microtime();
   echo "靜態文件使用時間:".($end_time-$start_time);
   exit;
  }
 }
 //如果是首次訪問,或者是上次緩存的時間超過3分鐘,則從數據庫中讀取數據
 $host     = "127.0.0.1";
 $user     = "root";
 $password = "123456";
 //記錄開始時間
 $start_time = microtime();
 mysql_connect($host,$user,$password);
 mysql_select_db("mydb");
 mysql_query("set names utf8");
 
 $sql   = "SELECT name,address,email FROM users";
 $resource  = mysql_query($sql);
 echo "我是從數據庫中讀取的數據:<br/>";
 ob_start();//打開輸出緩沖
 echo "<table border='1'><tr><th>姓名</th><th>地址</th><th>Email</th></tr>";
 //輸出取得的信息
 while($userInfo = mysql_fetch_assoc($resource)){
  echo "<tr>";
  echo "<td>".$userInfo['name']."</td>";
  echo "<td>".$userInfo['address']."</td>";
  echo "<td>".$userInfo['email']."</td>";
  echo "</tr>";
 }
 $end_time=microtime();
 $str=ob_get_contents();//獲取緩沖區的內容
 ob_end_flush();
 echo "從數據庫讀數據的時間:".($end_time-$start_time);
 file_put_contents("static.html",$str);
?>
users表中有三條記錄,使用的是apache服務。測試結果如下:

從數據庫中讀數據其平均執行時間為:0.0008041s左右

直接讀緩存文件期平均執行時間為:0.0000475

數據庫中的記錄只有三條,SQL也是簡單的單表查詢,當表的中記錄很多時,或者是多表查詢其執行的時間將會更長。緩存雖然能夠減少訪問數據庫的次數,加速響應時間,但緩存並不適合所有的頁面。有些頁面可能每次訪問時其頁面的顯示的內容就會發生變化,這樣的頁面顯然不能使用緩存。對於那些變化很少的頁面才比較適合使用緩存。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved