首先,應該明確動態頁面與靜態頁面之間的區別,為什麼靜態頁面的載入要比動態的快。
php檔案的執行階段是:語法分析——>編譯——>執行。
動態是執行這整個過程。
靜態(只是乙個純靜態的 html 檔案),跳過了分析和編譯的步驟,直接執行。
(優化頁面響應時間的常見四種方法:動態頁面靜態化,優化資料庫,使用負載均衡,使用快取。。)
靜態化用於那些不需要經常變動的頁面,生成乙個靜態頁面供使用者訪問,以減少伺服器指令碼的響應、計算時間。
-->純靜態: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()//得到並刪除緩衝區內容
根據業務需求,觸發系統生成靜態檔案的三種方式:
使用者訪問a.php,但在其開始加上判斷,是否已經存在靜態檔案且未過期。是,則引入;否,則,生成新的內容,輸出並生成靜態檔案,以供下回訪問使用。
if(is_file(a.shtml) && (time() - filemtime('./a.shtml')) < 300)else
(2)手動觸發方式:
比方說,工程師臨時修改了頁面中某乙個東西。只要在後台製作乙個集合了可以更新的檔案的表單,想要更新哪個點哪個。
(3)crontab定時掃瞄程式。linux中定時執行檔案。tail -f /var/log可以檢視crontab日誌。
動態頁面靜態化
一 tomcat的過濾器 最典型的就是用 urlreweite的類庫.1.將所需的urlrewrite x.x.x.jar放在web inf lib中 修改web.xml增加過濾器,然後配置個過濾的規則就可以了web.xml修改部分 urlrewritefilter org.tuckey.web.f...
動態頁面靜態化
動態變靜態 方法一 使用現成的 外掛程式,比如 isapi rewrite iis rewrite apache http伺服器的mod rewrite等,它們都是基於 正規表示式解析器開發的重寫引擎。它們的使用方法檢視它們自帶的幫助即可。方法二 自己寫的 實現動態網頁靜態化,方法也有好幾種 1 建...
動態頁面靜態化
下面是乙個頁面轉換的類,該類通過靜態函式changfile 來實現,然後配合iis rewrite實現動態頁面到靜態頁面的轉換,並能主動控制頁面重新整理。using system using system.data using system.configuration using system.we...