概要
結構な数のループ処理を書くことになり、当初PHPで書いていたのですがあまりに遅く、、、
PHPでも処理を早くする書き方など色々と調べたのですが、最終的に言語を変えてNode.jsを使ったらだいぶ早くなったのでそれをまとめます。
PHP vs Node.js
約50万×100のループ
node.js(6.9.1) | 2.605220秒 |
---|---|
PHP(7.0.12) | 25.499058008194秒 |
コードはこんな感じです。
console.log(array1.length); // 100
console.log(array2.length); // 500000
for (var i = 0, len1 = array1.length; i < len1; i++) {
for (var k = 0, len2 = array2.length; k < len2; k++) {
// 簡単なif文
if (テキトーな条件) {
}
}
}
$i = 0;
while ($i < 100) {
$k = 0;
while ($k < 500000) {
// 簡単なif分
if (テキトーな処理) {
}
++$k;
}
++$i;
}
結果、PHPよりNode.jsの方が速い
細かい比較
foreach vs while (PHP)
約50万×100のループ処理
while | 25.576475143433 秒 |
---|---|
foreach | 35.914368867874 秒 |
++$i vs $i++ (PHP)
約50万件のループ処理
++$i | 0.0043938159942627 秒 |
---|---|
$i++ | 0.0054738521575928 秒 |
'==' vs '===' (PHP)
約50万×100のループ処理(if分でイコール比較が計6回ある)
=== | 25.329814910889 秒 |
---|---|
== | 30.264646053314 秒 |
forEach vs for (Node.js)
約50万×100のループ処理
for | 0.054ms |
---|---|
forEach | 6060.262ms |
感想
とりあえず結果的にはPHPよりNode.jsの方がループ処理するには早かったです。
普段はPHPメインで触っているので、なんでもPHPで書き始めると以外と落とし穴があるなと感じました。。
例えば今回は最終的には50万×50万のループ処理をする必要があって、上記内容だと
PHPだと約34時間かかって、Node.jsにすると約3.6時間かかる見積もりです。
(34時間も待ってられないし。。)
他にはGo言語とかだと速いだろうなと思って、そっちを試そうかと思ったのですが、
Node.jsの方がお手軽かなという理由でNode.jsと比較しました。
あと調べると結構こっちの書き方の方が速いというのがあるのですが、
サイトによって全然バラバラだったりします。。
もちろん実行環境や処理の内容によって微妙にずれるので、その辺はしょうがないと思いますが。
なので実際に自分で計測するのが一番確実な気がします。笑