js模板引擎v6

2022-02-08 23:13:31 字數 2753 閱讀 2850

這次的模板引擎主要在演算法方面做了些改進,主要借鑑正美的思路,

傳統的字串模組都要處理轉義的問題,但我這新方法通過傳參手段消滅了這步驟

核心原理

function a(); return function(data)")(b)

}a()+""

主要原理是根據模版生成的字串建構函式對字串的轉義要求很高,一不留神就會出錯,這次採用了將需要轉義的字串存入閉包中來進行引用,這樣就很好的避免字串轉義的操作。

同時也極大的減少了最後new function時的函式體。

下面這段**體現出核心原理

self.__lines[i]=v;

self.body.push('\ttemp.push(this.__lines['+(i++)+']);\n');

之前的版本是這樣的

self.body.push('\ttemp.push(\"'+v.replace(/\n|\t/g,'')+'\");\n');那麼變數v必須得轉義一次了(此步操作之前就得轉義)。

該模板優點:

1.模板採用js語法,沒有學習成本

2.也是由於優點1所以該模板的解析速度還是很佔優勢的

3.可以自定義模板分隔符,就算是與js語法衝突的}都沒有問題,避免了和後端模板分隔符衝突的風險

4.引入helper機制,避免影響全域性變數

5.內建快取,每個模板只會編譯一次,生成的模板函式會對其快取

//helper機制的使用

var tpl = template(options, helper);

options是乙個物件,有以下屬性

tpl 必選 待解析的模板字串

left 可選 左分隔符 預設 }

data 可選 要渲染的資料  如果在這個地方不傳入的話  可以在呼叫tpl.render時傳入

helper是乙個物件,裡邊必須為函式

比如

,

handle:function(data)

}

以下是該模板引擎核心**

(function(w);

function template(options,helper)

template.parse=function(self)

var temp,i=0;

if(self.right=="}}")}}造成的bug!

temp=self.tpl.replace(/(}})([^}])/g,"$1 $2").split(new regexp('(?='+self.left+')|('+self.right+')(?:[^}])'))

}else

temp.filter(function(k,v)).each(

function(k,v)else

}else

})return self.body.join("");

};template.prototype=}";

this.body=;

this.compiled=null;

this.data=options.data;

this.helper=helper;

},compile:function()

}this.compiled=new function("data",helper.join(";")+';var temp=;\n'+template.parse(this)+'\n return temp.join("");');

}return this.compiled;

},render:function(data)

}})(this);

array.prototype.filter=function(fn)

temp.push(this.__lines[6]);

if (data.b == 100) else

temp.push(this.__lines[10]);

for (var i = 0, l = data.song.length; i < l; i++)

temp.push(this.__lines[16]);

for (var i = 0, l = data.url.length; i < l; i++)

temp.push(this.__lines[19]);

return temp.join("");

}

IPV4的V6表示法

ipv4的v6表示法 為在混合網路環境下,確保ipv4和ipv6節點間的相容性,ipv6 位址提供了組合了冒號與帶點表示法,可將 ipv4 位址嵌入到 ipv6 位址中。對最左邊 96 個位指定十六進製制值,對最右邊 32 個位指定十進位制值,來指示嵌入的 ipv4 位址。這兩種型別的 ipv6 位...

FreeRTOS在MDK中使用V6編譯器的注意事項

1.mdk預設使用的v5編譯器,freertos呼叫的埠配置資訊是rvds資料夾中的 切換到v6編譯器,需要將gcc資料夾中的資訊拷貝到rvds中,進行替換 無需其他修改 2.在freertos系統中時鐘lwip功能,且使用mdk的v6編譯器 需要做如下修改 a.cc.件中的 define lwip...

使用js模板引擎心得

最近幾年隨著web開發前後端分工越來越細,同時mvc mvp模式大行其道,js模板引擎也越來越流行了 js模板引擎很多,我經常用的是arttemplate jsviews這兩個模板引擎,12306用的就是jsviews arttemplate 特性 效能卓越,執行速度通常是 mustache 與 t...