Web 開發模板引擎 TagFeather
TagFeather 是一個讓美工不用去學任何程序代碼,只需要借助流行工具就能所見所得的預覽的 Web 開發模板引擎。簡單的講,頁面設計人員只需要按照程序員指定的 CSS Class 和 ID 就什么都不用管了。對于程序員來說,TagFeather很 容易掌握,而且開放的結構使得擴展極為方便。TagFeather 目前還只有PHP實現的版本,但將來會在各種語言上實現的。
TagFeather 有什么優點 和其他 PHP 模板 模板比較。TagFeather 比現有的所有模板都更美工歡迎。因為他們不需要學任何其它程序語言或者模板語言。他們用普通HTML工具預覽所得到的結果就是最終輸出結果的小樣。相比使 用內嵌代碼的而其很多只見結構不見預覽的模板比如 Smarty 來說這是一種質的飛躍,對于使用標記性標簽,如 Struct,ASP.Net 來說 TagFeather 則不需要專用的編輯器來預覽。相比另一個優秀的PHP模板引擎PHPTAL,TagFeahter 則是不必一定在模板html 文件中加入特殊屬性。 TagFeather 的原理是用自定義的 SAX 引擎解析寬松 xml 格式的模板文件。編譯成和 TagFeather 引擎無關的 PHP 代碼。常見的模板引擎如 Smarty 則是通過解析編譯字符串得到編譯后代碼的。TagFeather的 各種功能都是用鉤子函數來實現的。TagFeather 編譯后的代碼是原生,不需要額外支持就可以執行的 PHP代碼。 TagFeather 為了更方便程序員和美工 所見所得 頁面設計不再只見結構不見預覽結果,不需要任何輔助工具。 完全的頁面設計和程序邏輯分離 不需要在模板HTML文件中加入任何奇怪的東西。 不必學任何模板語言 頁面設計人員不需要。程序員也只需了解一些特殊的屬性怎么用,可以用 PHP 語言來檢查配置。 容易入門 因為不需要學習模板語言,所以頁面設計是幾乎0學習成本,程序員學習的成本也低于 smarty 方便的格式重排 你可以實現現有模板都很難做到的功能:預覽橫排但不滿足整除關系的表格。 如果設計得當,模板輸出文件甚至可以作為輸入模板使用。
運 行速度快 TagFeather 編譯后的代碼是不需要 TagFeather 支持的。和某號稱“It is extremely fast”,但實際上是效率最低下的某模板引擎比起來。TagFeather 編譯后的文件就和你不用任何模板自己寫的一樣。 編譯出來的文件可讀 用某模板的人都不知道生成的代碼是怎么樣的,但 TagFeather 讓你很清楚你做的是什么。
可以做輔助設計 即使你不相信 TagFeather 在運行時候的表現,你也可以用他編譯出來的 PHP 文件。因為編譯出來的文件很容易明白。
方便 確實很靈活方便開始建模的時候可以把代碼,配置和模板三個文件混合寫在一起。后來可以把代碼,配置寫在一起。或者你也可以三者分離。 擴展性強 TagFeather 的功能都是由鉤子函數實現的,寫一個鉤子函數是很容易的事情。 不需要配置 簡單項目 通用 大部分模板都很容易轉為TagFeather 模板 模板可以和代碼混用。你可以在模板里自由書寫代碼,但是也可以設置為模板安全。 安全 有插件使得模板是安全的,就是只能 增強的XML解析器 TagFeather的 模板文件是XML,但是TagFeather的 解析器做了一些改進,你可以在屬性和文本區域里混合使用宿主語言(當前是PHP)和普通文本。 TagFeather 的缺點 TagFeather 目前還沒有經過大規模的應用考驗。 TagFeather 的編譯效率和文檔復雜度有關,編譯效率很低,簡單的頁面不到1秒,能每次運行時都可以實時編譯。但復雜頁面會導致運行超時。編譯前后效率比可達 1000:1以上。 TagFeather 支持 GB2312 編碼,但理論上對 GBK編碼會有問題。 TagFeather 的產品完成度還不夠,作為一個程序合格,但是作為一個產品,還有很多不足。盡管我已經竭力以產品角度來對待 很多從非 TagFeather 的模板轉移到 TagFeather 的麻煩在于: TagFeather 要求輸入的必須是可以含標準服務端屬性的 XML文件。 XHTML 的一些屬性導致那些源模板不符合 XML。盡管TagFeather已 經夠寬松了。 編譯型的模板的一個缺點:必須要可寫的文件作為緩存。 TagFeather 的特點 TagFeather 的工作原理是用 SAX 方式 解析 xml 模板輸出解析后數據,和一般通用 的 SAX Parser 解析器不同的是: TagFeather 的 SAX 解析器 TF_XmlParser 是支持帶服務端標記 <? <% 的,而且不會替換 & 實體符號。而且 而且做了部分擴充 根據系統和用戶添加的解析鉤子,TagFeather 因此得到不同的輸出。 TagFeather 的輸入和輸出都是可稍微擴展的 XML 文件 TagFeather 為什么沒有緩存系統? 緩存系統不是模板系統考慮的事,TagFeather 推薦使用 Pear::CacheLite 配合生成實靜態化。