動態頁面靜態化的實現

2022-03-19 13:07:49 字數 1431 閱讀 9104

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

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...