11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

  • 2019-08-10
  • 本文字数:1942 字

    阅读完需:约 6 分钟

谷歌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-08-10 08:0010326
用户头像

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

关注

评论

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

聊一聊在阿里做了 8 年研发后,我对打造大型工程研发团队的再思考

尔达Erda

开源 云原生 研发管理 PaaS 研发

Abp太重了?轻量化Abp框架

Patronum

学习 程序员 架构 框架 Abp

Unity ML-agents 参数设置解明

行者AI

2021,你还在写“赤裸裸”的API吗?

【云洲智造】直播间下午4:30准时开播!

浪潮云

工业互联网

iOS底层面试题(中篇)

程序员 面试 iOS底层

Java虚拟机之CMS垃圾收集器

保安小王分享:四面字节跳动,终拿Offer,只有努力,方能成功

东京奥运会与网络安全背后的速度博弈!

郑州埃文科技

基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)

尔达Erda

开源 云原生 数字化转型 PaaS 数字化

Qunar容器平台网络之道:Calico

Qunar技术沙龙

容器 TCP/IP calico BGP #Kubernetes#

终于有人把大数据架构讲明白了

百度开发者中心

大数据 最佳实践 方法论 其他

2021秋招我这样准备,提前批就已经拿到了9个大厂offer

北游学Java

Java 面试 秋招

看完这篇文章,你也可以手写MyBatis部分源码(JDBC)

不收藏你就后悔吧!费了三天才从GitHub上扒下的阿里Java优化笔记

架构训练营模块三作业

晨晨

架构训练营

银行4.0的AI世界——开启算法力的时代

索信达控股

Linux-通过 liveCD 进入救模式-重装 grub 修复损坏的系统

学神来啦

Linux 运维 linux运维 linux学习

一夜爆火!完美贴合开发实际!阿里SpringBoot宝典助你面试超神

Java 编程 程序员 架构师 计算机

客户端版本热更新

admin

Electron 热替换 客户端 小版本升级 热更新

模块三作业

NewBranSTONE

架构实战营

Redis 关键点思维导图

康斯坦丁

保洁阿姨分享:腾讯架构师JDK源码笔记,13万字,带你飙向实战

淘宝商城的系统架构,是如何一步步突破“亿”级并发的?

Java架构师迁哥

Lazada首届技术开放日开麦在即 共享技术创新最佳实践

EMQ X Cloud 正式支持 Microsoft Azure 平台,助力企业出海业务

EMQ映云科技

azure 云端 云上数据 emq

文档内容结构化在百度文库的技术探索

百度Geek说

百度 大前端

谷歌V8 JavaScript引擎7.4到7.6版本带来大量改进_前端_Dylan Schiemann_InfoQ精选文章