我们运行膳绫擎的代码, 可以得出如下的输出:
- true
- false
- true
- false
- isIn1 took 0.0050
- isIn2 took 0.0150
这个示例的在线演示如下所示:
或许你已经完美的意识到console.log方法是弗成以猜测的。然则履行多个函数同样是缺点的,即使每个函数都不会触发I/O操作。例如:
到底产生了什么?第一个函数的速度要快3倍!那不是我们假设的情况。
其实假设很简单,然则有些奥妙。第一个函数应用了haystack.forEach办法,浏览器的JavaScript引擎会为它供给一些底层的优化,然则当我们应用数据索引技巧时,JavaScript引擎没有供给对应的优化。这告诉我们:在真正测试之前,你永远不会知道。
结论
在我们试图解释若何应用performance.now()办法获得JavaScript精确履行时光的过程中,我们有时发清楚明了一个基准场景,它的运行结不雅和我们的直觉相反。问题在于,如不雅你想要编写更快的web应用,我们须要优化JavaScript代码。因为计算机(几乎)是一个活生生的器械,它很难猜测,有时会带来“惊喜”,所以如不雅懂得我们代码是否运行更快,最靠得住的方法就是编写测试代码并进行比较。
当我们有多种方法来做一件工作时,我们不知道哪种方法运行更快的另一个原因是要推敲高低文。在上一节中,我们履行一个大年夜小写不敏感的字符串萌芽来寻找1个字符串是否在其它26个字符串中。当我们换一个角度来比较1个字符串是否在其他100,000个字符串中时,结论可能是完全不合的。
膳绫擎的列表不是很完全的,因为还有更多的缺点须要我们去发明。例如,测试不实际的场景或者只在JavaScript引擎上测试。然则肯定的是对于JavaScript开辟者来说,如不雅你想编写更好更快的Web应用,performance.now()是一个很棒的办法。最后但并非最不重要,请谨记衡量履行时光只是“更好的代码”的一不和。我们还要推敲内存消费以及代码复杂度。
一种方法是去计算后面9次的平均时光。别的一种加倍应用的方法是收集所有的结不雅,然后计算“中位数”。根本上,它会将所有的结不雅分列起来,对结不雅进行排序,然后取中心的一个值。这是performance.now()函数如斯有效的处所,因为无论你做什么,你都可以获得一个数值。
怎么样?你是否曾经应用这个函数来测试你的代码机能?如不雅没有,那你是怎么来测试机能的?请鄙人面的评论平分享你的设法主意,让我们开端评论辩论吧!
【编辑推荐】
- 大年夜指向看JavaScript中的可贵
- 在Node.js中应用MySQL&MySQL JavaScript客户端
- 现代前端开起身术栈
- 前端实现文件的断点续传
- JavaScript进阶之深刻懂得数据双向绑定
“单调性”的数学定义是“(一个函数或者数值)以大年夜不削减或者大年夜不增长的方法改变”。
推荐阅读
正则表达式是一种字符模式,用于在查找过程中匹配制订的字符。元字符平日在Linux平分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式元字符,由vi/grep/sed/awk等文本处理>>>详细阅读
本文标题:测试JavaScript函数的性能
地址:http://www.17bianji.com/lsqh/36647.html
1/2 1