首页 > 编程语言 >JavaScript 引擎 V8 年度回顾:新编译器、修改基础架构、改进 GC……

JavaScript 引擎 V8 年度回顾:新编译器、修改基础架构、改进 GC……

时间:2023-12-16 20:12:40浏览次数:43  
标签:WebAssembly JavaScript 改进 编译器 引擎 基础架构 V8

V8 官方博客回顾了 2023 年的重要变化:通过创新的性能优化,V8 不断突破 Web 领域的可能性界限。比如引入新的中间层编译器,对顶层编译器基础架构、运行时和垃圾回收进行多项改进,从而全面提升速度。

除了性能改进之外,V8 团队还为 JavaScript 和 WebAssembly 添加了许多新功能。比如通过 WasmGC 将支持垃圾回收的编程语言用于 Web 开发(Chrome 支持运行 Kotlin、Java 等 GC 编程语言)。

此外还改进了沙箱基础设施,并为 V8 引入了控制流完整性 (CFI),为用户提供了更安全的环境。

V8 2023 重磅新特性回顾

  1. 新的中间层编译器 Maglev:Maglev 是 V8 引擎的新中间层编译器,它的推出使得代码的优化速度大大提高。相比于现有的编译器,Maglev 的编译速度快了 10 到 100 倍,并且在 JetStream 和 Speedometer 等性能测试中取得了 8.2% 和 6% 的性能提升。

  2. 新的顶层优化编译器架构 Turboshaft:V8 引擎还引入了 Turboshaft,这是一个用于顶层优化编译器的新内部架构。使用 Turboshaft 后,编译速度提高了一倍,这有助于节约能源并为未来的性能提升奠定基础。

  3. 更快的 HTML 解析器:V8 团队对 HTML 解析器进行了优化,这导致 Speedometer 测试分数提高了 3.4%。这些变化也被 WebKit 项目采纳,从而对 Chrome 浏览器的性能产生了积极影响。

  4. 更快的 DOM 分配:V8 团队还对 DOM 对象的内存分配策略进行了优化,这使得 DOM 对象的分配速度提高了 3 倍,并在 DOM 密集型测试中取得了显著的改进。

  5. 新的 JavaScript 特性:V8 引擎还推出了一系列新的 JavaScript 特性,包括可调整大小的 ArrayBuffers、ArrayBuffer 传输、String isWellFormed 和 toWellFormed 等。

  6. WebAssembly 更新:V8 引擎为 WebAssembly 引入了多个新特性和性能优化,包括对多内存的支持、尾调用、放松的 SIMD 等。

  7. WebAssembly 垃圾回收:V8 引擎最终实现了 WebAssembly 垃圾回收(WasmGC),这使得可以将使用 Java、Kotlin、Dart 等垃圾回收语言编写的应用程序编译为 WebAssembly,从而提高了其运行速度。

  8. 安全增强:V8 引擎还在安全方面进行了改进,包括改进了沙箱基础设施、引入了控制流完整性(CFI)等。

标签:WebAssembly,JavaScript,改进,编译器,引擎,基础架构,V8
From: https://www.cnblogs.com/lzhdim/p/17907257.html

相关文章

  • JavaScript: WebGL3D
    fragment.bns 文件用NotePad打开 WebGL3D用tomcat浏览#version300esprecisionmediumpfloat;uniformfloatuR;invec3vPosition;//接收从顶点着色器过来的顶点位置invec4finalLight;//接受顶点着色器传过来的最终光照强度outvec4fragColor;voidmain(){......
  • 前端JavaScript中,对obj对象进行劫持的方式主要有以下几种:
    前端JavaScript中,对obj对象进行劫持的方式主要有以下几种:原型劫持:通过改变对象的原型(prototype)来实现劫持。当一个对象被创建时,它的原型会被存储起来,以便在需要时进行查找。通过将一个对象的原型改为另一个对象或null,可以控制该对象的属性和方法。属性访问劫持:通过在属性访问时......
  • JavaScript
    您只能在HTML输出中使用document.write。如果您在文档加载后使用该方法,会覆盖整个文档。HTML输出流中使用document.write,相当于添加在原有html代码中添加一串html代码。而如果在文档加载后使用(如使用函数),会覆盖整个文档。Javascript脚本代码可被放置在HTML页面的 <body>......
  • JavaScript 浏览本地文件夹
    1.JavaScript浏览本地文件夹button.onclick=asyncfunction(){//给按钮绑定事件try{consthandler=awaitshowDirectoryPicker(//{//mode:'readwrite',//指定读写模式:读/读写//startIn:'documents'//......
  • JavaScript-IndexedDB API
    概述随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。现有的浏览器数据储存方案,都不适合储存大量数据:Cookie的大小不超过4KB,且每次请求都会发送回服务器;LocalStorage在2.5MB到10MB之间(各家浏览器不......
  • javascript怎么实现文件上传和下载功能
    在现代Web开发中,文件上传和下载是经常遇到的需求。JavaScript作为前端开发的语言之一,提供了许多强大的工具库和API来管理文件上传和下载的过程。本文将探讨如何使用JavaScript实现文件上传和下载的功能,首先介绍基于HTML5的FileAPI,然后使用jQuery和XMLHttpRequest......
  • 【天翼云】【基础架构】相关面试内容普及
    第一弹,我们就讲讲中国电信天翼云的基础架构做什么滴?天翼云是中国电信旗下云计算品牌,致力于成为领先的云计算服务提供商。基础架构部作为天翼云的核心部门,负责构建天翼云的整个物理基础设施。打造了包括紫金DPU、物理服务器、物理网络、RDMA网络、操作系统、虚拟化、IDC在内的核心......
  • 2023-12-15 保存文件会生成一个dist包 ==》编译器配置冲突问题
    如题,每次保存文件都会生成个dist包,这个包有时候后会阻碍程序运行,所以必须要解决!在一番排查下,发现是编译器的问题,我原来用的是vscode,换成hbuildex后就不会生成了,我之前还怀疑是终端的问题,然后我在vscode保存文件,用其它终端(powershell)运行项目,结果还是生成了dist包,所以可以确定是v......
  • 浏览器中的编译器和解释器
    之所以存在编译器和解释器,是因为机器不能直接理解我们所写的代码,所以在执行程序之前,需要将我们所写的代码“翻译”成机器能读懂的机器语言。按语言的执行流程,可以把语言划分为编译型语言和解释型语言。编译型语言在程序执行之前,需要经过编译器的编译过程,并且编译之后会直接保留机器......
  • JavaScript Library – Lit
    前言我写过一篇关于Lit的文章,MaterialDesign,AngularMaterial,MDC,MWC,Lit的关系。如今material-webMWC已经发布1.0了,估计Angular也会在不远的将来从material-components-webMDC迁移到MWC。以后,我们要想深入理解AngularMaterial就必须对MWC有一定了解......