再谈 Virtual DOM(二)
如何编写 DOM?
编写 DOM:HTML 的进化
原生时代
最早的 Web 开发,是以 HTML 为基础的。
随着后续动态技术的兴起,动态页面也逐渐流行起来。
模板语言时代
在早期的 Web 开发中,模板语言是最常用的一种技术。但由于没有规定其动态生成的规范,导致各自语言体系中,有各自的模板规范。比如:Java、C#、JS、PHP 等等。
以下是一些常见的模板语言:
JavaScript Template Engine
<h2>Names</h2>
{#names}
  <strong>{name}</strong>
{/names}
ServerSide Template Engine
- ASP.NET
@foreach (var person in members)
{
  <p>@person</p>
}
- 
    JSP (Java Server Pages) & JSTL ( JSP Standard Tag Library) 
<c:forEach items="${requestScope.empList}" var="emp">
  <tr>
    <td><c:out value="${emp.id}"></c:out></td>
    <td><c:out value="${emp.name}"></c:out></td>
    <td><c:out value="${emp.role}"></c:out></td>
  </tr>
</c:forEach>
<% for(var i = 0; i < target.length; i++){ %>
    <%= i %> <%= target[i] %>
<% } %>
<table>
#foreach( $mud in $mudsOnSpecial )
  #if ( $customer.hasPurchased($mud) )
    <tr>
      <td>
        $flogger.getPromo( $mud )
      </td>
    </tr>
  #end
#end
</table>
JSX
随着 React 的崛起,框架侧引入了新的 JSX 语法,力求将模板语言的语法统一起来。
因为页面大部分是前端的领域,而且随着 前后端分离 的兴起,此方式受到了广泛的欢迎。
但本质上,JSX 已不再是模板语言,而是 JS 代码。所以,灵活性和模板语言已不可同日而语,其灵活性所带来的问题,也导致其优化的上限。
Template Literals & Tagged templates
// Template Literals
`Hello ${name}`
// Tagged templates
html`
  <div>
    <h1>Hello ${name}</h1>
  </div>`
