国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

字符串與JavaScript之間的魔術—前端模板的原理及簡單實現(xiàn)

Steve_Wang_ / 1971人閱讀

摘要:大多數(shù)模板實現(xiàn)原理基本一致模板字符串首先通過各種手段剝離出普通字符串和模板語法字符串生成抽象語法樹然后針對模板語法片段進行編譯,期間模板變量均去引擎輸入的變量中查找模板語法片段生成出普通片段,與原始普通字符串進行拼接輸出。

前端模板的發(fā)展

模板可以說是前端開發(fā)最常接觸的工具之一。將頁面固定不變的內(nèi)容抽出成模板,服務端返回的動態(tài)數(shù)據(jù)裝填到模板中預留的坑位,最后組裝成完整的頁面html字符串交給瀏覽器去解析。

模板可以大大提升開發(fā)效率,如果沒有模板開發(fā)人員怕是要手動拼寫字符串。

var tpl = "

" + user.name + "

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

在近些年前端發(fā)展過程中,模板也跟著變化:

1. php模板 JSP模板

早期還沒有前后端分離時代,前端只是后端項目中的一個文件夾,這時期的php和java都提供了各自的模板引擎。以JSP為例:java web應用的頁面通常是一個個.jsp的文件,這個文件內(nèi)容是大部分的html以及一些模板自帶語法,本質(zhì)上是純文本,但是既不是html也不是java。

JSP語法:index.jsp


Hello World

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

這個時期的模板引擎,往往是服務端來編譯模板字符串,生成html字符串給客戶端。

2. handlebar mustache通用模板

09年node發(fā)布,JavaScript也可以來實現(xiàn)服務端的功能,這也大大的方便了開發(fā)人員。mustache和handlebar模板的誕生方便了前端開發(fā)人員,這兩個模板均使用JavaScript來實現(xiàn),從此前端模板既可以在服務端運行,也可以在客戶端運行,但是大多數(shù)使用場景都是js根據(jù)服務端異步獲取的數(shù)據(jù)套入模板,生成新的dom插入頁碼。 對前端后端開發(fā)都非常有利。

mustache語法:index.mustache

Username: {{user.name}}

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

{{/if}}

3. vue中的模板 React中的JSX

接下來到了新生代,vue中的模板寫法跟之前的模板有所不同,而且功能更加強大。既可以在客戶端使用也可以在服務端使用,但是使用場景上差距非常大:頁面往往根據(jù)數(shù)據(jù)變化,模板生成的dom發(fā)生變化,這對于模板的性能要求很高。

vue語法:index.vue

Username: {{user.name}}