你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

谷歌 V8 JavaScript 引擎 7.4 到 7.6 版本带来大量改进

2019 年 8 月 10 日

谷歌V8 JavaScript引擎7.4到7.6版本带来大量改进

最近,谷歌 V8 JavaScript 引擎 7.4、7.5 和 7.6 版本增加了一些 WebAssembly 特性和 JavaScript 性能改进。


V8 7.4 还增加了 WebAssembly Threads/Atomics。Threads/Atomics 最初作为 V8 7.0 的实验性特性,允许在多核架构上使用 WebAssembly,支持 Web 的计算密集型进程。


Chrome 75 为 WebAssembly 添加了隐式缓存,允许从缓存中提取已经编译好的 WebAssembly 模块,而不是根据每个视图重新编译。V8 的非 Chromium 用户也可以使用 Chromium 提供的隐式缓存方案。


V8 7.5 版本支持 WebAssembly 的大块内存提案,该提案提供了更新大内存块或表的新指令。


V8 7.4 增加了对ECMAScript私有类字段语法的支持,这些字段在类之外不可访问。


数值分隔符是一个新的特性提案,预计将在 ES2020 中实现,但现在 V8 7.5 已经支持该特性,使人类可以更容易地查看非常大的数字字面量。


V8 7.4 还增加了对Intl.Locale的支持,Intl.Locale 是ECMA-402国际化规范的一部分,为管理地区和有效提取特定于地区的首选项提供了更健壮的机制。


V8 7.6 改进了 Intl.DateTimeFormat,提供了 formatRange 和 formatRangeToParts 方法,可以更容易地以特定于语言环境的方式格式化日期范围,还可以添加 timeStyle 和 dateStyle 选项。


Promise.allSettled(promises)是 V8 7.6 中添加的一个新的 JavaScript 语言特性。当所有 promise 都完成(完成或拒绝)时,这个方法会发出信号。


现在,V8 7.6 的 toLocaleString 方法和 Intl.NumberFormat API 都支持 BigInt。


V8 的最新版本对 JavaScript 的性能做了一些改进。


V8 7.6 引入了大量与 JSON.parse 有关的更新,并提供高达 2.7 倍的解析速度提升。主要的变化是从递归式解析模型到迭代式解析的转变。以前,在解析嵌套很深的 JSON 数据时,V8 可能会将栈耗尽,而现在 V8 只受可用内存的限制。新的 JSON 解析器通过优化缓冲属性提高了内存效率。


V8 7.4 的改进为参数不匹配的调用提供了更快的调用速度。JavaScript 允许使用比正式声明更少(应用不足)或更多(过度应用)的参数来调用函数。在应用不足的场景中,形参被赋值为 undefined,而在过度应用的场景中,则会忽略额外的参数。由于 JavaScript 函数可以通过 arguments 对象、rest 参数等访问实际参数,V8 通过 arguments 适配器提供了对实际参数的访问。现在,V8 确定了一些不需要进行这种调整的场景(例如,callee 是一个严格的模式函数),从而减少了高达 60%的调用开销。


在 V8 7.4 中,通过 get 函数直接调用本地访问器比通过较慢的代码路径进行单态或超态属性访问要慢得多。V8 通过调用本地访问器提高了性能。


Chrome 在下载大型脚本时会在工作线程上对其进行流式解析。V8 7.4 修复了使用 UTF8 解码的脚本的性能问题,平均提高了 8%的解析速度。此外,在解析过程中会对属性名进行去重。修复这个问题额外提高了 10.5%的解析器性能,同时也提高了小型非流式脚本和内联 JavaScript 的解析速度。


在 Chrome 75 中,V8 直接将脚本从网络加载到流解析器中,而不是等待 Chrome 主线程来处理。这个变更改进了 JavaScript 的解析性能,并减少了并发流解析任务的数量,进一步减少了内存消耗。


V8 7.6 改进了数组 indexOf、包含、延展和应用调用方面的性能,这篇文章提供了更多相关细节。


V8 现在提供了一种无JIT模式,可以在不分配运行时内存的情况下执行 JavaScript。通常,V8 依赖于在运行时分配和修改可执行内存,这让 V8 速度变得很快。但有些平台,如 iOS、智能电视和游戏机,不允许非特权应用程序访问可执行内存,可能是为了减少应用程序的漏洞。从 V8 7.4 开始,通过–jitless 标志将 V8 切换到解释器模式,可以在没有运行时分配可执行内存的情况下执行 JavaScript。WebAssembly 目前不支持无 JIT 模式。


