
рдЕрдЧрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрд╕рдВрдж рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рдЬрд╛рдирдирд╛ рд╣реИ рдЬреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╛рд░рдВрдкрд░рд┐рдХ рдПрдХ рдХрд╛рд░рдг рд╕реЗ рдПрдХ рд╣реИ:
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдХреБрдЫ рдиреЗ рдореБрдЭреЗ Node.js рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╕рднреА рдкреНрд░рдЪрд╛рд░ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЬрдм рддрдХ рдореИрдВ рдиреЛрдб рдХреЗред рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░рдпрд╛рди рдбрд╛рд╣рд▓ рд╕реЗ
рдЧрдзреЗ рдореЗрдВ рджрд░реНрдж рд╕реЗ рднрд░рд╛ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдкрдврд╝рддрд╛, рддрдм рддрдХ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рднреВрд▓ рдЧрдпрд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕реА рднреА рдЧрдзреЗ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдпреВрдирд┐рдХреНрд╕ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди, рдПрдХ рдкреБрд▓рд┐рд╕ рд╡рд╛рд▓реЗ рдХреА рддрд░рд╣, рдЬреЛ рдпрд╣ рд╕реЛрдЪрдХрд░ рдЧрдзреЗ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдорд┐рдиреАрдмрд╕ рдореЗрдВ рдЗрд╕ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рдЙрд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдФрд░ рдкрдЪрд╛рд╕ рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо рд╣реЗрд░реЛрдЗрди рдкрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕ рдЖрдВрд╕реВ рднрд░реА рдХрд╣рд╛рдиреА рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рдФрд░ рд╢рд╛рдпрдж, рд╢рд╛рдпрдж рдЙрд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╡рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рддред
рдЬрдм рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░реЗ рдХреВрдмрдбрд╝ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рдереАред
Node.js рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдореБрджрд╛рдп рдореЗрдВ рдПрдХ рдЯреНрдпреВрдорд░ рд╣реИ, рди рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рдЧрд▓ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдВрдХреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддреЗ, рдЬрдм рддрдХ, рдЕрдВрдд рдореЗрдВ, рд╣рд░ рдЧрдзреЗ рд╕реЗ рдореИрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реВрдВ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрджреЗрд╢ рдкрдврд╝реЗрдВред
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рджрд┐рд▓ рдореЗрдВ рдПрдкреЛрд▓ рд▓рд┐рдпрд╛ рд╣реИ?рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛ рдкрддрди рдкрдВрдЦреЛрдВ рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЪрд▓реЛ рд╕рдмрд╕реЗ рднрдпрд╛рдирдХ рдЭреВрда рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: Node.js рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдХрднреА рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ"
(рд╡рд┐рдХрд┐рд░рдг рд▓рд╛рдн! рдЕрдм рдЖрдкрдХреЗ рдЯреВрдердкреЗрд╕реНрдЯ рдореЗрдВ !) ред Node.js рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╣рддреА рд╣реИ:
рдиреЛрдб рдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реАрдзреЗ I / O рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрднреА рднреА рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреБрдЫ рднреА рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИ, рдХрдо-рд╕реЗ-рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рддреЗрдЬ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХрдерди рдЧрд▓рдд рд╣реИ, рдЙрддреНрд╕рд╛рд╣рдЬрдирдХ рд╣реИ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реИред
рдЪрд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛, рдЦрд╛рдмрд░реЛрд╡ рдХрд╛ рдкрддрд╛ рд╣реИ, рдпрд╣, рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдирд┐рд▓рдВрдмрд┐рдд рд░рд╣рддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо I / O рд╕рдВрдЪрд╛рд▓рди рдХреЛ "рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛" рдорд╛рдирддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд╕реЙрдХреЗрдЯ.рдбреНрд░реИрдб () рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рдХреЙрд▓ рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реЗ рд▓реМрдЯреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рдордЬреЗрджрд╛рд░ рддрдереНрдп рд╣реИ: рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдмреНрд▓реЙрдХ рднреА рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ Nth рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
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. . , , , . , .
, , .