前言
页面渲染方式:
- 服务端渲染,如smarty后端模板
- 利于seo
- 渲染速度更快
- 浏览器端渲染,前端模板
- 减少维护成本
- 提高效率,前后端分离的合作模式
模板引擎
工作原理:
- 模板解析 / 编译 parse / compile
- 数据渲染 render
String-based,基于string的parse和compile过程
- 本质上是字符串拼接的形式,遍历html字符串
- 基于正则表达式查找出模板
{ { } }
- es6模板字符串
- 基于正则表达式查找出模板
- 替换模型数据,实现视图渲染,依赖于innerHTML
典型库
- art-template
- mustache.js
- doT
Dom-based,基于dom的link或compile过程
- 遍历dom树节点属性和子节点,渲染render
- 提取dom中的
{ { } }
关键词,替换数据模型 - 基于mvc结构:模板视图,数据模型,引擎函数作为控制器实现数据与视图的绑定
- 数据模型更新 -> 视图更新:双向绑定。局部渲染更新
典型库
- Angular 脏检测,在特定事件下触发视图刷新
- React 虚拟dom算法检查dom变化
- Vue2 Getter/Setter机制与虚拟dom
- avalonjs
数据双向绑定的实现
- 监听vue实例中data属性,遍历此对象的属性,并使用Object.defineProperty 把这些属性转为getter/setter
1 | var obj = { |
- 数据描述符
- 可写 / 不可写
- 属性描述符
- 存取描述符
- getter / setter
Living templating,基于string的parse和基于dom的compile过程
- htmlbar
- ractivejs
- regularjs