JavaScript为什么快--第一篇?-阿里云开发者社区

开发者社区> 秦粤> 正文

JavaScript为什么快--第一篇?

简介: V8让JavaScript更快的秘密;V8的JavaScript执行管道;TurboFan&Ignition
+关注继续查看

为啥升级了NodeJS版本,速度会提升?
为啥NodeJS代码启动时那么慢,运行起来了会变快?
V8 JIT是啥?

前言

V8的产品定义:Speed up real-world performance for modern JavaScript, and enable developers to build a faster future web.

最近看了V8核心小组3个视频,感觉很有价值,做一次搬运工(英语好的同学可以自行观赏),我计划将3个视频分为3篇文章来:

后语

先将结论放出来:

V8的执行管道架构图
20180802165521

  1. V8语法解析阶段:

    • JS的语法解析速度: 大约1MB/s;400k的JS代码,语法解析就需要~370ms
    • 可以通过,检查你代码的语法解析时间

      `(function eager(){...})();`
    • 运行的代码尽量少:-)
  2. V8编译阶段:

    • 尽量写"静态类型"的代码
    • WebAssembly 使用了TurboFan
  3. V8 JS编码:

    • Async/Await(4.5x) 比 Generators(2.5x) 快几乎2倍
    • ES2015的速度越来越接近ES5
  4. V8 for NodeJS:

    • 异步调试代码: node --inspect app.js && chrome://inspect/#devices
  5. V8 for browser:

    • Coverage功能,检查运行代码的覆盖率

第一篇:why V8? - V8产品经理的描述

作为第一篇,我们先看看V8的产品经理是怎么看待V8引擎的。
全局介绍V8的代码执行管道的架构。

V8的衡量标准

作为JS引擎,不光要考虑性能攀升,还需要考虑启动速度,内存使用率。V8的产品经理给出了他们衡量V8引擎的模型和V8的使用场景。

15330463815201

  • 场景一:
foo(42);

执行只有一个函数;期望快速启动语法分析并且编译运行;

15330466656961

  • 场景二:
for (var i=0; i<10000; i++) {
    foo(i);
}

执行一万次foo函数;在PC浏览器/NodeJS服务器中,期望高性能运行foo函数;

15330471714177

执行一万次foo函数;在手机浏览器/NodeJS IoT设备中,期望低内存,较高性能运行foo函数;

15330473856911

V8的执行管道

V8到底怎么做到在快速启动/性能巅峰,低内存/高优化内存的各个档位之前任意切换的呢?

20180802165521

TurboFan(涡轮增压)

V8的优化编译器,积累了3年以上

  • 用于提升代码性能
  • 支持并优化Es2015+特性
  • WebAssembly的后台

Ignition(点火器)

占用少量内存,快速启动

  • 原先设计用于低内存的设备,现在用于所有平台节省内存;
  • 快速生成二进制代码,提升页面启动速度;
  • 结合TurboFan使快速启动和性能优化更简单;

Ignition+TurboFan

2017年全新的JavaScript pipeline

  • JS代码更快
  • 更少内存
  • 更全新的性能提升
  • 更适合NodeJS
  • 不再拖欠JS新增功能
  • 重写内置函数(高达4倍提速)

Orinoco

几乎平行并发的压缩算法GC

  • 平行压缩,平行指针更新,避免新旧生代频繁更新提升页面速度,并发交换
  • 马上支持:并发标记

Speedometer2

V8用于的更适合测试JS的benchmarks

  • 测试流行MVC框架的最新版本TodoList
  • 几乎(谦虚)是最好的浏览器benchmarks

优化ES2015

  • Generators提升2.5倍速度
  • Async/Await提升4.5倍速度
  • Promise提升4倍速度

V8 love NodeJS

V8是NodeJS委员会的核心成员,持续提升优化NodeJS的性能

AcmeAir benchmark

NodeJS的benchmark

Node + DevTools

更容易调试NodeJS的代码

  • 启动时加--inspect参数node --inspect index.js
  • 通过chrome地址栏的about:inspect链接调试node代码
  • 支持异步调试,profiling和更多功能

Code Coverage功能

查看哪些代码没有被执行

WebAssembly

安全跨浏览器的原生代码

  • Chrome和FireFox支持,未来包括:Edge和Safari
  • 通过Emscripten toolchain编译C/C++到web
  • 未来计划:更好的性能;更容易从Response object实例化;支持共享ArrayBuffers(Chrome 60)

小结

JavaScript的执行性能,依赖环境和上下文。
Ignition+TurboFan+Webassambly,可以让V8在快速启动/性能巅峰;低内存/高优化内存;各个档位之前任意切换;
15331203923751

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10012 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2500 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9154 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13810 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4483 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7335 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
22363 0
+关注
秦粤
Ex百度Phper,Now阿里Noder
5
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载