最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

V8 如何度量真实数据性能

  • 2017-01-05
  • 本文字数:1619 字

    阅读完需:约 5 分钟

网页渲染性能对于用户体验非常重要,V8 引擎一直在通过各种基准测试验证和优化 JavsScript。2017 年,V8 将引入真实场景度量,以更好针对真实场景进行优化。

有一句老格言说得好:“有度量才有改进”。这对于 JavaScript 虚拟机来说也非常适用。对于虚拟机开发团队来说,选择一个合适的度量方式对于指导性能优化非常必要。JavaScript 度量方式从最初的微基准测试到后来的静态测试集,直到 V8 即将采用真实网页。

和其他 JavaScript 引擎类似,V8 也通过合成基准测试来度量性能指标。刚开始,引擎开发者使用诸如 SunSpider Kraken 等微基准测试框架;随着浏览器市场的发展,基准测试进入了新纪元,诸如 Octane JetStream 等更加大型的框架被使用,但是它们仍然属于合成基准测试引擎。

微基准和静态测试集有它们的优势:它们非常容易理解,运行方便,能够在任意浏览器中执行,容易进行对比。但它们也有很大的劣势:测试用例非常有限,难以模拟现实中众多复杂的网页;另外,基准测试需要经常变化,以满足不停进化的前端框架和前端技术;最后,基于基准测试分数的优化,对于真实用户或者前端开发者来说不一定有感知。

通过 WebPageReplay 和运行时调用状态来度量真实的网页性能

基于上述传统基准测试的缺陷,V8 团队通过加载真实网站页面来度量真实性能。最终,他们通过基于 Chrome 的组件 WebPageReplay 来录制网页请求,并按照需求进行回放。

随后,配合 WebPageReplay 组件,他们又开发了称为运行时调用状态(Runtime Call Stats)的工具,以记录不同 JavaScript 代码在执行时实际使用到的 V8 组件。有了这个工具的帮助,不仅能够让使用真实网站来测试 V8 变得更加方便,同时能够完美展示为了 V8 在执行不同 JavaScript 代码时会表现的不同。

目前,V8 团队已经使用了将近 25 个网站进行性能度量,来指导 V8 的优化。这些网站,是从 Alexa 前 100 名中,以使用 JavaScript 框架(React、Polymer、Angular、Ember 等等)、地理位置分布以及开发团队与 V8 团队有合作等因素最终挑选出来。

想要深入了解网页和运行时调用状态的测试集开发详情,请收看 BlinkOn 6 演讲:真实世界性能。读者也可以自己执行运行时调用状态工具

和真实网页加载的区别

通过运行时调用状态工具,可以直观的观察到真实网站性能度量数据,并能够和传统基准测试进行比较,了解不同JavaScript 执行时V8 的内部情况。

从这些对比数据上,我们会发现性能基准测试工具Octane 和实际25 个测试网站相比差别很大。从下面的图表可以看出,Octane 的颜色区域和其他网站测试结果相差很大。当运行Octane 时,V8 的瓶颈在于JavaScript 代码执行,然而在处理真实网页时,V8 的瓶颈却是解析和编译。如此大的差别最终会导致针对V8 的优化效果不佳,甚至产生反效果

从这个图表还能发现,相比于Octane, Speedometer 和现实数据更加接近。Speedometer 是一个 WebKit 的基准测试库,其中包含使用了 React、Angular、Ember 等框架编写的测试用例,和实际的 25 个网站获得的数据比较匹配。

最终目的:更快的 V8 引擎

在过去一年中,基于真实网站的测试集和运行时调用状态工具已经帮助 V8 有了大约 10%~20% 的性能提升。由于之前的优化主要着关注于 Chrome 的页面加载优化,2 位数的性能提升已经是个不错的成绩了。这些优化同样使得 Speedometer 性能基准测试的分数提升了 20%~30%。

