最近在工做中主要用到的模板是mustache, 這裏很是想吐槽一下這個模板的設計之奇葩!! 因而就對模板這個東西稍稍研究了一下.前端
之前也研究過一點js的模板, 大部分的功能簡單的前端模板都是採用全局替換的方法和with語句, 經過new Function來實現的, 而且採用js的原生語法, 其實這只是特別簡單的處理方法, 之前我對模板的理解也僅僅到此.node
一個真正的模板不該該只是全局的替換, 而是應該包括了語法分析, 解析,最後動態編譯成編程語言. 對應在程序中大概是經過lexer語法分析器把模板轉換成Token流, 再使用parser使用token流生成對應的node節點, 這個node節點是能夠轉換成ast抽象語法樹的, 最後在編譯成編程語言, 這樣一個流程. 編程
對於JS來講, 全部模板的在最後都會經過new Function生成方法, 這使我對模板的加載有了一個新的思路, 是否能夠把模板以script的形式當成一個js文件發佈, 這樣即可以經過jsonp的形式去載入模板. 再進一步說, 甚至能夠經過amd或者commonjs規範的define和require來管理編譯好了以後的模板呢json