Beta V8版本7.4现在可用,有潜力将引擎的功能扩展到Apple iOS等平台。 V8是Google针对Chrome浏览器的开源JavaScript和WebAssembly引擎。 它在Chrome浏览器和Node.js JavaScript运行时中都是必需的 。
您可以从Chromium V8存储库下载Google V8的正式版 。
Google V8 beta 7.4将于2019年4月正式投入生产,它具有以下新功能:
#
前缀来将其标记为私有。 您可以从Google的Chromium Git存储库下载V8 Beta 。
V8 7.3中的新功能包括:
--async-stack-traces
标志默认情况下处于打开状态。 stack
属性提供对问题的更多了解。 await
更快,默认情况下启用--harmony-await-optimization
标志。 这是--async-stack-traces
的前提条件。 fromEntries()
和API String.prototype.Matchall
,这些函数可以执行Object.entries
的逆操作,而API.API可以使全局或粘性正则表达式更容易地应用于字符串并遍历所有匹配项。 2019年1月的V8版本7.2改进了JavaScript解析,WebAssembly二进制格式和内存。
为了提高解析速度,V8版本7.2包含了Google称为引擎有史以来最快JavaScript解析器,从而可以加快页面加载速度和响应速度。 Google说,自V8 7.0版以来,桌面解析速度提高了约30%。
对于内存,现在在IA32体系结构上默认支持并启用通过在多个隔离中共享生成的代码来节省内存的嵌入式内置程序。
对于WebAssembly,V8 7.2具有代码生成方面的改进,包括在优化的编译器的调度程序中启用节点拆分,并在后端进行循环旋转。 此外,包装缓存已得到改进,并引入了自定义包装,以减少调用导入JavaScript数学函数时的开销。
对寄存器分配器的设计更改提高了代码模式的性能,这些代码模式将在以后的版本中出现。 同样,版本7.2中的陷阱处理程序可提高WebAssembly代码的吞吐量。 它们在Windows,MacOS和Linux上实现。 在Chromium中,在Linux上启用了它们,并在确认稳定性后跟随MacO和Windows。 计划还要求它们在Android上可用。
V8 7.2中的其他新功能包括:
async
/ await
实现。 更改可能会合并到官方ECMAScript规范中。 stack
属性。 在--async-stack-traces
命令行标志后面可以使用此功能。 ListFormat
建议,用于本地化列表的格式。 stringify
输出用于单个替代的转义序列,从而使输出有效为Unicode。 2018年11月的V8版本7.1改进了内存和性能,并增强了JavaScript和WebAssembly二进制格式 。 对于内存,解释器的字节码现在已嵌入二进制文件中,每个隔离区平均节省约200KB。 为了提高性能,当来自周围上下文的变量逃逸到局部闭包时,TurboFan编译器中的逃逸分析得到增强,可以处理更高阶函数的局部函数上下文。 通过转义分析,可以对优化单元本地的对象执行标量替换。
V8版本7.1中的其他新功能:
RelativeTimeformat
API允许在不牺牲性能的情况下对相对时间(例如“昨天”)进行本地化格式化。 另外,版本7.1支持GlobalThis
建议,提供了一种通用机制,即使在严格的功能或模块中,无论平台如何,都可以访问全局对象。 postMessage
。 此行为仅适用于Web Worker,而不能扩展到跨进程方案。 2018年10月的V8版本7.0预览了WebAssembly线程,该线程提供了用于并行计算的原语。 要在使用V8的Chrome浏览器中使用线程,开发人员可以通过chrome://flags/#enable-webassembly-threads
启用它,或注册Origin Trial ,以试验新的Web功能。 WebAssembly(又名Wasm )使编译以不同语言编写的代码可以在Web上运行。
V8 7.0中的其他新功能包括:
description
属性被添加到prototype
,提供了一种更符合人体工程学的方式来访问描述。 此外, Array.prototype.sort
在7.0版中也变得稳定。 2018年9月的V8版本6.9专注于Google JavaScript引擎的内存和性能改进。
为了节省内存,版本6.9为基于x64的计算机提供了嵌入式内置组件。 这些是所有隔离程序共享的功能,并且嵌入到二进制文件本身中,而不是复制到JavaScript堆上,因此无论运行多少隔离程序,内存中仅存在一次。 V8的设计人员发现,x64计算机上前10,000个网站的堆大小平均减少了9%。 在以后的版本中将支持其他平台。
为了提高性能,V8 6.9版通过改进WeakMap
处理来减少Mark-Compact垃圾回收的暂停时间。 并发和增量标记现在可以处理WeakMaps
。 以前,这项工作是在Mark-Compact垃圾回收的最后一个原子暂停中完成的。 现在,垃圾回收还可以并行执行更多工作,以减少暂停时间。
为了提高性能, DataView
方法已在V8 Torque中重新实现,与以前的运行时实现相比,节省了对C ++的昂贵调用。 此外,当将JavaScript编译到TurboFan优化编译器中时,现在会内联到DataView
方法的调用。 这为热代码提供了更好的峰值性能。
V8 6.9版还包括Liftoff,这是WebAssembly可移植代码格式的基准编译器。 默认情况下启用它,旨在通过尽快生成代码来减少基于WebAssembly的应用程序的启动时间。 代码本身的质量是Liftoff的第二要务,最终代码将由V8的TurboFan编译器重新编译。
开发Liftoff是为了解决TurboFan的编译过程的后端消耗大量时间和内存,从而降低WebAssembly代码性能的问题。 Liftoff避免了中间表示的时间和内存开销,从而一次通过WebAssembly函数的字节码生成机器代码。 Liftoff和Turbofan为V8提供了两个编译层,Liftoff提供了用于快速启动的基准编译器,而TurboFan提供了性能优化。
Google还计划进一步缩短启动时间,减少内存消耗,并为更多用户带来Liftoff的好处。 这些计划涉及用于移动设备的ARM处理器的端口。 目前,Liftoff仅适用于Intel 32位和64位平台。 正在考虑的其他改进包括:
2018年7月发布的Google V8版本6.8专注于性能和内存使用情况。
阵列解构性改进提高了性能。 优化编译器尚未生成用于数组解构的理想代码,因此V8的生成器阻止了转义分析以消除临时分配,这使得使用临时数组进行数组解构的速度与分配序列一样快。
通过实现JavaScript的快速路径,Object.assign的新实现提高了性能。
使用比较功能进行排序时,TypedArrays的性能得到了提高。
V8版本6.8中的其他新功能包括:
SharedFunctionInfo
( SharedFunctionInfo
)的内存消耗。 Google的V8 JavaScriptengine通过版本6.7分支获得了语言功能和安全性的增强,该分支现已投入生产。
V8 6.7引擎默认情况下启用了BigInt
支持。 预期在ECMAScript的未来版本中, BigInts
可用作JavaScript中的数字原语,以任意精度表示整数。 使用BigInt
,可以执行整数运算而不会溢出。 BigInt
可以用作最终BigDecimal
实现的基础,可用于以十进制精度表示金额。
V8 6.7中还提供了针对边通道漏洞的更多缓解措施,旨在防止信息泄露给JavaScript和WebAssembly不受信任的代码。
Google的V8 JavaScript引擎6.6版侧重于JavaScript语言功能和代码缓存功能。
对于JavaScript, Function.prototype.toString()
返回源代码文本的确切片段,包括空格和注释。 V8版本6.6还实现了String.prototype.trimStart() and String.prototype.trimEnd()
。 此功能可通过非标准trimLeft()
和trimRight()
方法获得,它们仍然是新方法的别名,以实现向后兼容。
此外,可以在字符串文字中使用行和段落分隔符,从而匹配JSON 。 以前,这些已被视为字符串文字中的行终止符,它们的使用导致SyntaxError异常。
Array.prototype.values
方法为数组提供与ECMAScript 2015 Map
和Set
集合相同的迭代接口。 这些可以通过keys
, values
或entries
通过调用同名方法进行交互。 此更改可能与现有JavaScript代码不兼容; 在网站上发现异常或损坏行为的开发人员可以尝试通过chrome://flags/#enable-array-prototype-values
禁用此功能。
From: https://www.infoworld.com/article/3252818/whats-new-in-googles-v8-javascript-engine.html