Smarty前端模板引擎 - 我看過的PHP開源框架

Smarty

Smarty能夠說是我接觸PHP這門語言用到的第一個開源框架,當時在Smarty的幫助下,很好地完成了項目的開發,也很好地遵循了MVC的模式。可是到了後來,慢慢地發現,不少人都很熟悉Smarty,可是都不肯意使用它。大概的緣由在於:慢。php

當初覺得Smarty很神奇,到後來發現也是經過PHP來實現的。再到後來別人反映使用Smarty會影響性能,因此也就想深刻了解一下它的源代碼,看下它是怎麼實現的,是否是真的會慢?html

其實,Smarty只是用PHP作了一箇中間層,來把自定義的一些模板標籤再轉換成PHP語言,這裏面涉及到語法樹模式和PHP代碼的自動生成。然而,計算機的藝術正在於此:任何的問題,均可以經過一箇中間層來實現完成,但也會所以帶來性能問題。因此,正是這一層中間層,影響了性能。但同時Smarty也努力經過緩存來填補這塊的空缺。但對於好的項目分層、分離前端和後端,Smarty在開發實踐中確實有好的做用,這就須要項目在人力成本和服務器成本之間作下權衡吧。前端

UML靜態結構 - 部分

Smarty確實對外表現得很優秀,可是,Smarty裏面的結構和代碼層次,就我的看來,有些凌亂。如下是部分的UML結構圖,其餘待補充。
web


分析與總結

一樣,因爲當時未能實時紀錄,這裏羅列一些關鍵類:thinkphp

Smarty_Internal_CompileBase(編譯的標籤,如:循環、賦值、中斷等)後端

Smarty_CacheResource(緩存,如:key-value的緩存、自定義緩存等,這裏應該還有引用的緩存)緩存

_smarty_parsetree(語法樹解析器,包括:文本、標籤、代碼等)服務器

Smarty_Template_Source、Smarty_Resource(各類資源:代碼、文件包含、字符串、編譯/非編譯)框架

由此引伸

增長了中間層來實現對模板的解析,會影響性能,但這對人性化開發提供了很好的支撐。更爲重要的是,模板引擎這個概念有不少其餘框架也能夠看到引用。若是以爲Smarty慢或者不符合本身的項目要求,則能夠本身實現一套模板引擎規則的解析。例如ThinkPHP對模板的支持,更多信息請參見:http://doc.thinkphp.cn/manual/view.html。性能

這裏能夠有一個更深層次的轉換,即對語法樹模式的使用,這應該會涉及到特定領域語言DSL(更多信息能夠看下這本書:《特定領域語言》)。它的做用是經過咱們熟悉的語言來實現一些高難度的事情。好比咱們以爲對於前端HTML開發人員使用PHP語言來輸出數據是件痛苦的事情,那麼咱們提供相似<html>的標籤給他們使用。

再深一層,好比咱們(PHP開發人員)以爲用C/C++來開發PHP的擴展是件痛苦或者很高難度的事情,咱們可使用zephir來編寫。

這裏稍微說一下zephir,zephir是由phalcon(關於phalcon開源框架,後面會說到,不得不說,這是一個很是優秀的開源框架!)團隊提供的一種能夠用來開發PHP擴展的語言,官方文檔請見:http://zephir-lang.com/index.html。它的機制也是經過本身的解析器對zephir的代碼轉換成C的代碼,從而實現PHP擴展開發。

以前,我試着體驗了一下zephir,感受還不錯,如下是當時一個嘗試示例:[Zephir開發實踐]用Zephir編寫PHP擴展實踐  http://my.oschina.net/u/256338/blog/284540

相關文章
相關標籤/搜索