服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - js教程 - 前端程序员应知应会之JavaScript基准测试套件

前端程序员应知应会之JavaScript基准测试套件

2022-11-08 20:03活在信息时代信息时代风之影 js教程

为了测试V8作为JavaScript引擎的性能,Google随后也开发了一套V8基准测试套件,在运行时,V8基准套件会载入一些特定的JavaScript代码,从而测试引擎的内核、加密、解密、渲染等速度。而该套件也就成为了JavaScript引擎性能的标准。

本文来自公众号活在信息时代。

对于前端程序员来说,V8引擎无疑是最为熟悉的工具之一了。V8是Google开源的JavaScript和WebAssembly引擎,用C++编写。它用于Chrome和Node.js等。V8可以独立运行,也可以嵌入到任何C++应用程序中。

为了测试V8作为JavaScript引擎的性能,Google随后也开发了一套V8基准测试套件,在运行时,V8基准套件会载入一些特定的JavaScript代码,从而测试引擎的内核、加密、解密、渲染等速度。而该套件也就成为了JavaScript引擎性能的标准。

在该套件的第七个版本中,一共包括了八项基准测试,最终得分为这八项测试得分的几何平均数。得分越高表明速度越快。这八项测试的具体内容如下:

一、Richards基准

操作系统内核的模拟基准, 最早出现于Matin Richards开发的BCPL中(539 行)。

主要关注点:属性加载/存储、函数/方法调用

次要关注点:代码优化、消除冗余代码

二、DeltaBlue基准

单向约束求解,最早出现于 John Maloney 和 Mario Wolczko开发的Smalltalk中 (880 行)。

主要关注点:多态

次要关注点:OO 样式编程

三、Crypto基准

Tom Wu开发的以代码为基础的加密解密基准(1698 行)。

主要关注点:位运算

四、RayTrace基准

Adam Burmister开发的以代码为基础的光线追踪基准 (904 行)。

主要关注点:参数对象,应用

次要关注点:原型库对象,创建模式

五、EarleyBoyer基准

经典Scheme 基准, 由Florian Loitsch的Scheme2Js编译器翻译为JavaScript (4684 行)。

主要关注点:快速创建、销毁对象

次要关注点:闭包, 参数对象

六、RegExp基准

正则表达式基准,从50多个最流行的网页中提取正则表达式操作所产生的(1761 行)。

关注点:正则表达式

七、Splay基准

数据操作基准,处理伸展树和执行自动内存管理子系统 (394 行)。

主要关注点:快速创建、销毁对象

八、NavierStokes基准

根据奥利弗·亨特的代码,在2D上解决navierstokes方程,重操纵双精度数组。(387 行).

主要关注点:读取和写入数字数组。

次要关注点:浮点数学运算。

V8基准测试在早期的JavaScript引擎开发过程中应用广泛,很多JS引擎都使用该基准测试用于评测其性能。常用的JS引擎测试结果如下:

前端程序员应知应会之JavaScript基准测试套件

尽管V8基准测试套件非常经典,但是随着技术的发展,Google又推出了新的基准测试套件Octane 1.0和2.0,陆续增加了下列九项测试基准:

pdf.js:在JavaScript中实现了Mozilla的PDF阅读器。它可以测量解码和解释的时间(33,056行)。

主要关注点:数组和类型化数组操作。

次要关注点:数学运算和位运算,以及对未来语言功能(例如 promise)的支持

SplayLatency:Splay 测试侧重于虚拟机的垃圾回收子系统。SplayLatency 对现有 Splay 代码进行频繁测量检查点插桩。检查点之间长时间暂停表示 GC 延迟时间较长。此测试衡量延迟暂停的频率,将它们分类为分桶,并根据低分惩罚频繁的长暂停。

主要关注点:垃圾回收延迟

Mandreel:运行3D Bullet物理引擎,该引擎通过Mandreel将C++移植到JavaScript (277377行)。

主要关注点:模拟

MandreelLatency:与SplayLatency 测试类似,此测试通过频繁的时间测量点对 Mandreel 基准进行插桩。由于 Mandreel 对虚拟机编译器施加压力,因此该测试会提供编译器引入的延迟指示。在测量点之间长时间暂停会降低最终得分。

主要关注点:编译器延迟时间

GB Emulator:全部采用JavaScript模拟便携式控制台的架构,以及运行所需的3D模拟(11,097行)。

主要关注点:模拟

Code loading:测量Javascript引擎在加载了一段大型的Javascript程序后开始解码的速度有多快,一个常见的实例为Social Widget。该测试的源代码来自开源代码库(Closure, jQuery)(1,530行)。

主要关注内容:JavaScript 解析和编译

Box2DWeb:基于流行的2D物理引擎Box2DWeb,最初由Erin Catto编写,现被移植到JavaScript。(560行,9000+ 精简版)

主要关注点:浮点数学运算。

次要关注点:包含 Double 的属性、访问器属性。

Zlib:从 Mozilla Emscripten 套件执行的 zlib asm.js/Emscripten 测试(在工作负载 1 中运行)。代码包含在 eval() 中,它保证我们测量的运行时间包括在所有浏览器上解析和编译(2,585 行)。

主要关注点:代码编译和执行

Typescript:Microsoft&Type 39 TypeScript 编译器是一款复杂的应用。此测试用于衡量 TypeScript 编译本身所需的时间,它代表虚拟机在处理复杂、可调整大小的 JavaScript 应用(25918 行)方面的表现。

主要关注点:运行复杂、繁重的应用

除此之外,常用的JavaScript基准测试工具还有Mozilla发布的Kraken、苹果的JetStream、以及Speedometer和Speed-Battle等。

原文地址:https://www.toutiao.com/article/7161782749626843682/

延伸 · 阅读

精彩推荐
  • js教程js事件模型与自定义事件实例解析

    js事件模型与自定义事件实例解析

    JavaScript一个最简单的事件模型,需要有事件绑定与触发,还有事件删除。本文将对其具体实现代码进行解析,需要的朋友一起来看下吧...

    caihg5682021-12-15
  • js教程20个Javascript工具函数助力高效开发

    20个Javascript工具函数助力高效开发

    日常开发中,面对各种不同的需求,我们经常会用到以前开发过的一些工具函数,把这些工具函数收集起来,将大大提高我们的开发效率。...

    稀土掘金10752022-09-01
  • js教程JS+CSS实现动态时钟

    JS+CSS实现动态时钟

    这篇文章主要为大家详细介绍了JS+CSS实现动态时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    易点都不懒5132022-01-21
  • js教程JS数组降维的几种方法详解

    JS数组降维的几种方法详解

    这篇文章主要介绍了JS数组降维的几种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    何其所幸5032022-02-25
  • js教程js加减乘除精确运算方法实例代码

    js加减乘除精确运算方法实例代码

    这篇文章主要给大家介绍了关于js加减乘除精确运算方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    ``木头人```8692022-01-04
  • js教程关于Js中new操作符的作用详解

    关于Js中new操作符的作用详解

    这篇文章主要给大家介绍了关于关于Js中new操作符作用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    妙蛙种子10402022-01-21
  • js教程uniapp开发小程序的经验总结

    uniapp开发小程序的经验总结

    这篇文章主要给大家介绍了关于uniapp开发小程序的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    东瓜东瓜6092022-02-25
  • js教程JavaScript Reduce使用详解

    JavaScript Reduce使用详解

    这篇文章主要介绍了JavaScript Reduce使用的相关资料,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下...

    孟陬6042022-02-13