javascript引擎
Beta V8版本7.4现在可用,可以将引擎的功能扩展到Apple iOS等平台。 V8是Google针对Chrome浏览器的开源JavaScript和WebAssembly引擎。 它在Chrome浏览器和Node.js JavaScript运行时中都是必需的 。
您可以从Chromium V8存储库下载Google V8的正式版 。
[在InfoWorld上更深入: 超越jQuery:JavaScript框架专家指南 • Node.js框架完整指南 • 10个必备JavaScript开发人员工具 • 6个最佳JavaScript IDE和10个最佳JavaScript编辑器 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]
Google V8 beta 7.4将于2019年4月正式投入生产,它具有以下新功能:
无需JIT的V8,其中支持JavaScript执行,而无需在运行时分配可执行内存。 这可以允许将V8扩展到Apple iOS,智能电视和游戏机等平台上。 V8的默认配置依赖于在运行时分配和修改可执行内存的能力。 但是在某些情况下,可能需要在不分配可执行内存的情况下运行引擎,例如禁止禁止非特权应用程序(包括iOS)对不可执行内存进行写访问的平台。 同样,禁止对可执行内存的写入会减少应用程序对漏洞的攻击面。 在无JIT模式下,V8切换到JavaScript的仅解释器模式; WebAssembly当前不支持此模式。 但是,无JIT模式确实会降低性能。
现在,在非Android操作系统上启用了WebAssembly线程/原子。 此举通过WebAssembly释放了对多个内核的使用,从而在Web上实现了计算量大的新用途。
为了提高性能,版本7.4在某些情况下会跳过参数调整,从而将调用开销减少了60%。
调用本地访问器(即DOM访问器)的性能已得到改善。
通过删除涉及属性名称的重复数据删除功能,提高了Preparser的性能。 此外,修复了涉及源流使用的自定义UTF-8解码的性能问题。
为了减少内存开销,已经实现了对在垃圾回收期间从函数中清除编译的字节码(如果最近未执行过)的支持。
为了支持私有类字段,开发人员可以通过在字段前面加上#前缀来将其标记为私有。
在哪里下载V8 7.4 Beta
您可以从Google的Chromium Git存储库下载V8 Beta 。
当前版本:V8版本7.3中的新增功能
V8 7.3中的新功能包括:
- --async-stack-traces标志默认情况下处于打开状态。
- 零成本的异步堆栈跟踪使使用异步代码更容易诊断生产中的问题; 现在通常将发送到日志文件和服务的stack属性提供对问题的更多了解。
- await更快,默认情况下启用--harmony-await-optimization标志。 这是--async-stack-traces的先决条件。
- 通过优化更快地启动WebAssembly。 对于大多数工作负载,编译可提高15%到25%。
- JavaScript功能包括fromEntries()和API String.prototype.Matchall ,它们是执行Object.entries逆过程的API,API是使将全局或粘性正则表达式应用于字符串并遍历所有匹配项的过程变得更加容易。
当前版本:Google V8版本7.2的新功能
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命令行标志后面可以使用此功能。
- 支持公共类字段,该类扩展了JavaScript语法以简化操作。
- ListFormat建议,用于本地化列表的格式。
- 现在, stringify输出用于单独替代的转义序列,从而使输出有效为Unicode。
先前版本:Google V8版本7.1的新功能
2018年11月的V8版本7.1改进了内存和性能,并增强了JavaScript和WebAssembly二进制格式 。 对于内存,解释器的字节码现在已嵌入二进制文件中,每个隔离区平均节省约200KB。 为了提高性能,当来自周围上下文的变量逃逸到局部闭包时,TurboFan编译器中的逃逸分析得到增强,可以处理更高阶函数的局部函数上下文。 通过转义分析,可以对优化单元本地的对象执行标量替换。
V8版本7.1中的其他新功能:
- 对于JavaScript,升级中提供的RelativeTimeformat API允许在不牺牲性能的情况下对相对时间(例如“昨天”)进行本地化格式化。 另外,版本7.1支持GlobalThis提议,提供了一种通用机制,即使在严格的功能或模块中,无论平台如何,都可以访问全局对象。
- 对于WebAssembly字节码格式,模块支持postMessage 。 此行为仅适用于Web Worker,而不能扩展到跨进程方案。
先前版本:Google V8版本7.0的新功能
2018年10月的V8版本7.0预览了WebAssembly线程,该线程为并行计算提供了原语。 要在使用V8的Chrome浏览器中使用线程,开发人员可以通过chrome://flags/#enable-webassembly-threads启用它,或注册Origin试用版 ,以试验新的Web功能。 WebAssembly,又名Wasm ,允许编译以不同语言编写的代码以在Web上运行。
V8 7.0中的其他新功能包括:
- 对于JavaScript, description属性被添加到prototype ,提供了一种更符合人体工程学的方式来访问描述。 此外, Array.prototype.sort在7.0版中也变得稳定。
- 嵌入式内置扩展程序,通过在多个隔离中共享生成的代码来节省内存。 V8版本6.9在X64体系结构上启用了内置功能,而版本7.0将其扩展到了IA-32以外的其余平台。
先前版本:Google V8版本6.9的新功能
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位平台。 正在考虑的其他改进包括:
- 为移动设备实现动态分层,以容纳这些设备上的较低内存量。 实验正在进行中,结合了懒散编译和Liftoff以及TurboFan中热功能的动态分层。
- 提高Liftoff代码生成性能,并改善生成的代码。
先前版本:V8版本6.8中的新增功能
2018年7月发布的Google V8版本6.8专注于性能和内存使用情况。
阵列解构性改进提高了性能。 优化编译器尚未生成用于数组解构的理想代码,因此V8的生成器阻止了转义分析以消除临时分配,这使得使用临时数组进行数组解构的速度与分配序列一样快。
通过实现JavaScript的快速路径,Object.assign的新实现提高了性能。
使用比较功能进行排序时,TypedArrays的性能得到了提高。
V8版本6.8中的其他新功能包括:
- 为了提高WebAssembly可移植代码格式的执行速度,开发人员可以在Linux x64平台上使用基于陷阱的边界检查(内存管理优化)。
- 通过压缩和删除不必要的字段,减少了SharedFunctionInfo ( SharedFunctionInfo )的内存消耗。
- 为了提高内存功能,还打破了对SFI的依赖关系,在这种依赖中,SFI不必要地处于活动状态,这导致内存泄漏的风险。
先前版本:V8版本6.7的新增功能
Google的V8 JavaScriptengine通过6.7版分支(现在已投入生产)来增强语言功能和安全性。
V8 6.7引擎默认情况下启用了BigInt支持。 预期在ECMAScript的未来版本中, BigInts可用作JavaScript中的数字原语,以任意精度表示整数。 使用BigInt ,可以执行整数算术而不会溢出。 BigInt可以用作最终BigDecimal实现的基础,可用于以十进制精度表示金额。
V8 6.7中还提供了针对边通道漏洞的更多缓解措施,旨在防止信息泄漏到JavaScript和WebAssembly的不受信任的代码中。
先前版本:V8版本6.6中的新增功能
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禁用此功能。
翻译自: https://www.infoworld.com/article/3252818/whats-new-in-googles-v8-javascript-engine.html
javascript引擎