在软件中,机能一向扮演侧重要的角色。在Web应用中,机能变得加倍重要,因为如不雅页面速度很慢的话,用户就会很轻易转去拜访我们的竞争敌手的网站。作为专业的web开辟人员,我们必须要推敲这个问题。有很多“古老”的关于机能优化的最佳实践在今天依然可行,例如最小化请求数量,应用CDN以及不编写壅塞页面衬着的代码。然而,跟着越来越多的web应用都在应用JavaScript,确保我们的代码运行的很快就变得很重要。
假设你有一个正在工作的函数,然则你困惑它运行得没有期望的那样快,并且你有一个改良它机能的筹划。那怎么去证实这个假设呢?在今天,有什么最佳实践可以用来测试JavaScript函数的机能呢?一般来说,完成这个义务的最佳方法是应用内置的performance.now()函数,来衡量函数运行前和运行后的时光。
Performance.now()
高分辨率时光API供给了一个名为now()的函数,它返回一个DOMHighResTimeStamp对象,这是一个浮点数值,以毫秒级别(精确到千分之一毫秒)显示当前时光。零丁这个数值并不会为你的分析带来若干价值,然则两个如许的数值的差值,就可以精确描述以前了若干时光。
这个函数除了比内置的Date对象加倍精确以外,它照样“单调”的,简单说,这意味着它不会受操作体系(例如,你标记本上的操作体系)周期性修改体系时光影响。更简单的说,定义两个Date实例,计算它们的差值,并不代表以前了若干时光。
我们可以大年夜别的一种门路来解释它,即想象应用它来在一年中让时钟向前或者向后改变。例如,当你地点国度的时钟都赞成略过一个小时,以便最大年夜化应用日间的时光。如不雅你在时钟修改之前创建了一个Date实例,然后在修改之后创建了别的一个,那么查看这两个实例的差值,看上去可能像“1小时零3秒又123毫秒”。而应用两个performance.now()实例,差值会是“3秒又123毫秒456789之一毫秒”。
在这一节中,我不会涉及这个API的过多细节。如不雅你想进修更多相干常识或查看更多若何应用它的示例,我建议你浏览这篇文┞仿:Discovering the High Resolution Time API。
既然你知道高分辨率时光API是什么以及若何应用它,那么让我们持续深刻看一下它有哪些潜在的缺点。然则在此之前,我们定义一个名为makeHash()的函数,在这篇文┞仿残剩的部分,我们会应用它。
- function makeHash(source) {
- var hash = 0;
- if (source.length === 0) return hash;
- for (var i = 0; i < source.length; i++) {
- var char = source.charCodeAt(i);
- hash = ((hash<<5)-hash)+char;
- hash = hash & hash; // Convert to 32bit integer
- }
- return hash;
- }
我们可以经由过程下面的代率攀来衡量这个函数的履行效力:
- var t0 = performance.now();
- var result = makeHash('Peter');
- var t1 = performance.now();
- console.log('Took', (t1 - t0).toFixed(4), 'milliseconds to generate:', result);
如不雅你在浏览器中运行这些代码,你应当看到类似下面的输出:
例如,我们欲望有一个函数,当特定的字符串在一个字符串数组中存在时,函数返回true或者false,但这个函数在比较字符串时不关怀大年夜小写。换句话说,我们不克不及直接应用Array.prototype.indexOf办法,因为这个办法是大年夜小写敏感的。下面是这个函数的一个实现:
- Took 0.2730 milliseconds to
推荐阅读
正则表达式是一种字符模式,用于在查找过程中匹配制订的字符。元字符平日在Linux平分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式元字符,由vi/grep/sed/awk等文本处理>>>详细阅读
本文标题:测试JavaScript函数的性能
地址:http://www.17bianji.com/lsqh/36647.html
1/2 1