首先,應該明確動態頁面與靜態頁面之間的區別,為什么靜態頁面的加載要比動態的快。
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()//得到緩沖區內容