電電高専生日記

高専生活・電子工作・プログラミングの活動記録。とっくに高専生ではない
2015-06-26 (Fri)

C++とJavaScriptの実行速度を比較してみました

前置き

C++JavaScript実行速度を比較してみました。
なんでそんなことをしたかというと、卒研で組むプログラムの言語をどちらにしようかと悩んでいたことから始まります。
私の研究はシミュレーションが主なので、高速に動作するC++を選ぶのがどう考えてもベターなのですが… 出来ることなら、自分が(C++よりは)使い慣れているJavaScriptでプログラムを書きたかったのです。
しかしまぁJavaScriptで書くメリットなんてそれ以外何もないし、卒研の時間はたっぷりあるので多少面倒でもC++で書くべきだろうとは思っていました。で、実際どれくらい速いのかなと思い、実際に体感してみたいと思いました。
1000万回の単純for文ループを、JavaScriptをWEBブラウザで実行した場合、JavaScriptをコマンドプロンプトで実行した場合、C++をVisual Studioでビルド実行した場合のそれぞれについて計測しました。

JavaScript ①:WEBブラウザで実行した場合

Chrome(43.0.2357.130m)のJavaScriptコンソールで、以下のプログラムを実行した。

var begin = new Date(); //計測開始
for (var i=0; i<10000000; i++); //一千万回ループ
var end = new Date(); //計測終了
var dt=end-begin;  //一千万回ループに掛かった時間
console.log(dt);

結果:10735 (ms)

JavaScript ②:コマンドプロンプトで実行した場合

Windows7(Home Premium)のコマンドプロンプトで、以下のプログラムを実行した。

var begin = new Date(); //計測開始
for (var i=0; i<10000000; i++); //一千万回ループ
var end = new Date(); //計測終了
var dt=end-begin;  //一千万回ループに掛かった時間
WScript.Echo(dt);

結果:1388 (ms)

C++ :Visual Studioでビルド実行した場合

Visual Studio(Express 2010 C++)のWin32 コンソールアプリケーション開発(空のプロジェクト)で、以下のプログラムを実行した。

#include <stdio.h>
#include <time.h>
void main(){
	clock_t begin = clock(); //計測開始
	for (int i=0; i<10000000; i++); //一千万回ループ
	clock_t end = clock(); //計測終了
	int dt = ((double)(end - begin))/CLOCKS_PER_SEC*1000; //一千万回ループに掛かった時間
	printf("%d\n", dt);
}

結果:38 (ms)

まとめ

:10735 (ms)
:*1388 (ms)
:***38 (ms)

やっぱC++は桁外れに速いですね。
いいコンピュータを使えばJavaScriptの実行速度ももっと上がるかもしれませんが、C++に比べれば大して変わらないようなものかもしれません。
というわけで今はC++で卒研に使うプログラムを組んでます。

[Tag] * JavaScript * 卒研
Last Modified : 2015-06-26

Comment






非公開コメント
ちなみに「JavaScriptコンソール」はそのブラウザの実行速度ですね。
できれば、それを Node.jsで試してみてください^^
2015-08-02-14:36 高橋
[ 返信 ]
Re: タイトルなし
アドバイスありがとうございます(^^)
2015-08-16-17:22 elkosendiary
[ elkosendiary 様へ')" title="このコメントに返信する">返信 ]
CでなくC++を使うということで、クラスを使うなら面倒でしょうが
JavaScriptで書いたコードをCかC++にコンバートするという手も(型面倒ですが)
C++だと全部初期化時点で代入してあればAutoで受けれるので便利です

もしかしたらちょっとの手間で出来るかもしれないです
2015-09-03-17:49 名無しさん
[ 返信 ]
Re: タイトルなし
ありがとうございます(^^)
しかし、既にC++でプログラムを組み終わりました。
あまり大規模なプログラムでもないので、クラスを書くことはなかったです。
アドバイスありがとうございました。
2015-09-05-17:07 elkosendiary
[ elkosendiary 様へ')" title="このコメントに返信する">返信 ]
バージョン: 63.0.3239.132(Official Build) (64 ビット)
では64msでした。
2018-02-02-20:18 名無しさん
[ 返信 ]