Node.js-がん性腫瘍

Web開発者が気に入っているものがある場合、それは従来よりも優れたものを知ることです。 しかし、伝統的な理由の1つは、 このたわごとが機能することです。 Node.jsを取り巻くすべての誇大広告について長い間私を悩ませていましたが、Node.jsの作成者であるRyan Dahl のお尻の痛みに満ち投稿を読むまで、正確に何を理解する時間がありませんでした。 Unixが複雑すぎるというロバのしつこさのように、私はそれを忘れていたでしょう。 しかし、ミニバスでこの家族に何か問題があると嫌気がさして警官が彼を止め、50キログラムのヘロインを見つけた警官のように、この涙ぐんだ話に何かが間違っているように思えました。彼は何をしているのかわからず、長年にわたって誰にも制御されずにプログラミングを行ってきました。

あなたがこれを読んで、あなたはすでに私の予感が確認されたことに気付いているかもしれません。

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. . , , , . , . , , .

Source: https://habr.com/ru/post/J129640/


All Articles