性能测试和调优

这一趴我还觉得蛮有趣的。更新了我的知识库。

性能测试和调优的目的不是为了满足 对微观性能调优的沉迷,比如某个 JavaScript 引擎上运行 ++a 是不是会比 a++ 快。本章更 重要的目标是弄清楚哪些种类的 JavaScript 性能更重要,哪些种类则无关紧要,以及如何 区分

常规的做法是:

var start = (new Date()).getTime(); // 或者Date.now()  
 
// 进行一些操作  
 
var end = (new Date()).getTime();  
 
 console.log( "Duration:", (end - start) ); 

平台的精度有关

报告的时间是 0,可能你会认为它的执行时间小于 1ms。但是,这并不十分精确。有 些平台的精度并没有达到 1ms,比如,Windows(也 就是 IE)的早期版本上的精度只有 15ms,这就意味着这个运算的运行时间至少需要这么 长才不会被报告为 0 !

测试环境是否优化

更麻烦的是,你也不知道这个运算测试的环境是否过度优化了。有可能 JavaScript 引擎找 到了什么方法来优化你这个独立的测试用例,但在更真实的程序中是无法进行这样的优化 的,那么这个运算就会比测试时跑得慢。

引擎或者系统是否受到影响

不管报告的时长是多少,你能知道的唯一一点就是,这个运算的这次特定的运行消 耗了大概这么长时间。而它是不是总是以这样的速度运行,你基本上一无所知。你不知道 引擎或系统在这个时候有没有受到什么影响,以及其他时候这个运算会不会运行得更快。

数学平均可能会让某一次的误差扩散

简单的数学平均值绝对不足以对你要外推到整个应用范围的性能作出判断。迭代 100 次, 即使只有几个(过高或过低的)的异常值也可以影响整个平均值,然后在重复应用这个结 论的时候,你还会扩散这个误差,产生更大的欺骗性。

 

有些区别太小,以至于没必要

如果 X 需要 100ns,而 Y 需要 80ns,那么差别就是 20ns,这在最好情况下也只是人类大脑 所能感知到的最小间隙的 65 万分之一。

引擎优化
有时候引擎会因为固定输入而产生了优化。但是在真实的程序中输入并不一定是固定的。

多环境测试

// 用例1 
 var x = false;  var y = x ? 1 : 2;  
 
// 用例2  
var x = undefined;  var y = x ? 1 : 2;
用例2实际上还有一个类型转换的过程;

如果你想要得到可靠的测试结论的话,就需要在很多不同的环境(桌面浏览 器、移动设备,等等)中测试汇集测试结果;

高端桌面机器的性能很可能和智能手机上 Chrome 移动设备完全不 同。而电量充足的智能手机上的结果可能也和同一个智能手机但电量只有 2% 时完全不同, 因为这时候设备将会开始关闭无线模块和处理器。
 

测试是不是对等

// 用例1  
var x = false;  var y = x ? 1 : 2;  
 
// 用例2 
 var x;  var y = x ? 1 : 2; 

用例2 还涉及到类型转换;

 

优化关注点

花费在优化关键路径上的时间不是浪费,不管节省的时间多么 少;而花在非关键路径优化上的时间都不值得,不管节省的时间多么多。

如果你的代码在关键路径上,比如是一段将要反复运行多次的“热”代码,或者在用户会 注意到的 UX 关键位置上,如动画循环或 CSS 风格更新,那你就不应该吝惜精力去采用有 意义的、可测量的有效优化。

 


尾递归优化

es6的一个内容。

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介 6 1 概述 7 1.1. 性能测试目标 7 1.2. 性能测试类型 7 1.3. 性能测试阶段 7 1.4. 性能测试过程 8 2 分析性能需求 8 2.1. 了解系统性能需求 8 2.2. 建立数据模型 9 2.3. 分析性能需求、确定合理性能目标: 9 3 制定性能测试计划 10 3.1. 测试环境 10 3.2. 测试软件 11 3.3. 测试人员 11 3.4. 测试目标 11 3.5. 测试日程 11 4 设计场景 11 4.1. 设计性能测试的测试案例 12 4.2. 性能测试案例设计模板 12 4.3. 设计场景示例 12 5 根据场景编写程序、编写脚本、修改应用系统等; 13 5.1. 程序编写 13 5.2. 脚本编写 13 5.3. 应用程序修改 13 6 执行性能测试 14 6.1. 准备性能测试环境 14 6.2. 执行性能测试 15 6.2.1 执行性能测试 15 6.2.2 常用监控指标 15 6.2.3 执行性能测试基本原则 15 6.3. 分析测试结果 15 6.3.1 分析测试结果 15 6.3.2 性能问题分析原则 16 6.3.3 常见性能问题及成因 16 6.3.4典型性能问题的诊断 16 6.3.5性能问题分析示例 16 6.4. 性能调优 19 6.4.1 调优基本原则 19 6.4.2 调优的基本步骤 19 6.4.2 调优的内容 19 6.5. 性能回归测试 20 6.6. 测试报告 20 7 附录 20 7.1附录1:执行性能测试基本原则 20 7.2附录2:性能问题分析原则 21 7.3附录3:常见性能问题及成因 21 7.4附录4:常用监控指标 23 7.5附录5:如何诊断数据库的性能问题 23 7.6附录6:调优原则 25 7.7附录7:调优的基本步骤 25 7.8附录8:性能测试案例设计模板 26 7.8.1 预期性能指标测试案例模板 26 7.8.2 用户并发测试案例模板 26 7.9附录9:LoadRunner性能测试工具简介 27 7.10附录10:Jmenter性能测试工具简介 28 7.11附录11:Jprofiler性能监控工具简介 33

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值