V8 7.4 增加了字节码冲刷功能,通过在垃圾回收期间冲刷不经常被执行的函数字节码来减少 V8 的内存开销。这个变更减少了 5-15%的堆内存使用,而不会降低性能或显著增加编译 JavaScript 的 CPU 时间。


V8 7.4 还改进了无效字节码的消除。V8 团队解释道:


虽然我们并不期望这会对用户代码有多大影响,但它对于简化各种解调(如生成器、for-of 和 try-catch)特别有用。


在 V8 7.6 中,Unicode 字符串处理得到了显著的改进,比如 String#localeCompare、String#normalize 和各种国际化 API 调用。


谷歌每六周都会发布 V8 的分支版本,以配合谷歌 Chrome 的发布。V8 7.4随 Chrome 74 发布, 7.5随 Chrome 75 发布,7.6随 Chrome 76 发布。V8 还支持 Node.js JavaScript 运行时。


V8 是开源的,由于外部依赖关系,提供了几种许可协议。V8 托管在GitHub上,欢迎开发者参与贡献,但必须遵循 V8 的贡献指南和谷歌的开源行为指南


原文链接


V8 JavaScript Engine 7.4, 7.5, and 7.6 Adds Numerous Performance Improvements


2019 年 8 月 10 日 08:0010077
用户头像

发布了 731 篇内容, 共 375.5 次阅读, 收获喜欢 1878 次。

关注

评论

发布
暂无评论
发现更多内容

阿里大牛原创技术好文精选整理:Redis+Nginx+设计模式+Spring全家桶+SQL+Dubbo

Java架构之路

Java 程序员 面试 编程语言

架构师训练营第四周学习总结

Gosling

极客大学架构师训练营

第11周作业

Vincent

极客时间 极客大学

三步法解析Express源码

执鸢者

面试 前端 Node Express

来点不一样的: 精选200个Java技术面试真题,详解应聘Java程序员常见考点,在Github上标星89.6K

996小迁

编程 程序员 架构 面试

十三、深入Python字典和集合

刘润森

Python

十年 Java 开发经验,走了五年弯路,整理了一份 Java 架构师进阶路线及进阶资料!

Java成神之路

Java 编程 程序员 面试 编程语言

一文带你轻松了解Python导入模块的各种命令

计算机与AI

Python

架构师训练营第四周课后作业

Gosling

极客大学架构师训练营

分布式系统中的CAP、ACID、BASE概念

云流

编程 分布式

十四、深入Python条件和循坏

刘润森

Python

区块链要如何解决供应链金融痛点?

CECBC区块链专委会

区块链 金融

[周末荐片]Undercover Billionaire

亚伦碎语

生活

Java进阶架构师面试手册:核心框架篇整理,助我斩获65W架构师Offer!

Java架构追梦

Java 学习 架构 面试 框架

第11周总结

Vincent

极客时间 极客大学

微服务已成Java开发的面试门槛,你连SpringCloud都不会怎么涨薪

Java架构之路

Java spring 编程 程序员 面试

Redis - redis.conf - 中文翻译

学个球

redis 缓存 翻译

面试多次被拒,‘两个月’61天,我收到了蚂蚁金服P7级的offer

周老师

Java 编程 程序员 架构 面试

马化腾的区块链理想

CECBC区块链专委会

区块链 马化腾

第四周 系统架构作业

钟杰

极客大学架构师训练营

iOS底层原理之—dyld与objc的关联

iOSer

ios ios开发 iOS Developer dyld objc

COSCon'20 & Apache Roadshow 来了,数据技术专场欢迎您

海豚调度

学习笔记丨数据结构与算法之贪心算法

Liuchengz.

贪心算法

网上赌被黑系统维护出不了款怎么办

其实很简单

互联网 网络安全 信息安全 网络

Linux的信号

菜鸟小sailor 🐕

c++

Flink时间服务和计时器-6-5

小知识点

scala 大数据 flink

轻量级业务中台开发框架,以DDD思想为基础,融合中台核心要素,赋能中台建设

高鹏

中台 业务中台 DDD 框架 中台架构

SpringBoot整合Jpa项目(含Jpa 原生sql语句介绍)

小Q

Java 架构 微服务 springboot jpa

每周花6小时跟清华大牛马士兵学Java:多线程高并发、JVM调优、算法、设计模式等

Java架构之路

Java 程序员 面试 算法 编程语言

职场求生攻略答疑篇之 4 —— 社会有多真实,人心就有多虚伪

臧萌

职场 职场成长

大区块链的必然性

CECBC区块链专委会

区块链技术

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

谷歌V8 JavaScript引擎7.4到7.6版本带来大量改进-InfoQ