动态语言静态化
一、什么是動態(tài)語言靜態(tài)化
將現(xiàn)有PHP等動態(tài)語言的邏輯代碼生成為靜態(tài)html文件,用戶訪問動態(tài)腳本重定向到靜態(tài)html的過程
注 : 對實時性要求不高的頁面才適合去做動態(tài)語言靜態(tài)化
?
二、為什么要靜態(tài)化
1. 動態(tài)腳本通常會做邏輯計算和數(shù)據(jù)查詢,訪問量越大,服務(wù)器壓力越大
2. 訪問量大時可能會造成CPU負載過高,數(shù)據(jù)庫服務(wù)器壓力過大
3. ?靜態(tài)化可以降低邏輯處理壓力,降低數(shù)據(jù)庫服務(wù)器查詢壓力
?
三、靜態(tài)化的實現(xiàn)方式
第一種:使用模板引擎
( 1 ) 可以使用smarty的緩存機制生成靜態(tài)html緩存文件
$smarty->cache_dir = $ROOT."/cache"; //緩存目錄 $smarty->caching = true;//是否開啟緩存 $smarty->cache_lifetime = '3600';//緩存時間$smarty->display(string template [, string cache_id [,string compile_id]]);
備注:cache_id 緩存id; ?compile_id 編譯文件id
(2) ?清除smarty緩存
$smarty->clear_all_cache();//清除所有緩存 $smarty->clear_cache('file.html'); //清除指定的緩存 $smarty->clear_cache('article.html',$art_id); //清除該模板下的指定緩存號的緩存?
第二種: 利用ob系列的函數(shù)做靜態(tài)化緩存 (推薦)
(1) 相關(guān)函數(shù)
ob_start();//打開輸出控制緩沖 ob_get_contents();//返回輸出緩沖區(qū)內(nèi)容 ob_clean();//清空輸出緩沖區(qū) ob_end_flush();//沖刷出(送出)輸出緩沖區(qū)內(nèi)容并關(guān)閉緩沖(2) 示例:
<?php $cache_name = md5(__FILE__).'.html';//定義之后生成緩存文件的文件名$cache_lifetime = 3600;//定義過期時間為1小時//限制條件,條件符合,就加載緩存文件 if(filemtime(__FILE__) <= filemtime($cache_name) && file_exists($cache_name) && filectime($cache_name) + $cache_lifetime > time()) {include $cache_name;//如果在緩存之后沒有進行過修改,并且文件存在,并且沒有過期,我們就加載文件,并且下面內(nèi)容不再訪問var_dump(filemtime());//測試時用的,看修改文件時,是否還能夠讀取緩存文件exit; }ob_start(); //開啟緩存?>=========這部分是我們要緩存的內(nèi)容========<?php$content = ob_get_contents(); //獲取緩存區(qū)的內(nèi)容ob_end_flush();//關(guān)閉緩存區(qū)$handle = fopen($cache_name,'w');//將文件以寫的方式打開fwrite($handle,$content);//將我們獲取到的緩存內(nèi)容$content寫入我們定義好的緩存文件fclose($handle); //關(guān)閉打開的文件資源?>?
現(xiàn)在訪問瀏覽器
與此同時,還生成了一個緩存文件,內(nèi)容和從php文件中獲取到的是一樣的
現(xiàn)在,我們沒有修改文件,再刷新瀏覽器,會出現(xiàn)我們在if語句中輸出的filemtime,這證明if滿足,已經(jīng)在讀取緩存文件了
現(xiàn)在,我們再修改一下文件,在文字后面加了一個+,如果瀏覽器顯示這個+,并且不輸出文件的修改時間,就證明讀取的不是緩存文件
瀏覽器顯示:
瀏覽器顯示結(jié)果帶 + , 證明文件修改之后,就重新讀取文件,然后再刷新
結(jié)果證明: 因為文件沒有再被修改,所以又讀取緩存文件了
?
?
代碼源碼下載:?http://download.csdn.net/download/m_nanle_xiaobudiu/10242029
總結(jié)
- 上一篇: 优化-浏览器缓存和压缩优化
- 下一篇: memcache在项目中的应用