V8 是 Google 发布的开源 JavaScript 引擎,采用 C++ 编写,在 Google 的 Chrome 浏览器中被使用。V8 引擎可以独立运行,也可以用来嵌入到 C++ 应用程序中执行。
JavaScript 引擎 V8 上周发布了最新版本 9.7,目前处于测试阶段。正式版本将在几周后随 Chrome 97 稳定版一起推出。9.7 版本带来了一些面向开发人员的特性,主要亮点包括: JavaScript findLast和findLastIndex数组方法 Array和TypedArray上的findLast和findLastIndex方法可以从数组的末端找到符合预定条件的元素。 例如: [1,2,3,4].findLast((el) => el % 2 === 0) // → 4 (last even element) 从 v9.7 开始,这些方法无需...
JavaScript 引擎 V8 发布了 8.6 版本(测试阶段),正式版本将在之后随 Chrome 86 一起推出。8.6 版本带来了一些面向开发人员的特性,主要亮点包括: JavaScript 开源 JS-Fuzzer JS-Fuzzer 一直是 V8 稳定性和安全性的基石,现在它开源了。 最近 V8 团队开始以差异测试模式运行 fuzzer 实例,以检测 JavaScript 的正确性问题。 Number.prototype.toString 中的加速 在一般情况下,将 JavaScript 数字转换为字符串可能会非常复杂...
JavaScript 引擎 V8 发布了 8.5 版本(测试阶段),正式版本将在之后随 Chrome 85 一起推出。8.5 版本带来了一些面向开发人员的特性,主要亮点包括: JavaScript Promise.any 和 AggregateError Promise.any 是一个 Promise 组合器,一旦输入的一个 Promise 满足,它就会解决所产生的 Promise。 const promises = [ fetch('/endpoint-a').then(() => 'a'), fetch('/endpoint-b').then(() => 'b'), fetch('/endpoint...
JavaScript 引擎 V8 发布了 8.4 版本(测试阶段),正式版本将在之后随 Chrome 84 一起推出。8.4 版本带来了一些面向开发人员的特性,主要亮点包括: WebAssembly 缩短启动时间 WebAssembly 的基准编译器(Liftoff)现在支持原子指令和大容量内存操作。这意味着用户可以获得更快的启动时间。 更好的调试 为了不断改善 WebAssembly 的调试体验,开发团队表示现在能够检查任何暂停执行或到达断点的实时 WebAssembly 框架。这是通过...
JavaScript 引擎 V8 发布了 8.3 版本(测试阶段),正式版本将在之后随 Chrome 83 一起推出。8.3 版本带来了一些面向开发人员的特性,主要亮点包括: 性能 垃圾收集器中更快的 ArrayBuffer 跟踪 ArrayBuffer 的后备存储是使用嵌入器提供的 ArrayBuffer::Allocator 在 V8 堆之外分配的。当垃圾收集器回收其 ArrayBuffer 对象时,需要释放这些后备存储。V8 v8.3 具有跟踪 ArrayBuffer 及其后备存储的新机制,该机制允许垃圾回收器...
JavaScript 引擎 V8 发布了 8.1 版本(测试阶段),正式版本将于几周后随 Chrome 81 一起推出。8.1 版本带来了一些面向开发人员的特性。 新的 Intl.DisplayNames API 使开发者可以轻松显示语言、区域、脚本和货币的翻译。 const zhLanguageNames = new Intl.DisplayNames(['zh-Hant'], { type: 'language' }); const enRegionNames = new Intl.DisplayNames(['en'], { type: 'region' }); const itScriptNames = new Intl....
V8 发布了 8.0 版本,此版本除了修复一些 bug,毫无疑问又带来了性能的提高。目前是预览,正式版将于几个星期后随 Chrome 80 Stable 一起发布。 性能改进 先看看性能改进,这包括内存占用减少与速度提升: 指针压缩 V8 堆包含整个项目所有东西,例如浮点值、字符串字符、编译的代码和标定值(tagged values),标定值代表指向 V8 堆的指针或小整型,开发团队发现这些标记值占据了堆的大部分空间。 标定值与系统指针一样大,对于...
去年年底,V8 团队启动了一个名为 V8 Lite 的项目,旨在大幅降低 V8 的内存使用率。最开始,团队准备把 V8 Lite 作为 V8 的独立模式,专门用于低内存的移动设备与嵌入式设备,因为这些设备更关注的是减少内存使用而不是执行速度。 在这个项目研发的过程中,开发团队发现专门为这个 Lite 模式所做的内存优化其实也可以迁移到原来的 V8 上,直接两开花。V8 团队近日发表了一个文章,就详细分享了在构建 V8 Lite 的过程中将一些关键...
JavaScript 引擎 V8 发布了 7.7 版本,目前处于测试阶段,正式版将于几个星期后随 Chrome 77 Stable 一起发布。 更新内容如下: 延迟反馈分配 为了优化 JavaScript,V8 收集关于传递给各种操作数(例如 + 或 o.foo)的操作数类型的反馈,这种反馈用于优化这些操作,使它们适合这些特定类型。 为了减少 V8 的内存使用量,现在只在函数执行了一定数量的字节码之后才分配反馈向量。这避免了为没有从已收集反馈中受益的短期函数分配反...
JavaScript 引擎 V8 发布了 7.6 版本,目前处于 beta 阶段,正式版将于几个星期后随 Chrome 76 Stable 一起发布。 此版本通过以下几个特性改进又提升了性能: 改进 JSON.parse 在现代 JavaScript 应用中,JSON 通常用作传递结构化数据的格式。通过加速 JSON 解析,可以减少通信的延迟。此版本中,JSON 解析器进行了大修,以便更快地扫描和解析 JSON,这使得流行网页提供的数据解析速度提高了 2.7 倍。 在 V8 v7.5 之前,JSON 解...
JavaScript 引擎 V8 发布了 7.4 版本,目前处于 beta 阶段,正式版将于几个星期后与 Chrome 74 Stable 一起发布。 此版本带来了一些新特性,并极大提升了性能。 JIT-less V8 V8 现在不需要运行时分配可执行内存就可以执行 JavaScript,关于这个新特性的具体细节,之前我们有报导过:V8 新机制:JIT-less 模式。 WebAssembly Threads/Atomics 在非 Android 操作系统上启用了 WebAssembly Threads/Atomics,可以通过 chrom://flag...
V8 v7.4 现在支持无需在 runtime 阶段分配可执行内存就能执行 JavaScript 代码。 在其默认配置中,V8 很大程度上依赖于在 runtime 阶段分配和修改可执行内存的能力。例如,作为一个包含优化过程的编译器,TurboFan 可即时(just-in-time)为热加载 JavaScript(JS) 函数创建原生代码,并且大多数 JS 正则表达式由 irregexp 引擎编译为原生代码。而在 runtime 阶段支持创建可执行内存正是 V8 快速运行的原因之一。 但在某些场景中,...
V8 JavaScript 引擎 7.2 已发布,开发团队表示目前尚处于 Beta 版阶段,正式版将会于几周后和 Chrome 72 Stable 一起推出。 V8 v7.2 提供了很多面向开发者的新特性,下面我们不妨简单看一下。 内存 现在,在 ia32 架构中默认支持并启用嵌入式内置函数(Embedded builtins)。 性能 JavaScript 解析 平均而言,网页花费了 V8 启动时所用时间的 9.5% 来解析 JavaScript。因此,7.2 版本专注为 V8 提供最快的 JavaScript 解析器,全...
WebAssembly 自发布以来,采用率有在稳步提高。针对 WebAssembly 的大型应用也已经开始出现,Epic 的 ZenGarden benchmark 包含 39.5 MB 的 WebAssembly 二进制文件,AutoDesk 也有 36.8 MB。这些应用需要相当长的时间才能启动,在多数机器上甚至超过30秒,用户体验不够良好。在类似的情况下,JS 应用的启动速度比 WebAssembly 应用快,原因是 WebAssembly 承诺提供可预测的性能,一旦应用运行,它可以始终如一地满足你的性能需...
每六周,V8 JavaScript 引擎都会发布一个新版本,现在最新版本 6.9 已正式推出。 发布说明显示,V8 6.9 在 x64 平台上支持嵌入式内置插件,通过该插件,显著优化了 V8 的内存使用。数据显示,V8 堆大小在 x64 上有了显著的节省。而其他平台将在即将发布的版本中推出。 除了内存方面的优化,6.9 版本还带来了性能方面的优化。WebAssembly 得到了一个新的基线编译器 Liftoff,它可以更快地启动具有大型 WebAssembly 模块(如 Goog...
V8 JavaScript 引擎 6.8 已发布,包含许多面向开发者的新特性,亮点包括: 内存 JavaScript 函数不必要地保留外部函数及其元数据(称为 SharedFunctionInfo 或 SFI ),可能会导致伪内存泄漏。 在 V8 6.8 版本之前,活动上下文(active Context)会让创建上下文的函数的 SFI 保持活动状态: 通过让 Context 指向包含调试所需的精简信息的 ScopeInfo 对象,V8 6.8 打破了对 SFI 的依赖关系。这也带来了近 3% 的 V8 内存占用改进...
V8 JavaScript 引擎 6.7 现已正式发布,V8 v6.7 带来了许多面向开发者的新特性,下面将简要进行介绍。 JavaScript 语言特性:V8 v6.7 默认启用对 BigInt 的支持。BigInts 是 JavaScript 中一种新的数字类型,可以用任意精度表示整数 不受信任的代码缓解:在 V8 v6.7 中,针对侧道攻击漏洞进行了更多缓解措施,以防止信息泄漏到不可信的 JavaScript 和 WebAssembly 代码 V8 API:使用 git log branch-heads/6.6..branch-heads/6...
V8 JavaScript 引擎 6.6 已发布,该版本针对 JavaScript 语言有以下功能改进: Function.prototype.toString() 现在更精准的 return 源码,包括空格和注释。对比示例: 行分隔符(U + 2028)和段落分隔符(U + 2029)现在允许在字符串文字中匹配 JSON 。以前,这些符号被视为行结束符,使用它们会导致 SyntaxError 异常。 try statements 的 catch 语句现在可以在没有参数的情况下使用。 除了 String.prototype.trim(), V8 还实...
V8 JavaScript 引擎 6.5 发布了。添加不受信任代码模式,支持流式编译 WebAssembly 代码。详情可以查看这里。 主要更新内容如下: 不受信任的代码模式 为了应对最新的 Spectre 的攻击,V8 引入了一个不可信的代码模式。 如果您嵌入 V8,考虑利用这种模式,防止应用程序处理用户生成的,不可信的代码。该模式默认情况下处于启用状态,包括在 Chrome 中。 流式编译 WebAssembly 代码 WebAssembly API 提供了一个特殊的功能来支持流...
V8 JavaScript 引擎发布了 6.4 版本,同样的,该版本提升了速度,优化了内存的使用,ECMAScript 语言特性方面引入了两个对正则表达式功能的支持。 速度 根据 V8 的 Web Tooling Benchmark,uglify-js 现在可以快 15-20%。 内存 现在,V8 的内置代码对象和字节码处理程序现在可以从快照中缓慢反序列化,这可以显着减少每个 Isolate 消耗的内存。Chrome 中的基准测试显示浏览常见网站时,每个标签可节省数百 KB 的空间。 ECMASc...
评论