ここから本文です

とあるコミュニティサイト運営会社がPHPから、Node.jsに移植中で、エンジニア募集...

hat********さん

2014/5/819:52:42

とあるコミュニティサイト運営会社がPHPから、Node.jsに移植中で、エンジニア募集と採用ページに書いてあったのを見て、ふと思ったのですが、PHPとNode.jsとやらで出来ることにどんな違いがあるんでしょうか?

閲覧数:
4,481
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

編集あり2014/5/1101:15:42

hatopoppomamepoppoさん 、PHPとNODE.JS(javaScript)の比較ですね。

結局「NODE.JSの方が性能が良い」とは言えるのですが、評価観点は要注意です。

・スループットによる比較では、同等
まず、javaScriptの代入文の書式となっているJSON形式データのダウンロードというJavaScriptで記述されたNode.JS側に有利な性能比較でも、下記URLのデータだと、PHPで記述されたサーバと タイシテ変わりません。
http://www.techempower.com/benchmarks/#section=data-r9&hw=i7&test=j...
このサイトは、各種言語の使い手がインディレースのように、競って更新されている性能比較サイトです。
node.js(JavaScript)が 69,563回/秒 応答できたのに対して
phpだと 67,366 69,563回/秒。
これらは、 第9ラウンドでは、偶々 僅差で、このような比較結果で、次のラウンドで入れ替わりそうな差しかありません。
でも、servlet(Java) 211,618回/秒の3分の1程度なので、当分javaを追い抜くことは無いでしょう。

・応答時間では、高速なPHP風の環境を作ったチームも居るらしい
下記URLで、トップ性能になっているhhvmというのは、zendo社のPHPの代わるPHP風環境を作り、さらにJavaのように、JITコンパイラでネイティブなマシン語に変換しながら走る機能まで追加されています。
http://www.techempower.com/benchmarks/#section=data-r9&hw=i7&test=u...

http://www.publickey1.jp/blog/13/facebookphpjithhvm_2217cpulinux.ht...
「FacebookがPHPのJITコンパイラ「HHVM 2.2」リリース。17%のCPU効率改善。Linuxディストリビューション用パッケージを用意」
でも、これはGPLライセンスなので、Facebook社以外には、使いにくいでしょう。
しかも、PHP風の記述言語が使えるだけで、100%zendo社のPHPと互換性があると保証されたものでもなさそうです。

この他に、PHPのライブラリ部分を高速化したPhalconというのも在るようですが、まだ、上記の性能競争のサイトに名前が上がるほどにはポピュラーにはなっていあにようです。

・PHPとNode.jsの性能比較で、決定的に違うのは、同時期の最大接続数でしょう。

PHPは、クライアント・ブラウザ側との接続にOSのスレッドを1対1で消費しているので、OSのSocketのopen可能な上限値を越える同時接続が出来ません。
それは、1千接続か、少々OSをチューニングしても4千接続程度です。
一方、Node.JsやJava言語では、webSocketと言って、C10n(1万を超える同時接続)が可能な、通信プロトコルをサポートしています。
サーバから観ると、チャットのように、ユックリ、マバラにアクセスするのに、何時までもつながり続けているのが、open中のsocketを占有されることになり、実現困難なのです。
でも、Node.Jsには、1個のHTTPプロトコル通信用のsocketを、複数人で分割共用できるようなテクニックが実現されたwebSocketをサポートしているので、1万人を超えてつなぐことができるチャットが簡単に記述できるのです。
例えば、下記URLを開いて”Run”ボタンを押すと、マルチプレイヤでお絵かきチャットができるURLが活性化します。
http://runnable.com/U1IxKJmPnE87np8c/canvas-of-multiplayer-with-nod...

上記URLでのJavaScriptの記述量は200行程度ですが、それだけで、1万人程度まで同時期に、同じcanvasに気ままに線を描ける(他の999人の描画内容がブロードキャストされる)らしいです。
でも、PHPや、PHPの前段に繋ぐApatch httpサーバは、そんなに沢山の人にブロードキャストできるほど、connectできません。

・バックエンド・サーバの性能の確保し易さ
PHPのバックエンドとして接続可能なのは、MySQL等のSQL型DBサーバ位でしょう。 そのSQLサーバ上で動作するストアドプロシジャの構文は、PHPとは全く異なるモノで、使うのも面倒でしょう。

でも、javaScriptだと、Redisなどの、ストアドプロシジャの構文もJavaScriptで、非同期処理を行ってくれるバックエンドサーバがあります。
Node.jsでも、SQLサーバを単にデータの格納庫として使うこともできますが、さらに長時間走行するバッチ的な処理を非同期で実行させると、フロントエンド・ブラウザには速やかに応答を返すことができて、”エンドユーザ”にとって快適なサーバとすることができるでしょう。
http://vitalify.jp/blog/2012/10/websocket%E3%81%A7%E3%83%81%E3%83%A...
「WebSocketでチャットアプリを作る with Redis&Node.js」

--
ツイデに、拙作 知恵袋の紹介。
http://note.chiebukuro.yahoo.co.jp/detail/n241320
このURLの下のほうに、Node.jsと その他のミドルウェアとを組み合わせた事例等へのリンク集を掲載しています。

質問した人からのコメント

2014/5/11 02:05:18

お二方とも大変詳しくありがとうございました。
より、聞きたいことに近い回答をくださった方をベストアンサーにさせていただきますね。
これで競合が何をしようとしているかが見えてきました。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

mpywさん

編集あり2014/5/908:33:00

Node.jsの方が高速で、同時リクエストで負荷がかけられたときにも強いとよく言われますね。

しかし…興味深い記事を見つけました↓
http://blog.ohgaki.net/benchmark-node-js-sails-php-phalcon

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる