资讯专栏INFORMATION COLUMN

字符串与JavaScript之间的魔术—前端模板的原理及简单实现

Steve_Wang_ / 1968人阅读

摘要:大多数模板实现原理基本一致模板字符串首先通过各种手段剥离出普通字符串和模板语法字符串生成抽象语法树然后针对模板语法片段进行编译,期间模板变量均去引擎输入的变量中查找模板语法片段生成出普通片段,与原始普通字符串进行拼接输出。

前端模板的发展

模板可以说是前端开发最常接触的工具之一。将页面固定不变的内容抽出成模板,服务端返回的动态数据装填到模板中预留的坑位,最后组装成完整的页面html字符串交给浏览器去解析。

模板可以大大提升开发效率,如果没有模板开发人员怕是要手动拼写字符串。

var tpl = "

" + user.name + "

"; $("body").append(tpl);

在近些年前端发展过程中,模板也跟着变化:

1. php模板 JSP模板

早期还没有前后端分离时代,前端只是后端项目中的一个文件夹,这时期的php和java都提供了各自的模板引擎。以JSP为例:java web应用的页面通常是一个个.jsp的文件,这个文件内容是大部分的html以及一些模板自带语法,本质上是纯文本,但是既不是html也不是java。

JSP语法:index.jsp


Hello World

Hello World!
<% out.println("Your IP address is " + request.getRemoteAddr()); %>

这个时期的模板引擎,往往是服务端来编译模板字符串,生成html字符串给客户端。

2. handlebar mustache通用模板

09年node发布,JavaScript也可以来实现服务端的功能,这也大大的方便了开发人员。mustache和handlebar模板的诞生方便了前端开发人员,这两个模板均使用JavaScript来实现,从此前端模板既可以在服务端运行,也可以在客户端运行,但是大多数使用场景都是js根据服务端异步获取的数据套入模板,生成新的dom插入页码。 对前端后端开发都非常有利。

mustache语法:index.mustache

Username: {{user.name}}

{{#if (user.gender === 2)}}

{{/if}}

3. vue中的模板 React中的JSX

接下来到了新生代,vue中的模板写法跟之前的模板有所不同,而且功能更加强大。既可以在客户端使用也可以在服务端使用,但是使用场景上差距非常大:页面往往根据数据变化,模板生成的dom发生变化,这对于模板的性能要求很高。

vue语法:index.vue

Username: {{user.name}}