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 的类 的数据量,减少拼接。对不变的数据,进行缓存优化。 如图: