在软件中,性能一直扮演着重要的角色。在网络应用中,性能就显得尤为重要,因为如果页面速度慢,用户很容易转而去我们竞争对手的网站。作为专业的网络开发人员,我们必须考虑到这一点。有许多关于性能优化的“旧”最佳实践在今天仍然有效,例如最小化请求数量、使用CDN以及不编写阻塞页面呈现的代码。然而,随着越来越多的Web应用程序使用JavaScript,确保我们的代码快速运行变得很重要。假设您有一个正在运行的函数,但您怀疑它的运行速度没有您希望的那么快,并且您有提高其性能的计划。那么你如何着手证明这个假设呢?今天测试JavaScript函数性能的最佳实践是什么?一般来说,完成这个任务的最好方法是使用内置的performance.now()函数,测量函数运行前后的时间。在本文中,我们将讨论如何衡量代码运行时间和避免一些常见陷阱的技术。Performance.now()高分辨率时间API提供了一个叫做now()的函数,它返回一个DOMHighResTimeStamp对象,它是一个浮点值,以毫秒为单位显示当前时间(精确到毫秒的千分之一)。这个数字本身不会为您的分析增加多少价值,但两个这样的数字之间的差异可以准确描述已经过去了多少时间。除了比内置的Date对象更准确之外,该函数还是“单调的”,这简单地说它不受操作系统(例如,笔记本电脑上的操作系统)周期性更改系统时间的影响。更简单地说,定义两个Date实例并计算它们的差异并不代表已经过去了多少时间。“单调性”的数学定义是“(函数或值)以永不减少或永不增加的方式变化”。我们可以用另一种方式来解释它,想象一下用它在一年中将时钟向前或向后移动。例如,当您所在国家/地区的时钟都同意跳过一个小时以最大限度地利用白天时。如果您在修改时钟之前创建了一个Date实例,然后又创建了另一个实例,查看这两个实例之间的差异,它可能看起来像“1小时3秒123毫秒”。对于两个performance.now()实例,差异将是“3秒123毫秒456789毫秒”。在本节中,我不会详细介绍这个API。如果您想了解更多信息或查看有关如何使用它的更多示例,我建议您阅读这篇文章:发现高分辨率时间API。现在您已经知道什么是高分辨率时间API以及如何使用它,让我们继续深入了解它的一些潜在缺点。但在此之前,我们定义了一个名为makeHash()的函数,我们将在本文的其余部分中使用它。函数makeHash(source){varhash=0;if(source.length===0)returnhash;for(vari=0;i
