回答編集履歴
2
データベース絡みの記述を調整
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
結論としては、スクリプト言語にそんなに期待しないで下さい。
|
2
|
-
|
2
|
+
ネイティブの1/10とか1/20とかそんなもんです。
|
3
3
|
|
4
4
|
> for文のみなのに何か間違いがあるんじゃないか
|
5
5
|
|
@@ -7,10 +7,9 @@
|
|
7
7
|
でも、所詮噂であり、言語特性の一面に過ぎないわけですね。
|
8
8
|
つまり今回のようにfor文とprint文のみで評価すれば別の結果が得られます。
|
9
9
|
|
10
|
-
一つの機能だけ取り上げて、言語
|
10
|
+
一つの機能だけ取り上げて、言語自体の速度や有用性を語るのはナンセンスです。
|
11
|
-
またスクリプト言語の速度を元に優秀かそうでないかを判断するのも同じようにナンセンスです。
|
12
11
|
|
13
|
-
なので今回、
|
12
|
+
なので今回、断片的な情報を元に評価を下す前に質問したのはGJといえるでしょう。
|
14
13
|
次からは多角的に色々調べてみるようにしてください。
|
15
14
|
|
16
15
|
---
|
@@ -30,12 +29,12 @@
|
|
30
29
|
|
31
30
|
> PHPが一番遅いと思っていた
|
32
31
|
|
33
|
-
PHPは
|
32
|
+
PHPは単純な速度では遅い言語ではありません。
|
34
|
-
確かに4〜5の初期の時代は
|
33
|
+
確かに4〜5の初期の時代は処理速度も遅い言語として有名でしたが、
|
35
|
-
[5.0→7.0比で3倍
|
34
|
+
[5.0→7.0比で3倍速で動作する](http://d.hatena.ne.jp/hnw/20141207)ようになり、速い言語として認知されています。
|
36
35
|
メモリのキャッシュヒット率にまでテコが入っており、全てのコードが2倍以上に速度向上を果たしています。
|
37
36
|
|
38
|
-
それでもPHPが遅いと
|
37
|
+
それでもPHPが遅いと言われるのは、ステートレスで動作する設計だからです。
|
39
38
|
WebサーバのApacheは起動時にPHPのプロセスを4本なり8本なりを同時に起動しておき、
|
40
39
|
アクセスが来ると対象のindex.phpなりを読み込ませてその時点で初めて実行を開始します。
|
41
40
|
(Nginx+FastCGI等を利用しても、C10Kに対応出来ない古臭いApacheから脱却出来ただけで、設計思想的な所では変わらず不利です)
|
@@ -59,16 +58,24 @@
|
|
59
58
|
|
60
59
|
> データベースの接続等はPHPより速くなるものなんでしょうか
|
61
60
|
|
62
|
-
|
61
|
+
【修正済】
|
63
62
|
|
63
|
+
例えばNode.jsのmysqlライブラリでは[connection pool](https://github.com/mysqljs/mysql#pooling-connections)という機能が存在します。
|
64
|
+
予めMySQLとの接続を5本なり7本なり確保しておいて、
|
65
|
+
実行していないプロセスを使って通信するというやり方です。
|
66
|
+
|
64
67
|
PHPは1接続1プロセスという縦割りの作り方をしています。
|
65
|
-
|
68
|
+
[持続的接続](http://php.net/manual/ja/pdo.connections.php)という機能を使って、
|
66
|
-
|
69
|
+
アクセスの度にコネクションが途切れるというわけではないようですが、Node.jsの速度面の設計と比較すると少々貧弱?といった印象ですかね。
|
67
70
|
|
68
|
-
MySQLは1つのコネクションで複数のSQLを受け付け、複数の結果を返す挙動をします。
|
69
|
-
|
71
|
+
Node.jsのように並列処理でSQLをどんどん発行しまくって、
|
70
|
-
|
72
|
+
全て揃ったらレスポンスのHTMLを生成するというやり方はPHPでは真似出来ません。
|
73
|
+
使い方にも寄るものの、Node.jsの方がPHPより速いと思われます。
|
71
74
|
|
75
|
+
Pythonに関してはノータッチですのでよく分かりません。
|
76
|
+
もちろんプロセスを閉じない限りコネクションは張りっぱなしなので、
|
77
|
+
持続的接続は可能であり、PHPに比べて劣っているという事はないと思います。
|
78
|
+
|
72
79
|
> websocketなどの導入が比較的簡単だと聞く
|
73
80
|
|
74
81
|
Node.jsはマイクロプロセスをさくっと作る用途に非常に向いた言語で、
|
1
文章校正
answer
CHANGED
@@ -3,40 +3,42 @@
|
|
3
3
|
|
4
4
|
> for文のみなのに何か間違いがあるんじゃないか
|
5
5
|
|
6
|
-
質問者さんのイメージは聞きかじった噂でしかありません。
|
7
|
-
|
6
|
+
Node.jsが速い・PHPは遅いと良く聞きますし、大まかには私も同意します。
|
8
|
-
言語特性の一面に過ぎないわけですね。
|
7
|
+
でも、所詮噂であり、言語特性の一面に過ぎないわけですね。
|
8
|
+
つまり今回のようにfor文とprint文のみで評価すれば別の結果が得られます。
|
9
9
|
|
10
|
-
つまり今回のようにfor文とprint文のみで評価すれば別の結果が得られます。
|
11
|
-
|
10
|
+
一つの機能だけ取り上げて、言語やシステムの速度を語るのはナンセンスです。
|
12
11
|
またスクリプト言語の速度を元に優秀かそうでないかを判断するのも同じようにナンセンスです。
|
13
12
|
|
14
13
|
なので今回、誤った認識で評価を下す前に質問したのはGJといえるでしょう。
|
15
|
-
次からは多角的に色々調べて
|
14
|
+
次からは多角的に色々調べてみるようにしてください。
|
16
15
|
|
17
16
|
---
|
18
17
|
|
19
18
|
> Node.jsはシングルスレッドで速いと聞きます
|
20
19
|
|
21
20
|
その理由は[libuv](https://github.com/libuv/libuv)というC++製のライブラリにあります。
|
22
|
-
コアの部分のイベントループの仕組みをC言語由来のライブラリでぶん回す事で
|
21
|
+
コアの部分のイベントループの仕組みをC言語由来のライブラリでぶん回す事で速度を稼ぎます。
|
23
|
-
|
22
|
+
なのでサーバ用途としてはスクリプト言語随一という速度を誇ります。
|
24
23
|
|
25
|
-
|
24
|
+
同期的な処理(for文やconsole.log)の速度自体は大したことありません。
|
26
|
-
ただし、度重なるブラウザ戦争等でJITコンパイラが強化されており、
|
27
|
-
|
25
|
+
JITコンパイラの最適化を上手く利用すればfor文は加速するのでネイティブ言語に迫れると思いますけど、
|
26
|
+
console.logは高コストと聞いたことありますね。
|
28
27
|
|
28
|
+
今回の不甲斐ない結果は主にconsole.logのせいです。
|
29
|
+
[stdout](http://tatsuyaoiw.com/2015/02/02/difference-between-console-log-and-process-stdout-write-in-node-js/)を使ってみてください。
|
30
|
+
|
29
31
|
> PHPが一番遅いと思っていた
|
30
32
|
|
31
33
|
PHPはそもそも単純な速度では遅い言語ではありません。
|
32
|
-
4〜5の初期は
|
34
|
+
確かに4〜5の初期の時代は愚鈍な言語として取り上げられていましたが、
|
33
|
-
[5.0→7.0比で3倍の速度アップ](http://d.hatena.ne.jp/hnw/20141207)であり、速い
|
35
|
+
[5.0→7.0比で3倍の速度アップ](http://d.hatena.ne.jp/hnw/20141207)であり、速い言語になりました。
|
34
|
-
メモリのキャッシュヒット率にまでテコが入っており、
|
36
|
+
メモリのキャッシュヒット率にまでテコが入っており、全てのコードが2倍以上に速度向上を果たしています。
|
35
37
|
|
36
38
|
それでもPHPが遅いとされるのは、ステートレスで動作する設計だからです。
|
37
39
|
WebサーバのApacheは起動時にPHPのプロセスを4本なり8本なりを同時に起動しておき、
|
38
40
|
アクセスが来ると対象のindex.phpなりを読み込ませてその時点で初めて実行を開始します。
|
39
|
-
(Nginx+FastCGI等を利用しても、
|
41
|
+
(Nginx+FastCGI等を利用しても、C10Kに対応出来ない古臭いApacheから脱却出来ただけで、設計思想的な所では変わらず不利です)
|
40
42
|
|
41
43
|
他言語のWebサーバはメモリ空間上にやることが全てロードされたプロセスとして準備されます。
|
42
44
|
「URLがxxなら、この関数(メソッド)を実行してねよろしく」というお膳立てされた状況になるわけです。
|
@@ -57,6 +59,8 @@
|
|
57
59
|
|
58
60
|
> データベースの接続等はPHPより速くなるものなんでしょうか
|
59
61
|
|
62
|
+
確かにNode.jsやPythonはデータベースの接続等でPHPより有利です。
|
63
|
+
|
60
64
|
PHPは1接続1プロセスという縦割りの作り方をしています。
|
61
65
|
要するにアクセス間で変数や定数を持ち回す事が一切出来ません。
|
62
66
|
つまり、MySQLなどのデータベースへの接続も1アクセス毎に承認〜接続〜開放という手順を踏む事になります。
|
@@ -65,18 +69,9 @@
|
|
65
69
|
なので、Node.jsやPythonはMySQLに対して複数のコネクションを同時に張っておき、
|
66
70
|
アクセスがきたら手待ちのコネクションを使ってSQLを発行するという戦術が使えます。
|
67
71
|
|
68
|
-
つまり、Node.jsやPythonは「1アクセス毎に承認〜接続〜開放」が無いのでその分有利です。
|
69
|
-
|
70
72
|
> websocketなどの導入が比較的簡単だと聞く
|
71
73
|
|
72
74
|
Node.jsはマイクロプロセスをさくっと作る用途に非常に向いた言語で、
|
73
75
|
WebSocketサーバー等を作るのが非常に得意です。
|
74
|
-
また、持ち前のlibuvが活きるサーバとしての動作も得意な部類で、下手するとコンパイラ言語の域に達する程の処理速度がでます。
|
75
76
|
|
76
|
-
|
77
|
+
CommonJS譲りのシンプルな外部ライブラリ読み込みも小気味いい開発速度を誇ります。
|
77
|
-
速度が欲しいならGolang等の検討をおすすめします。
|
78
|
-
|
79
|
-
> また独学なので比較コードに不備がございましたらご指摘お願いいたします。
|
80
|
-
|
81
|
-
Node.jsはconsole.logが高コストですからね。
|
82
|
-
[stdout](http://tatsuyaoiw.com/2015/02/02/difference-between-console-log-and-process-stdout-write-in-node-js/)を使ってみてください。
|