这些性能的提升,对于使用现代 JavaScript 框架(或者类似模式 JavaScript 代码)的网站会有明显反应。其他一些提升,如 JavaScript 内置功能 Object.create 和 Function.prototype.bind 的优化、围绕着对象工厂模式的优化、V8 引擎的内联缓存功能实现、实时解析器优化等,对于普通JavaScript 执行性能优化也有帮助。

V8 团队将持续使用真实网站加载性能来指导 V8 引擎优化。


感谢韩婷对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-01-05 18:002774

评论

发布
暂无评论
发现更多内容

区块链挖矿是怎么挖的?区块链挖矿有几种方式?

西安链酷科技

云算力挖矿源码

git原理与基本应用

丛风

git

Util应用框架介绍

何镇汐

C# 后端 软件开发 开源框架’

最全对比!8款UML图工具究竟哪个最适合你?

Geek_09ea8e

可视化 UML UML图工具

GPT-4 变笨加剧,一个笑话讲八百遍;ChatGPT 之父剑桥演讲遭抵制丨 RTE 开发者日报 Vol.77

声网

Flink JobManager内存管理机制介绍与调优总结

腾讯云大数据

flink、

文心一言 VS 讯飞星火 VS chatgpt (127)-- 算法导论11.2 2题

福大大架构师每日一题

福大大架构师每日一题

文心一言 VS 讯飞星火 VS chatgpt (127)-- 算法导论11.2 2题

福大大架构师每日一题

福大大架构师每日一题

进击的代码之路:如何培养解决问题的架构思维?

互联网工科生

架构 架构师

数字先锋| 打造生态环境监测新范式,天翼云助力青海“生态之窗”数字化升级!

天翼云开发者社区

云计算 大数据

ER图:改变你数据库设计流程的神器!

Geek_09ea8e

ER图 实体关系图 数据库设计流程

开发搭建体育赛事直播系统平台源码解决方案,助于体育平台打造娱乐化IP

软件开发-梦幻运营部

Util应用框架前端概述

何镇汐

C# 开源 后端 软件开发

如何使用商品详情API接口获取商品数据:一篇详尽的论述

Noah

Util应用框架概述

何镇汐

无纸化登记二维码应用方案:扫码填写表单,信息收集无纸化

草料二维码

二维码 无纸化登记

百万人才补贴!2024年国家级人才工程引进申报,入选资格保留2年

科兴未来News

人才补贴 海外博士 人才引进 回国发展

企业几种快速传输大文件的使用方法,你GET到了吗

镭速

大文件传输 传输大文件

SecureCRT for mac(终端SSH仿真工具)v9.4.1中文激活版

mac

securecrt 苹果mac Windows软件 终端SSH仿真工具

如何精通项目质量管理:主要内容+3大关键执行策略

PingCode

项目管理 项目质量管理

iZotope RX 10 for mac(音频修复和增强工具) 10.4.2完整激活版

mac

苹果mac Windows软件 iZotope RX 10 音频修复软件

如何使用商品详情API接口来获取想要的商品数据?

Noah

云行| 天翼铸云,百业腾飞!天翼云为“数字茂名”建设注智赋能

天翼云开发者社区

云计算 大数据

企业级API资产如何管理

RestCloud

API 资产管理 API 接口

喜讯!云起无垠获评GEEKCON 2023"前沿突破奖"

云起无垠

云行| 速智未来 鹭岛展翼!中国电信天翼云推动数字厦门新跨越

天翼云开发者社区

人工智能 云计算 大数据

实施全面预算管理,夯实国有企业发展基础

智达方通

国有企业 全面预算管理

每个程序员都应该知道的六种负载均衡算法

树上有只程序猿

负载均衡

Util应用框架平台概述

何镇汐

C# 开源 后端 软件开发

DAPP合约代币质押算力挖矿系统开发

l8l259l3365

Techwalk攻略 | 来北京与OpenHarmony技术大会一起技术漫游!

OpenHarmony开发者

V8如何度量真实数据性能_语言 & 开发_金灵杰_InfoQ精选文章