计算代码性能
对代码进行基准测试是维护高质量代码的重要步骤。语言本身是“快”还是“慢”并不重要,因为每种语言都有其目标平台,需要在那个平台上发挥最佳性能。
JavaScript 基准测试代码
在 JavaScript 中,有一种非常简单的方法来衡量代码的性能,这对于在 Web 浏览器的客户端轻松进行测试非常有用。
我们来看一个例子:
function reallyExpensiveFunction() {
for (let i = 0; i < 10000; ++i) {
console.log("Hi\n");
}
}
console.time('reallyExpensiveFunction');
console.timeEnd('reallyExpensiveFunction');
我们可以使用函数console.time来开始和console.timeEnd结束我们的测试,从而对我们的函数进行测试。
以下是您可能会得到的输出结果。
您可以在repl-it上尝试这个例子。
C 基准测试代码
信不信由你,同样的 C 语言代码与 JavaScript 示例非常相似。
我们来看一个例子:
#include <stdio.h>
#include <time.h>
void really_expensive_function() {
for (int i = 0; i < 10000; ++i) {
printf("Hi\n");
}
}
int main() {
clock_t start = clock();
really_expensive_function();
clock_t end = clock();
printf("Took %f seconds\n", (((float)(end-start) / CLOCKS_PER_SEC)));
return 0;
}
clock_t在我的机器上,`typedef` 是 `typedef` 的对应值long,你的机器上可能也一样。尽管如此,你仍然应该使用它,clock_t因为它在不同的机器上可能有所不同。我们会获取执行高开销函数前后的系统时间,从而得到以秒为单位的耗时。
您可以在repl-it上尝试这个例子。
以下是您可能会得到的输出结果。
了解现实
这些示例非常适合测试小段代码,但对于需要进行复杂基准测试的大型代码库来说并不实用。
复杂基准测试
- 分析
- 性能分析器究竟有什么作用?程序性能分析器使开发人员能够测量程序中函数的空间复杂度和时间复杂度。如果程序存在导致运行缓慢的重大瓶颈,这一点尤为重要;对于请求量大的系统来说,这种情况尤其糟糕。Orbit 就是这样一款工具,它可以将程序中的性能瓶颈可视化。
- IO 操作基准测试
- I/O 操作是指接收用户输入或读写系统文件的操作,主要需要操作系统内核的调用。这些操作通常是程序中最耗时的操作。然而,由于程序员无法控制系统调用所花费的时间,因此最好减少系统调用的次数以提高性能。
- 分布式系统
- 这些系统非常复杂,因此必须确保系统性能得到有效监控。通常情况下,这是因为每台计算机的配置都不尽相同,因此很难准确评估其性能。不同的计算机拥有不同的CPU、网络接口和配置,并且这些计算机还会与路由器和其他网络系统交互,这些系统之间相互通信,从而影响性能的计算方式。因此,最好采用相对基准测试来确定此类系统的性能,或者采用足以让开发团队评估程序的基准测试。
资源
JavaScript:
对于 JavaScript,已经有一些不错的基准测试工具,其中最值得一提的是Benchmark.js和Bench-Rest。使用这些工具可以让你更准确地测试代码的性能。通常来说,你应该使用已经过测试、性能符合要求的软件进行基准测试,因为现在展示的示例代码往往比较简单,可能无法提供你想要的所有结果。
C++:
C++ 拥有相当多的基准测试库,其中一些较新的库利用了 C++20 的灵活性。最著名的是Google Bench和UT。C语言没有太多专门的基准测试库,但您可以轻松地将 C 代码与 C++ 基准测试库集成,从而测试 C 代码的性能。
结论
最终,如何对代码进行基准测试取决于您自己。通常,您应该先编写项目代码,然后再进行基准测试。如果性能确实是您关注的问题,那么您可以选择使用这些基准测试库,或者使用性能分析工具来查找瓶颈。希望您今天有所收获 :)。
文章来源:https://dev.to/aboss123/calculate-your-code-performance-1hai

