動態頁面靜態化的實現


首先,應該明確動態頁面與靜態頁面之間的區別,為什么靜態頁面的加載要比動態的快。

PHP文件的執行階段是:語法分析——>編譯——>運行。

動態是執行這整個過程。

靜態(只是一個純靜態的 html 文件),跳過了分析和編譯的步驟,直接運行。

(優化頁面響應時間的常見四種方法:動態頁面靜態化,優化數據庫,使用負載均衡,使用緩存。。)

靜態化用於那些不需要經常變動的頁面,生成一個靜態頁面供用戶訪問,以減少服務器腳本的響應、計算時間。

 

PHP靜態化-->偽靜態:可以通過設置apache服務器得到,用戶訪問的網址是靜態頁面,實際上經過apache轉換,實際上訪問的是動態頁面。

      -->純靜態:html文件

        -->局部純靜態:部分內容是動態的,通過ajax和JS技術輔助實現

        -->全部純靜態

 

我們創建了一個文件,在文件里寫東西,並不是直接寫入(緩沖區已經開啟的情況下),而是先寫入到buffer中,buffer滿了,或者我們主動將buffer中數據沖刷才寫入到磁盤中的文件。生成靜態文件的原理就是,文件a.php的echo的同時,把要輸出的內容全部存進buffer中,再將buffer中統一存入一個新的靜態文件a.html中(a.html實際上一開始是空的),下次如果再次訪問a.php,如果a.html存在且沒有過期,就直接將用戶的訪問導向a.html,跳過了更多的語法分析和編譯。

(1)a.php獲取數據庫內容

(2)a.php 中,require_once('a.tpl')。.tpl由於是html文件,也會輸出到終端。

(3)將數據填充到a.tpl中

(4)file_put_contents()將緩沖填充到a.shtml靜態文件中,終端輸出生成靜態文件成功的提示。

實際中,用戶是不關心a.php的,他們只訪問a.shtml

 

buffer在php.ini文件中應該是默認開啟的。"output-buffering = On"。若沒有開啟,可以在a.php有輸出之前,ob_start()開啟buffer。

ob_start()//開啟緩沖區,若原先已默認開啟,則相當於開啟新的

ob_get_contents()//得到緩沖區內容

file_put_contents()//將指定內容放入指定路徑的文件
ob_clean()//清空緩沖區,這個方法之前echo的東西就不會輸出到終端。
ob_get_clean()//得到並刪除緩沖區內容
 
根據業務需求,觸發系統生成靜態文件的三種方式:
(1)頁面添加緩存時間:
用戶訪問a.php,但在其開始加上判斷,是否已經存在靜態文件且未過期。是,則引入;否,則,生成新的內容,輸出並生成靜態文件,以供下回訪問使用。
if(is_file(a.shtml) && (time() - filemtime('./a.shtml')) < 300){
  require_once('./a.shtml');
}else{
  //獲取新的內容,輸出,並生成新的靜態文件
}
(2)手動觸發方式:
比方說,工程師臨時修改了頁面中某一個東西。只要在后台制作一個集合了可以更新的文件的表單,想要更新哪個點哪個。
(3)crontab定時掃描程序。linux中定時執行文件。tail -f /var/log可以查看crontab日志。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM