Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么打印到javascript控制台比打印到C++;安慰 我注意到,在C++中控制台的打印时间比JavaScript中的要长,但我本来期望相反。我用JS和C++创建了这两个fizzbuzz测试:_Javascript_C++_Performance_Console_Performance Testing - Fatal编程技术网

为什么打印到javascript控制台比打印到C++;安慰 我注意到,在C++中控制台的打印时间比JavaScript中的要长,但我本来期望相反。我用JS和C++创建了这两个fizzbuzz测试:

为什么打印到javascript控制台比打印到C++;安慰 我注意到,在C++中控制台的打印时间比JavaScript中的要长,但我本来期望相反。我用JS和C++创建了这两个fizzbuzz测试:,javascript,c++,performance,console,performance-testing,Javascript,C++,Performance,Console,Performance Testing,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)

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"); 
}
window.onload=function()
{
控制台。时间(“测试”);
对于(变量i=0;i<10001;i++)
{
如果(i%3==0&&i%5==0)
{            
console.log(i+“--fizzbuzz\n”);
}
如果(i%3==0),则为else
{
console.log(i+“--fizz\n”);
}
else如果(i%5==0)
{
console.log(i+“--buzz\n”);
}                
}
控制台。时间结束(“测试”);
}
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;
}
#包括“stdafx.h”
#包括
#包括
int main()
{
std::时钟未启动;
双倍持续时间;
开始=标准::时钟();
对于(int i=0;i<10001;i++)
{
如果(i%3==0&&i%5==0)
{
printf(“%d--fizzbuzz\n”,i);
}
如果(i%3==0),则为else
{
printf(“%d--fizz\n”,i);
}
else如果(i%5==0)
{
printf(“%d buzz\n”,i);
}
}
持续时间=((标准::时钟()-开始)/(双)时钟/秒);
printf(“持续时间:%f\n”,持续时间);
std::getchar();
返回0;
}
结果

JS

492.54毫秒 498.77ms 502.36毫秒

C++

2017ms 2149ms 2357ms


可以解释为什么像C++这样的编译语言比一个解释的、弱类型的语言(比如JavaScript)要慢4倍?我意识到我如何进行测试可能有问题,但我只是好奇这个问题可能是什么。

您正在两个不同的环境中测试它。为了使它成为一个公平的测试,我决定在类似的环境中测试它(与
cat/proc/cpuinfo
报告的相同主机,2GHz AMD A10-6800K处理器):

Javascrtipt-在Linux上使用
节点
二进制版本0.10.25,从bash提示符执行。结果在83ms左右一致。我必须删除
window.onload
wrapper,否则它就是您的代码

C++-我必须删除stdafx.h中包含的
stdafx.h
,才能让它进行编译。我还删除了对
getchar()
的调用,因为这是不必要的。我使用默认的g++4.8.4进行编译,然后再次从bash提示符运行它。结果在10ms到20ms之间变化

当我将标准输出重定向到文件时,JavaScript在42MS中执行,而C++则使用了1毫秒

对于这种类型的工作负载,当比较本机二进制编译语言和即时编译语言时,这是一个在预期范围内的结果。但是,请注意,当代码是I/O重时,如您的示例中所示,差异将在很大程度上被抵消,并且如果您在不同的I/O子系统中进行测试,则无论其余代码的效率如何,I/O速度更快的子系统将获胜

<> P>我相信C++中观察到的2000 ms量级的结果与你正在使用的控制台(Windows默认CMD.EXE)连接,在标准输出处理中效率不高。
注意,我确实用
strace
验证了在我的测试中,在这两种情况下,I/O都是以类似的方式进行的——重复调用
write()
——每行一个。例如,如果一个是缓冲,而另一个不是缓冲,可能会产生很大的差异,足以抵消其余代码中的速度差异。

您是如何编译的?确保优化。启用了优化的问题,你是否编译了优化?公平地说,在C++案例中,你比JavaScript案例中的迭代更多。你正在比较浏览器控制台和终端控制台(或者C++程序的任何地方)的输出速度,而不是JS和C++的速度。建议您在Visual Studio中运行此功能,对吗?我在MAC终端测试了C++版本,它运行在8毫秒。在同一终端中,NoDE.js版本大约为100毫秒。在浏览器控制台中,550毫秒我在Windows 10上运行它,得到100毫秒,无论是从控制台运行还是从VS IDE运行。OP出错了。我使用g++和-O3标志重新编译,并将其降到150毫秒。