Mustache php 版開源項目 流程 性能分析 以及優化

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 的類 的數據量,減少拼接。對不變的數據,進行緩存優化。 如圖:





發佈了24 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章