為了實現程式的商務邏輯和內容表現頁面的分離從而提高開發速度,php 引入了模板引擎的概念,php 模板引擎裡面最流行的可以說是smarty了,smarty因其功能強大而且速度快而被廣大php web開發人員所認可。本文將記錄一下smarty模板引擎的工作執行原理,算是加深一下理解。
其實所有的模板引擎的工作原理是差不多的,無非就是在php程式裡面用正則匹配將模板裡面的標籤替換為php代碼從而將兩者混合為一個php的混編檔案,然後執行這個混編檔案。基本上就是這麼回事兒了。下面以smarty為例說下這個過程。
例如本站文章頁面:http://www.phpernote.com/article.php?id=795
一般處理過程是這樣的:
html模板頁面部分代碼(article.html):
{subject}{content}
php頁面邏輯部分代碼:
$subject='smarty視頻教程分享';$content='smarty視頻教程分享,下面是具體的下載地址,有需要的朋友可以看看,對smarty模板講解的非常詳細,作者粗略看了一下目錄,真是詳細到細枝末節該......';$str=file_get_contents('article.html');$str=str_replace('{subject}',$subject,$str);$str=str_replace('{content}',$content,$str);echo $str;
使用物件導向技術實現模板功能的封裝代碼如下:
vars[$key]=$value;}public function display($file){//file表示模板名$str=file_get_contents($file);//從模板中讀取多有內容,並將內容放入$str中foreach ($this->vars as $key => $value){ //$key 鍵名(模板標記) $value 值$str=str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str);}echo $str;//file_put_contents('bak.html', $str);}}
注意:assign(‘name’,’zhangsan’);這句的時候其實還沒有進行資料替換,而是把傳入的資料儲存在vars[]中,當display的時候才進行資料替換。
smarty的處理過程:
1、 smarty將php源檔案,首先編譯成中間檔案
2、 如果啟用緩衝,再根據編譯檔案產生快取檔案
3、 之後每次訪問都會訪問編譯檔案
如果啟用快取檔案而且有快取檔案並且快取檔案沒有到期,則直接存取快取檔案(先不考慮緩衝的時候的流程)編譯檔案裡時間戳記錄模板檔案修改時間,如果模板被修改過就可以檢測到,然後重新編譯。
(編譯是把靜態內容儲存起來,動態內容根據傳入的參數不同而不同)
讀取編譯檔案省去了讀模數板檔案,和字串替換的時間,所以可以更快。
第一次請求article.php時候編譯,產生編譯檔案,在編譯檔案裡。
第二次請求article.php的時候,判斷模板檔案是否改變,如果模板檔案已改變,那麼去讀模數板檔案,然後再編譯,如果沒有改變,則去讀取編譯檔案,編譯檔案最終輸出;
緩衝預設是關閉的;緩衝是把資料徹底的存在快取檔案裡,直到快取檔案到期才會重新來緩衝;所以說smarty在一些即時性特彆強的網站裡不是特別合適;
對於以上文字可以抽象的理解為下面的一幅圖,讀者自己去體會吧!
考慮緩衝:
在smarty程式裡,判斷是否開啟了快取檔案,並且快取檔案沒有到期,,就去找快取檔案,如果沒有開啟快取檔案,就去判斷模板檔案,如果快取檔案已到期,也是去判斷模板檔案。
您可能感興趣的文章
- smarty 模板中迴圈表格補充不全的td
- smarty模板中for迴圈的擴充外掛程式
- smarty模板中如何產生隨機數
- smarty模板中判斷數組為空白的方法
- 程式中通過define定義的常量如何在smarty模板中使用
- smarty模板中使用php函數以及smarty模板中如何對一個變數使用多個函數
- smarty模板中給資訊添加最新標籤
- smarty模板保留變數總結
http://www.bkjia.com/PHPjc/764079.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/764079.htmlTechArticle為了實現程式的商務邏輯和內容表現頁面的分離從而提高開發速度,php 引入了模板引擎的概念,php 模板引擎裡面最流行的可以說是smarty了...