19
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

処理速度比較 PHP vs Node.js

Last updated at Posted at 2017-01-11

概要

結構な数のループ処理を書くことになり、当初PHPで書いていたのですがあまりに遅く、、、
PHPでも処理を早くする書き方など色々と調べたのですが、最終的に言語を変えてNode.jsを使ったらだいぶ早くなったのでそれをまとめます。

PHP vs Node.js

約50万×100のループ

node.js(6.9.1) 2.605220秒
PHP(7.0.12) 25.499058008194秒

コードはこんな感じです。

test.js
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 (テキトーな条件) {
         }
    }
}
test.php
$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と比較しました。

あと調べると結構こっちの書き方の方が速いというのがあるのですが、
サイトによって全然バラバラだったりします。。
もちろん実行環境や処理の内容によって微妙にずれるので、その辺はしょうがないと思いますが。
なので実際に自分で計測するのが一番確実な気がします。笑

参考資料

PHP

言語選定

js

19
15
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?