日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Nodejs下的ES6兼容性与性能分析

發布時間:2025/3/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nodejs下的ES6兼容性与性能分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

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

一、Nodejs下ES6兼容性現狀

??之前寫了es6通過Babel編譯后的在瀏覽器端的兼容性問題《Babel下的ES6兼容性和規范》,隨著范圍的擴展,ES6在Nodejs上兼容性也有必要重新梳理下。 ??隨著iojs的引入,新版的Nodejs開始原生支持部分ES6的特性,既然ES6在瀏覽器端使用需要使用babel等編譯,在Nodejs總可以放心使用了吧。然而事實并非如此,為此在nodejs端,我也做了特性兼容性研究:

ES6新特性在Nodejs下的兼容性列表 這里羅列下nodejs支持的新特性,沒列出的新特性均為不支持。

https://iojs.org/en/es6.html https://kangax.github.io/compat-table/es6/

ES6特性Nodejs兼容性
let,const,塊strict模式支持
class類strict模式支持
Map,Set 和 WeakMap,WeakSet支持
generators支持
進制轉換支持
對象字面量擴展支持
promise支持
String對象新API支持
symbols支持
字符串模板支持

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

二、Nodejs ES6性能分析

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

1,對于重復操作循環執行100萬次 2,所有程序運行在Nodejs下執行 3,環境描述

  • CPU: Interl(R) Core(Tm) i5-3470 CPU @ 3.2GHz
  • 內存:4.00GB
  • 操作系統: 64位操作系統
  • node版本:node v5.1.1

2.1、let, const, 塊

'use strict' let i = 0; let t1 = +new Date(),t2;while(i++ < 1000000){const a = 1;const b = '1';const c = true;const d = {};const e = []; }t2 = +new Date() - t1; console.log(t2); 運行次數ES5運行時間ES6運行時間
100萬52-53ms33-34ms

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

2.2、class類使用

'use strict' let i = 0; let t1 = +new Date(),t2;while(i++ < 100000){class A{constructor() {this.name = 'ouven';}getName(){return this.name;}}const a = new A();a.getName(); }t2 = +new Date() - t1; console.log(t2); 運行次數ES5運行時間ES6運行時間
10萬1179-1211ms1411-1442ms

可見使用Nodejs的Class比ES的function構造方法慢約25%

2.3、Map,Set 和 WeakMap,WeakSet

'use strict' let i = 0; let t1 = +new Date(),t2;while(i++ < 1000000){let map = new Map();map.set('key','value'); }t2 = +new Date() - t1; console.log(t2); 運行次數ES5運行時間ES6運行時間
100萬11-13ms179-180ms

測試結果看,Map的效率相對普通的對象key-value的結果相比慢的多,但是Map的Key可以使負責類型,這里的參考性也就不是絕對準確。建議是不到必須情況,不要使用Map等復雜類型。Set、WeakMap、WeakSet均相對object結構執行效率慢得多。

2.4、字符串模板

'use strict' let i = 0; let t1 = +new Date(),t2;let vars = {name: 'ouven',address: 'tencent' };while(i++ < 1000000){let str = `string text ${vars.name} string ${vars.address}`;}t2 = +new Date() - t1; console.log(t2); 運行次數ES5運行時間ES6運行時間
100萬8ms59-61ms

ES6的字符串模板看起來很好,但是由于執行時必須掃描這個串,找出里面的模板變量,所以整體上性能就相對ES5的字符串拼接慢了很多。

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

測試用例代碼地址

三、小結

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

??https://github.com/ouvens/ecmaScript-2015-babel-rules

原文鏈接:https://ouvens.github.io/frontend-javascript/2015/12/06/es6-in-nodejs.html

轉載于:https://my.oschina.net/zhangstephen/blog/541276

總結

以上是生活随笔為你收集整理的Nodejs下的ES6兼容性与性能分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。