smarty(原理概述)


smarty(模板引擎,模板技術)

使用smarty主要是為了實現邏輯和外在內容的分離;

特點:

1、速度快(因為第二次執行的時候使用第一次執行時生成的編譯文件)

2、緩存技術(正是因為緩存技術,使得smarty模板技術不太適合那些對於實時性更新要求比較高的,比如股票信息)

3、插件技術

4、緩存技術

5、語句自由靜態頁面技術實際上是以空間換時間的技術:

http://localhost/news.php?id=8比如這個是某門戶網站的新聞頁面,

很多人訪問,每次都要去數據庫里查詢,可以再第一次訪問的時候生成一個html頁面,以后的訪問者都是訪問這個靜態頁面)

數據庫--->靜態頁面

分析模板技術:是利用php語言讀取模板文件完成字符串替換掉的過程

詳解代碼如下:

html頁面:
<body>
<font color = 'red'>{id}</font><br>
<font color = 'green'>{name}</font><br>
<font color = 'bule'>{age}</font><br>
</body>


后台邏輯部分
//
$id=8;
$name='zhangsan';
$age = 12;

$str = file_get_contents('demo1.html');//模板文件的所有內容
$str = str_replace('{id}', $id, $str);//替換id
$str  = str_replace('{name}', $name, $str);
$str = str_replace('{age}', $age, $str);
echo $str;
?>

 

 面向對象技術實現模板功能的封裝

 1 <?php
 2 class Template
 3 {
 4     //屬性
 5     public $vars;                        //保存要替換的標記和數據的內容
 6     public $left_delimiter = '{*';        //左分隔符
 7     public $right_delimiter = '*}';        //右分隔符
 8     //方法
 9     public function assign($key,$value)
10     {
11         
12         $this->vars[$key] = $value;
13     }
14     public function display($file)     //file表示模板名
15     {
16         $str = file_get_contents($file);    //從模板中讀取多有內容,並將內容放入$str中
17         foreach ($this->vars as $key => $value) //$key 鍵名(模板標記) $value 值
18         {
19             $str = str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str);
20         }
21         echo $str;
22         //file_put_contents('bak.html', $str);
23     }
24 }
25 ?>

注意:assign(‘name’,’zhangsan’);這句的時候其實還沒有進行數據替換,而是把傳入的數據保存在vars[]中,當display的時候才進行數據替換

smarty的處理過程:

1、 smarty將php源文件,首先編譯成中間文件

2、 如果啟用緩存,再根據編譯文件生成緩存文件

3、 之后每次訪問都會訪問編譯文件

如果啟用緩存文件而且有緩存文件並且緩存文件沒有過期,則直接訪問緩存文件

(先不考慮緩存的時候的流程)

編譯文件里時間戳記錄模板文件修改時間,如果模板被修改過就可以檢測到,然后重新編譯

(編譯是把靜態內容保存起來,動態內容根據傳入的參數不同而不同)

讀取編譯文件省去了讀取模板文件,和字符串替換的時間,所以可以更快

第一次請求demo.php時候編譯,產生編譯文件,在編譯文件里

第二次請求demo.php的時候,判斷模板文件是否改變,如果模板文件已改變,那么去讀取模板文件,然后再編譯,如果沒有改變,則去讀取編譯文件,編譯文件最終輸出;

緩存默認是關閉的;緩存是把數據徹底的存在緩存文件里,直到緩存文件過期才會重新來緩存;所以說smarty在一些實時性特別強的網站里不是特別合適;

 

 考慮緩存:

smarty程序里,判斷是否開啟了緩存文件,並且緩存文件沒有過期,,就去找緩存文件

如果沒有開啟緩存文件,就去判斷模板文件,如果緩存文件已過期,也是去判斷模板文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM