本文来自公众号生活在信息时代。对于前端程序员来说,V8引擎无疑是最熟悉的工具之一。V8是Google的开源JavaScript和WebAssembly引擎,用C++编写。它用于Chrome和Node.js等。V8可以独立运行,也可以嵌入任何C++应用程序中。为了测试V8作为JavaScript引擎的性能,谷歌随后开发了一套V8基准测试套件。在运行时,V8基准测试套件会加载一些特定的JavaScript代码来测试引擎内核、加密、解密、渲染等的速度。该套件已成为JavaScript引擎性能的标准。在第七版套件中,一共包含八项基准测试,最终成绩为八项测试成绩的几何平均数。分数越高表示速度越快。这八项测试的具体内容如下:1.Richardsbenchmark操作系统内核的模拟基准最早出现在MatinRichards开发的BCPL中(第539行)。主要关注点:属性加载/存储、函数/方法调用次要关注点:代码优化、冗余代码消除二、DeltaBlue基准单向约束求解,最早出现在JohnMaloney和MarioWolczko开发的Smalltalk中(第880行)。主要重点:多态性次要重点:OO风格编程3.加密基准TomWu开发了一个基于代码的加密和解密基准(1698行)。主要关注点:位操作4.RayTrace基准AdamBurmister开发了一个基于代码的光线追踪基准(904行)。主要关注点:参数对象,应用次要关注点:原型库对象,创建模式5.EarleyBoyerbenchmarkClassicSc??heme基准测试,由FlorianLoitsch的Scheme2Js编译器翻译成JavaScript(4684行)。主要关注点:对象的快速创建和销毁次要关注点:闭包、参数对象六、RegExpbenchmark正则表达式基准测试,从50多个最流行的网页中提取正则表达式操作(第1761行)。重点:正则表达式七、Splaybenchmark数据操作基准、处理splay树和实现自动内存管理子系统(394行)。主要关注点:快速创建、破坏对象八、NavierStokesBenchmarkSolveNavierStokesequationsin2D,re-manipulatingdouble-precisionarrays,basedonOliverHunter'scode.(第387行)。主要关注:读取和写入数字数组。次要问题:浮点数学。V8基准在早期的JavaScript引擎开发过程中被广泛使用,许多JS引擎都使用这个基准来评估它们的性能。常用的JS引擎测试结果如下:虽然V8基准测试套件非常经典,但随着技术的发展,谷歌推出了新的基准测试套件Octane1.0和2.0,先后加入了以下9个测试基准:pdf.js:在JavaScript中实现Mozilla的PDF阅读器。它测量解码和解释时间(33,056行)。主要焦点:数组和类型化数组操作。次要问题:数学和位运算,以及对未来语言功能的支持,例如promisesSplayLatency:Splay测试侧重于虚拟机的垃圾收集子系统。SplayLatency对现有的Splay代码执行频繁的测量检查点检测。检查点之间的长时间停顿表示高GC延迟。该测试测量延迟暂停的频率,将它们分类到桶中,并根据低分对频繁的长时间暂停进行惩罚。主要问题:垃圾收集延迟Mandreel:运行3DBullet物理引擎,它通过Mandreel(第277377行)将C++移植到JavaScript。重点:模拟MandreelLatency:与SplayLatency测试类似,该测试使用频繁的时间测量点对Mandreel基准进行检测。由于Mandreel强调虚拟机编译器,此测试提供了编译器引入的延迟的指示。测量点之间的长时间停顿会降低最终分数。主要问题:编译器延迟GB模拟器:全部使用JavaScript来模拟便携式控制台的架构,以及运行所需的3D模拟(11,097行)。重点:模拟代码加载:测量加载大型Javascript程序后Javascript引擎开始解码的速度。一个常见的例子是SocialWidget。本次测试的源代码来自开源代码库(Closure、jQuery)(1530行)。主要关注:JavaScript解析和编译Box2DWeb:基于流行的2D物理引擎Box2DWeb,最初由ErinCatto编写,现在移植到JavaScript。(560行,9000+精简版)主要重点:浮点数学。次要问题:包含Double的属性、访问器属性。Zlib:从MozillaEmscripten套件执行的zlibasm.js/Emscripten测试(在工作负载1中运行)。代码封装在eval()中,确保我们测量的运行时包括在所有浏览器上的解析和编译(2,585行)。主要关注点:代码编译和执行Typescript:Microsoft&Type39TypeScript编译器是一个复杂的应用程序。该测试用于衡量TypeScript编译本身所需的时间,它代表了虚拟机在处理复杂的、可调整大小的JavaScript应用程序时的性能(25918行)。主要关注点:运行复杂和繁重的应用程序此外,常用的JavaScript基准测试工具包括Mozilla发布的Kraken、Apple的JetStream、Speedometer和Speed-Battle等。
