写点什么

Pinterest 如何将 JavaScript 测试速度提升了 15 倍

  • 2015-02-11
  • 本文字数:899 字

    阅读完需:约 3 分钟

任何时候, Pinterest 都运行着数以百计的 A/B“试验(experiment)”,其 JavaScript 测试框架已无法满足他们的试验需求。它需要 15 分钟才能完成整套“测试(test)”,而且经常会因为试验行为变更以及网络 / 浏览器问题而中断。因此,他们借机重构了 Web 测试框架,并于近日在官方博客上介绍了其中几项重点改进。

新框架名为 Affogato ,架构如下:

他们主要从以下几个方面进行了改进:

  • 速度——他们曾试图通过在多个并行的 Headless 浏览器中运行 JavaScript 测试框架来实现优化。但这种方法未能解决整套测试耗时过长的问题,而且还会导致不可预测的机器资源争用问题。后来,他们选择了 jsdom 。这是一个 node.js 命令行工具,实现了 WHATWG DOM HTML 标准。在他们内部进行的大部分基准测试中,测试速度提升了 5 到 20 倍。其中,“DOM 操作多(DOM-heavy)”的测试性能提升最大。另外,鉴于他们的构建系统可以利用任意数量的处理器内核,他们将整套测试分成了多个小块。
  • 可靠性——为了降低数据查找和网络传输代价,他们使用了测试“固件(fixture)”。所谓固件,就是一些包含 JSON 数据的文件。这些数据描述了需要测试的对象。测试框架使用固件创建恰当的“模拟对象(mock object)”,使他们无需编写实例化模拟对象的样板代码就可以测试对象的不同状态。另外,当进行服务器端调用时,可能会因为网络暂时不可用导致测试失败。为了避免这种情况,他们实现了一个 XHR 记录器,监听 Ajax 请求,并将响应写入文件,用于稍后重放。该记录器使测试时间平均减少了 30%。
  • 易用性——他们封装了 Mocha 框架,添加了许多语法糖,使它很容易运行任意数量的试验(它们是给定测试的一部分)。而借助 Sinon.JS 及其沙盒,每次测试完成后,整个环境都可以自动完成清理。他们还使用 ES6 Promise 简化了异步测试的编写。

经过上述改进,他们 1 分钟就可以完成先前需要 15 分钟才能完成的测试。而且,3 个月的使用表明,该测试框架的可靠性也有了很大的改善。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-02-11 09:132416
用户头像

发布了 1008 篇内容, 共 378.7 次阅读, 收获喜欢 342 次。

关注

评论

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

IOTA架构实战:大数据即时多维查询引擎构建【视频】

易观大数据

大数据 架构模式 查询引擎 数据算法

架构感悟5-算法之美

旭东(Frank)

架构 算法 感悟 极客大学架构师训练营

分布式缓存 - 第五周总结

孙志平

Week 05 学习总结

卧石漾溪

极客大学架构师训练营

第五周总结

秦宝齐

课程作业

陈芳,高考之后我要学计算机专业,将来干IT发财了,我就娶你!

张小方

程序员 面试 薪资 毕业

基于领域驱动设计的业务中台架构设计

冯文辉

中台 业务中台 领域驱动设计 DDD

架构师训练营第5周作业

时来运转

第五周总结

Acker飏

极客大学架构师训练营

架构师训练营第五周总结

王铭铭

分布式技术总结

LEAF

计算机操作系统基础(十五)---使用fork系统调用创建进程

书旅

php laravel 操作系统 进程 线程’

「架构师训练营」第五周作业

旭东(Frank)

算法 极客大学架构师训练营 哈希 一致性哈希

架构师训练营Week 05 学习总结

Frank Zeng

学习总结 -- Week 5

吴炳华

极客大学架构师训练营

负载均衡(Load Balance)

陈皮

【架构师训练营】第五周总结

Mr.hou

极客大学架构师训练营

MQ 核心概念

陈皮

架构师训练营 第五周 基于虚拟节点的一致性Hash算法作业

且听且吟

极客大学架构师训练营

架构师训练营第五章作业

吴吴

架构师训练营第五章总结

吴吴

UC Token即将强势登陆

Geek_116789

互联网中的缓存

陈皮

Intellij IDEA必备插件,提高效率的“七种武器”

码农神说

面试 IDEA idea插件

第5周总结

娄江国

极客大学架构师训练营

「架构师训练营」Week5作业

Frank Zeng

【架构师训练营】第五周作业

Mr.hou

极客大学架构师训练营

架构师训练营第五周总结

sunnywhy

阿里巴巴、百度、美团都在用的 Spring Cloud 微服务架构

java通天架构哪吒

Spring Cloud SpringCloud

架构师训练营第五周作业

王铭铭

架构师训练营第5周总结

时来运转

Pinterest如何将JavaScript测试速度提升了15倍_JavaScript_谢丽_InfoQ精选文章