在 Roodo! Blog 開發日誌 的「樂多日誌開發使用相關技術」中使用了 Smarty 這個 PHP Tempate Engine。
這讓我想到跟 hlb 聊到一篇很有名的文章:Templates and Template Engines。
這篇文章簡單來說就是這樣:「他媽的你們這些人幹嘛叫我把 PHP 改得更快,你們用 Smarty 這類的 Template Engine 當然會慢啊!PHP 本身就是一個 Template Engine,你用 Template Engine 去寫另外一個 Template Engine 當然會慢,怪我咧,blah blah…」(當然,文句沒有這麼粗俗 :p)
但你又不能直接開放 PHP function 給 user 用:因為 user 可以把 $__GLOBAL 裡面的變數倒出來慢慢看有什麼好玩的,或者是透過你的主機寄寄廣告信 *grin*
Savant2 是一套直接使用 PHP function,但是做了合理的限制的 PHP Template Engine:
Savant is a powerful but lightweight object-oriented template system for PHP.
Unlike other template systems, Savant by default does not compile your templates into PHP; instead, it uses PHP itself as its template language so you don’t need to learn a new markup system.
比起 Smarty 所產生的 loading 會比較小。
Update:才剛寫完就看到 freshmeat 上另外一個計畫 smarty-lite,將 Smarty 比較不常用的功能都拿掉,有興趣的人也可以看看。
ports/php-templates is better then smarty.
呵…這篇文章還蠻風趣的。
不過 Smarty 原來會一定程度的拖慢 PHP 我倒是現在才知道 :p
只能說我覺得那篇文章的論點有點奇特… 左看右看都不覺得 PHP 本身夠格稱得上是 template engine…
php可以當作template engine來用沒錯,
不過用savant2,如果有讓user改寫template的狀況的話,
為了安全還是要寫compiler,那就很像lite版的smarty了,
而且Smarty compile動作只發生一次,不是每次都會compile,
再加上op-code cache,效能是可以接受的,
當然還是比不上smarty-light或savant2,
另外smarty彈性的plugin架構,在處理view layer上,
的確是”非常”的方便
可以試試sopily,只拿了smarty的modifier,其它都是使用php來echo,有興趣可以試試看。