あなたがこれを読んで、あなたはすでに私の予感が確認されたことに気付いているかもしれません。
Node.jsはプログラミングコミュニティの腫瘍です。完全に正気ではないだけでなく、それを使用する人々が、最後に、私が出会うすべての嫌いな人が始まるまで、独立して考えることができない他の人々に感染するためです。イベントループに関する説教を読んでください。 エポールを心に抱いていますか?
スケーラビリティの崩壊が待っています
最も恐ろしい嘘から始めましょう。Node.jsは、「ブロックしない」ため、スケーラブルです(放射線の利点!今、 歯磨き粉に !) 。 Node.jsのWebサイトには次のように書かれています。
ノードには、I / Oを直接実行する機能が実質的にないため、プロセスがブロックされることはありません。 何もブロックされていないという事実により、エキスパートよりも少ない人でも高速システムを開発できます。
この声明は魅力的で、励みになり、まったく間違っています。
ハブロフのすべてを知っているあなたのもので、詳細はつまらないので、定義から始めましょう。 関数呼び出しは、この関数が完了するまで呼び出しスレッドの実行が中断されるとブロッキングと呼ばれます。 原則として、I / O操作は「ブロッキング」と見なされます。たとえば、socket.read()を呼び出すと、プログラムはこの呼び出しが完了するまで待機します。返されたデータを処理する必要があるためです。
ここに面白い事実があります:プロセッサを使用する関数の呼び出しもブロックします。 N番目のフィボナッチ数を計算するこの関数は、プロセッサーを使用するため、現在のスレッドをブロックします。
function fibonacci(n) { if (n < 2) return 1; else return fibonacci(n-2) + fibonacci(n-1); }
(, . , , - ?)
, Node.js, :
http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(fibonacci(40)); }).listen(1337, "127.0.0.1");
:
ted@lorenz:~$ time curl http://localhost:1337/ 165580141 real 0m5.676s user 0m0.010s sys 0m0.000s
— 5 . . , , JavaScript , ? , Node , . , , event loop:
while(1) { ready_file_descriptor = event_library->poll(); handle_request(ready_file_descriptor); }
, , , , , , , . , handle_request, , , , .
, , , node- — 10 , 5 :
ted@lorenz:~$ ab -n 10 -c 5 http://localhost:1337/ ... Requests per second: 0.17 [#/sec] (mean) ...
0.17 . . , Node , , , .
Node, , , « », «--» .
Unix, Node
- , , — , .
Unix, , . , - , - , . - , . CGI, , - .
, -, , : -, — , , . , CGI-, - , . , HTTP- . , : .
, , Node . Node ( , ) HTTP-, , . , , http.createServer(), .
«node.js deployment» , , Nginx Node, Fugue. JavaScript HTTP-, , , «» CPU.
Node, 99- , , , Node. , , , HTTP-, - Node , , , , SSL , HTTP-. , , .
, , Node-, , , Node, .
JavaScript
, , , — JavaScript.
if (typeof my_var !== "undefined" && my_var !== null) { // , }
, …
?
Node.js — , .
Update:
JavaScript-, Node.js. . , , , . , .