宝哥软件园

在节点中使用es6/7/8(支持和性能)

编辑:宝哥软件园 来源:互联网 时间:2021-08-26

前言

随着近几年react和vue的快速发展,越来越多的前端开始谈论es6代码在项目中的应用,因为我们可以通过babel将其翻译成较低版本的js,这样它就可以在所有浏览器中运行,比如import、export、let、arrow函数等。对于节点端,我们当然也希望使用这些高级语法,但是我们需要提前知道节点支持哪些新语法。

分类

所有es6功能分为三个阶段/类别:

Shipping - v8引擎可以很好的支持。默认情况下,我们可以不设置任何标志直接运行。分阶段-这些是即将完成的新功能,但它们还不能被v8引擎支持。运行时标志:-需要和谐。进行中-这些功能最好不要使用,因为很有可能在未来被放弃,具有不确定性。那么nodejs版本默认支持哪些特性呢?

可以看到一些常用的es6语法得到了node很好的支持,因为node的最新版本是6.11.2,是推荐的版本,最新版本已经达到了8.3.0。

因此,当我们在节点端编写es6语法时,大部分都可以直接使用。但是es7/8的特性目前还没有得到很好的支持。

哪些功能正在开发中?

v8发动机不断增加新功能。一般来说,它们有望被添加到最新的v8发动机中,尽管我不知道是什么时候。

您可以通过raining列出所有正在进行的功能,即使用- v8-options参数。值得注意的是,这些功能并不兼容,所以要谨慎使用。

表演

Es6是大势所趋。我们不仅需要知道它的特性的兼容性,还需要知道它的早期性能。现在我们可以比较节点上es5和es6的运行时间。

块级范围

Es5测试:

var I=0;var开始=新日期(),持续时间;而(I 100000000){ var a=1;var b=' 2var c=真;var d={ };var e=[];}持续时间=新日期()-开始;Console.log(duration)已经测试了几次,耗时分别为11972/11736/11798

Es6测试:

设I=0;让开始=新日期(),持续时间;while(I 1000000000){ const a=1;const b=' 2const c=真;const d={ };const e=[];}持续时间=新日期()-开始;Console.log(duration)经过多次测试,耗时分别为11583/11674/11521。

在这方面使用es6语法要快一点。

班级

Es5语法

var I=0;var开始=新日期(),持续时间;function Foo(){;this . name=' Wayne ' } Foo . prototype . getname=function(){ return this . name;} var foo={ }while(I 10000000){ Foo[I]=new Foo();foo[i]。getName();}持续时间=新日期()-开始;Console.log(时长)已经过测试,分别需要2030/2062/1919ms。

Es6语法:

注意:因为我们这里只测试类,两者都用var来声明变量,也就是单变量原理。

var I=0;var开始=新日期(),持续时间;class Foo { constructor(){ this . name=' Wayne ' } getName(){ return this . name;} } var foo={ }while(I 10000000){ Foo[I]=new Foo();foo[i]。getName();}持续时间=新日期()-开始;经过三轮测试,console.log(duration)的结果为2044/2129/2080,说明两者在速度上几乎没有差别。

与es5代码相比,4.x版本的node运行es6代码非常慢,但现在使用node 6 . 11 . 2版本运行es6代码已经和运行es5代码一样快了,这说明node对于新特性的运行速度有了很大的提升。

地图

Es5语法:

var I=0;var开始=新日期(),持续时间;while(I 100000000){ var map={ };map[' key ']=' value ' } duration=new Date()-start;Console.log(duration)运行五次,结果分别为993/858/897/855/862

Es6语法:

var I=0;var开始=新日期(),持续时间;while(I 10000000){ var Map=new Map();map.set('key ',' value ');}持续时间=新日期()-开始;Console.log(duration)已经测试了几次,耗时10458/10316/10319。也就是说,es6中Map的运行时间是es5的10倍以上,所以我们最好在节点环境中少用Map语法。

模板字符串

Es5语法:

var I=0;var开始=新日期(),持续时间;var person={ name: 'wayne ',age: 21,school : ' xjtu ' } while(I 100000000){ var str='你好,我是' person.name ',我是' person.age '岁,我来自' person.school}持续时间=新日期()-开始;测试console.log(时长)后,可以发现时间分别为2396/2372/2427

Es6语法:

var I=0;var开始=新日期(),持续时间;var person={ name: 'wayne ',age: 21,school : ' xjtu ' } while(I 100000000){ var str=`你好,我是${person.name},我是${person.age}岁,我来自$ { person . school } `;}持续时间=新日期()-开始;测试console.log(时长)后可以发现,耗时分别为2978/3022/3010。

经计算,es6语法的耗时约为es5语法的1.25倍。因此,尽量减少节点端模板字符串的使用。如果大量使用,显然需要很多时间。

箭头功能

Es5语法:

var I=0;var开始=新日期(),持续时间;var func={ };while(I 10000000){ func[I]=function(x){ return 10 x;} }持续时间=新日期()-开始;测试console.log(时长)后发现,耗时分别为1675/1639/1621。

Es6语法:

var I=0;var开始=新日期(),持续时间;var func={ };while(I 10000000){ func[I]=(x)=10 x } duration=new Date()-start;测试console.log(时长)后发现,耗时分别为1596/1770/1597。

也就是arrow函数的运行速度和es5一样,用es6写比较方便,所以推荐使用,我们可以直接使用。

摘要

在节点端使用es6很好。对于普通类,有let、arrow函数等。速度堪比es5,但是写起来比较方便,建议使用。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+