天天看點

Nodejs下的ES6相容性與性能分析

es6标準釋出後,前端人員也開發漸漸了解到了es6,但是由于相容性的問題,仍然沒有得到廣泛的推廣,不過業界也用了一些折中性的方案來解決相容性和開發體系問題,但大家仍很疑惑,使用es6會有哪些相容性問題。

一、nodejs下es6相容性現狀

  之前寫了es6通過babel編譯後的在浏覽器端的相容性問題《babel下的es6相容性和規範》,随着範圍的擴充,es6在nodejs上相容性也有必要重新梳理下。   随着iojs的引入,新版的nodejs開始原生支援部分es6的特性,既然es6在浏覽器端使用需要使用babel等編譯,在nodejs總可以放心使用了吧。然而事實并非如此,為此在nodejs端,我也做了特性相容性研究:

es6新特性在nodejs下的相容性清單 這裡羅列下nodejs支援的新特性,沒列出的新特性均為不支援。

Nodejs下的ES6相容性與性能分析

可見,es6的新特性在nodejs中比babel還要差,而新版的babel已經能夠支援es6的90%新特性了~

二、nodejs es6性能分析

  盡管目前node下使用es6我們仍然會大失所望,但es6發展的趨勢定是必然,這裡還是有必要對es6的原生性能做了詳細的對比測試。測試基本方法:

Nodejs下的ES6相容性與性能分析

結果讓我震驚了,使用let,const聲明變量的速度竟然比var快了約65%左右。原因可能是使用var會去檢查作用域上的同名變量,而使用let或const不用考慮。

Nodejs下的ES6相容性與性能分析

可見使用nodejs的class比es的function構造方法慢約25%

Nodejs下的ES6相容性與性能分析

測試結果看,map的效率相對普通的對象key-value的結果相比慢的多,但是map的key可以使負責類型,這裡的參考性也就不是絕對準确。建議是不到必須情況,不要使用map等複雜類型。set、weakmap、weakset均相對object結構執行效率慢得多。

Nodejs下的ES6相容性與性能分析

es6的字元串模闆看起來很好,但是由于執行時必須掃描這個串,找出裡面的模闆變量,是以整體上性能就相對es5的字元串拼接慢了很多。

其它的特性實作有興趣的同學可以自己繼續研究。相信結果大概可以預測到。

三、小結

  這裡選擇了es6中的少數特性和es5的實作的執行效率做了對比,整體上說,es6的新特性相對es5的實作效率慢些,而有些特性當然是es5無法實作的。是以在了解使用es6的同時,除了了解它的新特性和優點,對于es6本身的一些問題也要做到心中有數。當然,随着es6的完善和node的更新,相信這些也不會是大的問題,而且這些也不會影響es6的發展。

繼續閱讀