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

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中比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);

结果让我震惊了,使用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);

可见使用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);

测试结果看,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);

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://www.oschina.net]

时间: 2024-10-01 23:47:07

Nodejs下的ES6兼容性与性能分析的相关文章

深入了解xhprof性能分析工具

前言 这篇文章不是教你如何安装使用xhprof进行性能分析.如果想了解如何安装使用xhprof,网络上文章很多,你也可以看我之前写的两篇文章.非侵入式监控PHP应用性能监控分析xhprof gui,让xhprof界面更漂亮,功能更强大 这篇文章主要介绍使用xhprof时的一些常见问题,和xhprof是如何实现性能分析的. 常见问题 多次调用xhprof_enable方法,最后生效的配置是哪个? 当你在一次请求中多次调用xhprof_enable方法,只有第一次调用时进行的设置能生效.在调用xhp

PHP swoole 和 nodeJs性能分析

js出了个nodejs,我们技术老大前段时间发了个技术邮件说php支持多线程,异步,非阻塞 还打着旗号说要灭掉nodejs,官方网站上说swoole的性能已经最少也和nodejs可以媲美了,这个需要用数据说话,周末的时候有空就顺手测试了一下这两个东东!下面是测试报告哈. 首先我用127.0.0.1:8000端口测试swoole, 用127.0.0.1:1337测试nodejs 有图有真相:(稍后传,不会用mac把截图保存!汗!各位看客有谁会的教教我哈!编程都变傻了) 测试环境: 处理器:2.7G

Linux系统下常见性能分析工具的使用

在前面的文章中,我简单介绍了影响linux性能的几个方面以及如何解决这些方面的问题,但是如何才能从系统上发现是某个方面或某几个方面出现问题了呢,这就需要使用linux系统提供的几个常用性能分析工具,下面就具体讲述这几个常用性能分析工具的使用. 1.vmstat命令 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多linux发行版本都默认安装了此命令工具,利用vmstat命令可以对操作系统的内存信息.进程状态.CPU活动等进行监视,不足之处是无法对某个

linux下性能分析方法实例

比较老了~不过可以学习学习分析过程~~ 某一天,一个客户打电话来需要技术帮助,并抱怨平常15秒就可以打开的网页现在需要20分钟才可以打开. 具体系统配置如下: RedHat Enterprise Linux 3 update 7 Dell 1850 Dual Core Xenon Processors, 2 GB RAM, 75GB 15K Drives Custom LAMP software stack(译注:Llinux+apache+mysql+php 环境) 性能分析之步骤 1. 首先

PHP 性能分析(三): 性能调优实战

在本系列的 第一篇 中,我们介绍了 XHProf .而在 第二篇 中,我们深入研究了 XHGui UI, 现在最后一篇,让我们把 XHProf /XHGui 的知识用到工作中! 性能调优 不用运行的代码才是绝好的代码.其他只是好的代码.所以,性能调优时,最好的选择是首先确保运行尽可能少的代码. OpCode 缓存 首先,最快且最简单的选择是启用 OpCode 缓存.OpCode 缓存的更多信息可以在 这里 找到. 在上图,我们看到启用 Zend OpCache 后发生的情况.最后一行是我们的基准

SQL点滴27—性能分析之执行计划

原文:SQL点滴27-性能分析之执行计划 一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把.   这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划.   缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:   

PHP 性能分析与实验——性能的宏观分析(1)

[编者按]此前,阅读过了很多关于 PHP 性能分析的文章,不过写的都是一条一条的规则,而且,这些规则并没有上下文,也没有明确的实验来体现出这些规则的优势,同时讨论的也侧重于一些语法要点.本文就改变 PHP 性能分析的角度,并通过实例来分析出 PHP 的性能方面需要注意和改进的点. 对 PHP 性能的分析,我们从两个层面着手,把这篇文章也分成了两个部分,一个是宏观层面,所谓宏观层面,就是 PHP 语言本身和环境层面,一个是应用层面,就是语法和使用规则的层面,不过不仅探讨规则,更辅助以示例的分析.

性能分析工具的使用

 性能规划器的使用     性能规划器(Capacity Planner)是集成在Oracle 企业管理包(Oracle Enterprise Management Packs)中用来对反映系统性能的参数进行收集的工具,可以指定要收集的数据.收集数据的频率和数据装载到Oracle Capacity Planner历史记录数据库的时间.这样便于管理员对一定时间范围内的系统性能参数进行比较分析.    1. 性能规划器的设置    (1)在服务器的桌面选择[开始]/[程序]/[Oracle-OraH

开发人员需知:HTML5性能分析面面观

以下这篇文章是由一位名为张黎明的IT技术人员所写,其发表于InfoQ的网页上.这次他在全文里面从9个不同的方面分析HTML5的性能,还是很值得相应的开发人员阅读的. 从性能角度来说,HTML5首先是缩减了HTML文档,使这件事情变得更简单.第一,从用户可读性上说,原先一大堆东西,像初学者第一次看到这些东 西是看不懂的,而HTML5的声明方式对用户来说显然更友好一些. 第二,文档编码的声明,用HTML5方式的话,就很简单.很多人问HTML5是什么?我们说可以先用HTML5的方式就是把DOCTYPE