【发布时间】:2018-04-15 11:35:19
【问题描述】:
我注意到在 C++ 中打印到控制台的时间似乎比在 Javascript 中要长,但我预计会适得其反。我在 JS 和 C++ 中创建了这两个 fizzbuzz 测试:
JS
window.onload = function()
{
console.time("test");
for(var i = 0; i < 10001; i++)
{
if(i % 3 == 0 && i % 5 == 0)
{
console.log(i + " -- fizzbuzz \n");
}
else if(i % 3 == 0)
{
console.log(i + " -- fizz \n");
}
else if(i % 5 == 0)
{
console.log(i + " -- buzz \n");
}
}
console.timeEnd("test");
}
C++
#include "stdafx.h"
#include <cstdio>
#include <ctime>
int main()
{
std::clock_t start;
double duration;
start = std::clock();
for (int i = 0; i < 10001; i++)
{
if (i % 3 == 0 && i % 5 == 0)
{
printf("%d -- fizzbuzz \n", i);
}
else if (i % 3 == 0)
{
printf("%d -- fizz \n", i);
}
else if (i % 5 == 0)
{
printf("%d buzz \n", i);
}
}
duration = ((std::clock() - start) / (double)CLOCKS_PER_SEC);
printf("duration: %f \n", duration);
std::getchar();
return 0;
}
结果
JS
492.54 毫秒 498.77 毫秒 502.36ms
C++
2017 毫秒 2149 毫秒 2357毫秒
谁能解释一下为什么像 C++ 这样的编译语言会比像 Javascript 这样的解释型弱类型语言慢 4 倍?我意识到我进行测试的方式可能存在问题,但我只是好奇问题可能是什么。
【问题讨论】:
-
你是怎么编译的?请务必启用优化。
-
显而易见的问题,您是否在启用优化的情况下进行编译?
-
公平地说,你在 c++ 案例中比在 javascript 案例中多执行一次迭代。
-
您是在比较浏览器控制台和终端控制台(或 C++ 程序打印的任何地方)的输出速度,而不是 JS 和 C++ 的速度。
-
"stdafx.h" 建议您在 Visual Studio 中运行它,对吗?我在 Mac 终端中测试了 C++ 版本,运行时间为 8 毫秒。同一终端中的 Node.js 版本约为 100 毫秒。在浏览器控制台中,550 毫秒。
标签: javascript c++ performance console performance-testing