Mustache 項目 :https://github.com/bobthecow/mustache.php
Mustache 是一個功能強大的 Template 模板組件。用來分離前端靜態頁的設計和後臺數據的填充。
mustache php 源碼分析:
如圖:
調用使用:
項目基本結構如圖,
Mustache_Autoloader : 通過調用其register 函數,註冊相關環境。
Mustache_Engine : 項目主體,通過其render 函數對模板進行翻譯。
Mustache_Loader: 模板加載類,通過該類,加載模板字符串或模板文件 (通過繼承獲得)
Musache_ Template: 模板公共父類,所有的模板(文件、字符串)都會在最後生成不同的Template子類,裏面方法有 renderInternal()和select(),用來翻譯成爲正式html 頁面。
Mustache_Cache : 生成的Template子類,都需要緩存到Cache內,可以選擇緩存的的方式(文件/內存)(通過繼承)
Mustache_Context : 對象上下文類,內建一個array()用來保存 顯示在模板的數據。
2、流程圖
下面是項目的數據流圖
1 Mustahce 爲每一個html模板都生成了一個對應的Template模板類,,主要函數有renderInternal()、select(),負責對模板的解釋說明。
2 Mustahce 會對生成的Template 模板進行緩存,防止下次調用相同html文件需要重新生成,浪費時間。
3 項目的大部分時間都在 renderInternal () Select() findVariableInStack()內進行執行,不斷地進行字符串的拼接。
4 對每個轉換都會調用findVariableInStack()返回結果
Mustache性能分析:
1 如上圖黃色區域所示項目的大部分時間都在 renderInternal () Select() findVariableInStack()內進行執行,不斷地進行字符串的拼接。
2 又因爲mustache支持多種方式的變量(可以是函數,數組,字符串)。在findVariableInStack函數內部需要不斷地進行類型判斷。
3、 每個html模板 最後都會生成對應的 一個php Template 類, 拼接字符串。
Mustache 性能調優
1 去除 mustache支持多種方式的變量(可以是函數,數組,字符串),讓其僅支持一種。
2 不使用 {{#{{#}}}} 嵌套方式,儘量減少需要遍歷的數據量
3 減少每個html 模板產生 對應的Template 的類 的數據量,減少拼接。對不變的數據,進行緩存優化。 如圖: