詳細(xì)介紹PHP模板引擎Smarty
PHP模板引擎,Smarty,它不同于其他的模板引擎,比如FastTemplate或者patTemplate,其中主要原因就是 Smarty會(huì)將模板轉(zhuǎn)化成PHP腳本,并剔除每次使用該模板時(shí)都會(huì)出現(xiàn)在解析環(huán)節(jié)里的用來(lái)控制和錯(cuò)誤檢驗(yàn)的附加碼。
這個(gè)功能使Smarty在大型應(yīng)用和高流量網(wǎng)站上有優(yōu)異的表現(xiàn)。 Smarty除了模板編譯還有很多其他的突出特性,我們會(huì)在后面詳細(xì)的討論。
首先,我們來(lái)揭秘模板編譯。
“模板的編譯”是什么意思?網(wǎng)頁(yè)需要做什么樣的編譯?編譯不是C++和Java也要做嗎?是的,但是這里的編譯會(huì)稍有不同。 Smarty將你的模板解析,然后轉(zhuǎn)換成PHP腳本,而不是二進(jìn)制碼,像在一般的編程中做的那樣。這樣,當(dāng)你的網(wǎng)頁(yè)被瀏覽時(shí),Smarty直接讀取PHP 腳本文件,而不是模板本身,這樣就節(jié)省了再次解析的時(shí)間。
Smarty在決定何時(shí)編譯上也很智能,他只在你對(duì)網(wǎng)頁(yè)有實(shí)際的更改的時(shí)候才會(huì)重新編譯,所以你不需要擔(dān)心手動(dòng)編譯會(huì)出現(xiàn)問(wèn)題。這樣做的好處就是你不需要了解任何關(guān)于PHP腳本和編碼的知識(shí)。這些都是在后天操作的,所以如果你的模板設(shè)計(jì)師甚至都不需要知道Smarty是一個(gè)“模板編譯引擎”。
Smarty也以自動(dòng)緩存模板輸出而著名。
Smarty將模板的輸出內(nèi)容緩存,這樣就省下了在從數(shù)據(jù)源重新取回?cái)?shù)據(jù)時(shí)的系統(tǒng)支出。數(shù)據(jù)源通常都是外部的,而且很慢,所以也經(jīng)常是你的應(yīng)用的瓶頸,如同遠(yuǎn)程數(shù)據(jù)源一樣。Smarty將你模板的輸出連同從數(shù)據(jù)源取得的數(shù)據(jù)一起緩存,這樣并不是每次你的網(wǎng)頁(yè)被訪問(wèn)時(shí)你就去連接數(shù)據(jù)源。如果你有一個(gè)反應(yīng)慢的數(shù)據(jù)源服務(wù)器或者對(duì)數(shù)據(jù)源有多種請(qǐng)求,這種緩存功能會(huì)大大提升網(wǎng)頁(yè)的性能。
當(dāng)然,有時(shí)你并不像讓模板的輸出被緩存,比如說(shuō)證券報(bào)價(jià)機(jī)或者你不停的修改你的數(shù)據(jù)源并期望立刻在網(wǎng)頁(yè)上反應(yīng)出這些變化。這些都沒(méi)問(wèn)題!Smarty同樣允許你定義哪些需要緩存哪些不需要。事實(shí)上你可以將緩存和沒(méi)有緩存的內(nèi)容放在一個(gè)頁(yè)面上,因?yàn)镾marty可以準(zhǔn)確的定義什么可以被緩存(比如萬(wàn)年不變的導(dǎo)航欄)和什么不可以被緩存(比如網(wǎng)頁(yè)底部的證券機(jī))。你也可以設(shè)定緩存內(nèi)容的有效期,這樣模板的內(nèi)容只會(huì)被緩存一段時(shí)間。這樣你就可以在實(shí)時(shí)更新的大量資訊和更快速的網(wǎng)站體驗(yàn)中找到平衡。
有一點(diǎn)需要指出的是,這種緩存功能和Zend Cache或者其他的PHP加速器完全不一樣。
類似Zend Cache的緩存工具都是將PHP腳本編譯后產(chǎn)生的字節(jié)碼緩存起來(lái),而Smarty緩存的是你的模板的輸出(其實(shí)就是一種PHP腳本)。因此,Smarty可以與Zend Cache并肩作戰(zhàn)。通過(guò)基準(zhǔn)測(cè)試已經(jīng)發(fā)現(xiàn)這是一種完美的解決方案。
正如引擎創(chuàng)作者所說(shuō):當(dāng)和PHP加速器一起使用時(shí),Smarty的表現(xiàn)確實(shí)有所提升。 Smarty也提供變量修改功能。你可以把字符串大寫(xiě)、切割、查找和替換。變量修改器簡(jiǎn)化了編程的過(guò)程,繞開(kāi)了程序員經(jīng)常使用的專業(yè)語(yǔ)法。這樣模板設(shè)計(jì)者就會(huì)對(duì)模板變量的格式有更好的控制,雖然他首先得知道哪些變量修改器是可用的。這是個(gè)很有用的功能,因?yàn)榫浞ㄗ兊煤?jiǎn)潔,而且不是程序員的人也可以使用它。
Smarty也在你的模板中提供了很多內(nèi)置的和習(xí)慣使用的函數(shù)。
這些函數(shù)就像模板的應(yīng)用編程接口,除了習(xí)慣使用函數(shù)可以被修改而內(nèi)置函數(shù)不能。這些函數(shù)可以讓4F60實(shí)現(xiàn)條件輸出(使用if語(yǔ)句),動(dòng)態(tài)循環(huán)迭代(使用 foreach或section語(yǔ)句),讀取config文件等等功能。
過(guò)濾器 Smarty可以將過(guò)濾器分類,讓你可以在模板被編譯之前或者之后運(yùn)行過(guò)濾器。預(yù)過(guò)濾器在你的模板運(yùn)行前使用,后置過(guò)濾器在模板被編譯后使用,輸出過(guò)濾器會(huì)過(guò)濾模板的輸出結(jié)果。為什么使用過(guò)濾器?你可能會(huì)問(wèn)。預(yù)過(guò)濾器可以去掉你不想要的內(nèi)容,確保你不想要的內(nèi)容不會(huì)被編譯。后置過(guò)濾器可以再模板被編譯后加入附加的信息,比如創(chuàng)建時(shí)間。輸出過(guò)濾器可以讓你修改模板的輸出,比如隱藏掉所有的電郵地址以垃圾郵件的騷擾。
Config 文件 Config文件是可以儲(chǔ)存模板的全局變量的配置文件。這樣你就能把一些影響到所有模板的全局變量集中儲(chǔ)存在一個(gè)地方。一個(gè)典型的例子就是所有模板的配色方案。如果配色方案需要修改,模板設(shè)計(jì)者只需要改變配置文件中的值。這樣他們就不必一個(gè)一個(gè)的修改每一個(gè)模板。
插件 Smarty插件架構(gòu)自2.0版本就出現(xiàn)了,它能讓Smarty更加用戶化。前面討論的預(yù)過(guò)濾器、后置過(guò)濾器等都是可用的插件類型而已。其他的插件類型包括修改器、控制模塊、編譯器等。使用插件,你可以制作自己的模板函數(shù),變量修改器和過(guò)濾器。你還可以使用資源插件改變Smarty的讀取數(shù)據(jù)格式(默認(rèn)是展平文件)。
通過(guò)資源插件,你可以將你的模板保存在數(shù)據(jù)庫(kù)里,通過(guò)一定的接口取回?cái)?shù)據(jù)。結(jié)束語(yǔ)將Smarty的模板編譯功能和PHP固有的效率結(jié)合在一起,你就擁有了絕對(duì)的速度優(yōu)勢(shì)。使用設(shè)計(jì)優(yōu)良的插件構(gòu)架,Smarty還有擴(kuò)展的函數(shù)功能,包括模板功能和變量修改器。速度和函數(shù)性的提高并沒(méi)有影響Smarty的親和度,事實(shí)上,Smarty非常容易上手。Smarty同時(shí)也配備了在線共享文檔。你可以從Smarty Website上下載。
Smarty的作者之一,Andrei Zmievski,也是PHP發(fā)展小組的成員,他會(huì)盡量保證Smarty緊跟PHP的發(fā)展。所以你大可放心:PHP的任何改版都會(huì)被Smarty支持的。
希望通過(guò)以上內(nèi)容的介紹,能夠給你帶來(lái)幫助。
【編輯推薦】