teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

データベース絡みの記述を調整

2018/03/18 00:52

投稿

miyabi-sun
miyabi-sun

スコア21459

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  結論としては、スクリプト言語にそんなに期待しないで下さい。
2
- どんなに得意な処理をねじ込んでも所詮ネイティブの1/10とか1/20とかそんなもんです。
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
- なので今回、誤った認識で評価を下す前に質問したのはGJといえるでしょう。
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倍度アップ](http://d.hatena.ne.jp/hnw/20141207)であり、速い言語になりま
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
- 確かにNode.jsやPythonはデータベースの接続等でPHPより有利です。
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
- つまり、MySQLなどのデータベースへの接続も1アクセス承認〜接続〜開放という手順を踏む事にります。
69
+ アクセスの度コネクションが途切れるというわけではいようでが、Node.jsの速度面の設計と比較すると少々貧弱?といった印象ですかね
67
70
 
68
- MySQLは1つのコネクションで複数のSQLを受け付け、複数の結果を返す挙動をします。
69
- なので、Node.jsやPythonはMySQLに対して複数コネクションを同時っておき
71
+ Node.jsのよう並列処理でSQLをどんどん発行しまくって、
70
- アクセスがきたら手待ちのコネクションを使ってSQLを発行するという戦術が使え
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

文章校正

2018/03/18 00:52

投稿

miyabi-sun
miyabi-sun

スコア21459

answer CHANGED
@@ -3,40 +3,42 @@
3
3
 
4
4
  > for文のみなのに何か間違いがあるんじゃないか
5
5
 
6
- 質問者さんのイメージは聞きかじった噂でしかありません。
7
- まぁ、Node.jsが速いPHPは遅いというのは良く表現されますし、全体的には私もそう思ってます
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
- シングルスレッドでありがらC10K問題に対応したがNode.jsです。
22
+ なのでサーバ用途としてはスクリプト言語随一という速度を誇ります。
24
23
 
25
- つまり、同期的な処理(for文やconsole.log)の速度自体は大したことありません。
24
+ 同期的な処理(for文やconsole.log)の速度自体は大したことありません。
26
- ただし、度重なるブラウザ戦争等でJITコンパイラが強化されており、
27
- 複雑な関数等は実行の度に強化され、JITコンパイラを活かすようなコード組み方していネイティブ言語に多少迫れるでしょう。
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
- メモリのキャッシュヒット率にまでテコが入っており、状況によらず全てのコードが2倍以上に速度向上を果たしています。
36
+ メモリのキャッシュヒット率にまでテコが入っており、全てのコードが2倍以上に速度向上を果たしています。
35
37
 
36
38
  それでもPHPが遅いとされるのは、ステートレスで動作する設計だからです。
37
39
  WebサーバのApacheは起動時にPHPのプロセスを4本なり8本なりを同時に起動しておき、
38
40
  アクセスが来ると対象のindex.phpなりを読み込ませてその時点で初めて実行を開始します。
39
- (Nginx+FastCGI等を利用しても、C言語の低速なスレッド依存してApacheからの移行に成功しただけで、設計思想的な変更殆どありません。)
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
- まぁ、Node.jsは所詮スクリト言語ので複雑な処理させればボロが出ます。
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/)を使ってみてください。