快捷搜索:  汽车  科技

javascript发展怎么样(JavaScript为什么快一)

javascript发展怎么样(JavaScript为什么快一)3. V8 JS编码:2. V8编译阶段:先将结论放出来:V8的执行管道架构图1. V8 语法解析阶段:

前言

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

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

  • 第一篇来源,V8小组的产品经理;V8 Advanced JavaScript & the Next Performance Frontier (Google I/O '17)第二篇来源,V8的语法解析;Parsing JavaScript - better lazy than eager?第三篇来源,V8的编译运行;How JavaScript Engines Work

后语

先将结论放出来:

javascript发展怎么样(JavaScript为什么快一)(1)

V8的执行管道架构图

1. V8 语法解析阶段:

  • JS 的语法解析速度: 大约1MB/s;400k的JS代码,语法解析就需要~370ms可以通过 chrome://tracing,检查你代码的语法解析时间 (function eager(){...})();运行的代码尽量少:-)

2. V8编译阶段:

  • 尽量写「静态类型」的代码WebAssembly 使用了 TurboFan

3. V8 JS编码:

  • Async/Await 比 Generators 快几乎1.5倍ES2015 的速度越来越接近 ES5

4. V8 for Node.js:

  • 异步调试代码: node --inspect app.js浏览器: chrome://inspect

5. V8 for browser:

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

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

作为第一篇,我们先看看 V8 的产品经理是怎么看待 V8 引擎的。

全局介绍 V8 的代码执行管道的架构。

V8的衡量标准

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

javascript发展怎么样(JavaScript为什么快一)(2)

V8的衡量模型

  • 场景一:

foo(42);

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

javascript发展怎么样(JavaScript为什么快一)(3)

场景一

  • 场景二:

for (var i=0; i<10000; i ) {

foo(i);

}

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

javascript发展怎么样(JavaScript为什么快一)(4)

场景二.1

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

javascript发展怎么样(JavaScript为什么快一)(5)

场景二.2


V8 的执行管道

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

javascript发展怎么样(JavaScript为什么快一)(6)

V8的执行管道架构图

TurboFan (涡轮增压)

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

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

Ignition (点火器)

占用少量内存,快速启动

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

Ignition TurboFan

2017年全新的 JavaScript pipeline

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

Orinoco (V8 GC)

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

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

Speedometer2 (V8 in-browser benchmarks)

V8 用于的更适合测试浏览器 JS 的 benchmarks

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

优化 ES2015

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

V8 love Node.js

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

AcmeAir benchmark

Node.js 的 benchmark

Node.js DevTools

更容易调试 Node.js 的代码

  • 启动时加--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 在快速启动/性能巅峰,低内存/高优化内存;各个档位之前任意切换。

javascript发展怎么样(JavaScript为什么快一)(7)

引擎 换挡



猜您喜欢: