рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕реНрдерд┐рддрд┐ рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдвреЗрд░ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдордп, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛, "рдареАрдХ" рдпрд╛ "рдбрд╛рдЙрди" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдирд╛рдо рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ рд╣рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реЛрдиреЗ рджреЗрдВ:
var Server = function(name){ this.name = name; this.ping = function(){return Math.round(Math.random())? 'ok' : 'down';}; };
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдШрдЯрдХ рд╣реИ, рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реИ, рдЬреЛ рдЙрд╕реЗ рд╕реМрдВрдкреЗ рдЧрдП рд╕рд░реНрд╡рд░реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛, рдФрд░ рдЕрдиреБрд░реЛрдз рдкрд░ рд╣рдореЗрдВ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдпреЛрдВ рдХреА рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдФрд░ рдХреБрдЫ рджрд╛рдирд╡, рд▓рдЧрд╛рддрд╛рд░, рдЗрд╕ рдШрдЯрдХ рдкрд░ рд╣рд┐рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рджреЗрдВ:
var CasualObserver = function(){ var stack = []; this.add = function(server){ stack.push(server); return this; }; this.check = function(){ var hashTable = {}; for(var i = 0, ln = stack.length; i < ln; i++){ hashTable[stack[i].name] = stack[i].ping(); } return hashTable; } };
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░, рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ, рдореМрдЬреВрджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рдЙрдиреНрд╣реЗрдВ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред
рдареАрдХ рд╣реИ, рдЖрдк рдЗрди 14 рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдмреИрдареЗ рд╣реИрдВ рдФрд░ рдШреВрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдПрдХрдорд╛рддреНрд░ (рдореИрдВ рд╡рд┐рдбрдВрдмрдирд╛рдкреВрд░реНрдг) рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ "рдХреНрдпрд╛ рдпрд╣ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ?"ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕рд╣реА рдФрд░ рдЧрд▓рдд (рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реБрдкрд░рдкреЛрдЬрд┐рд╢рди) рд╣реИред рд╕рд╣реА рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрдЪрд╛рд▓рди рдЪрдХреНрд░ рд╣реИред рдЧрд▓рдд рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдпрд╛ рдЬрд╛рдПред рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдПрдХ рдФрд░ рд╕рд┐рд░реНрдл рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП .check рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
this.check = function(){ return { stack[0].name : stack[0].ping(), stack[1].name : stack[1].ping(), stack[2].name : stack[2].ping() }; }
рдЗрд╕ рддрд░рд╣ рд╣рдо рддреБрд░рдВрдд рдЪрдХреНрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ рдЖрдк рдореБрдЭреЗ рдПрдХ рдореВрд░реНрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдХрд╣рддреЗ рд╣реИрдВ - тАЬрд╣рд╛рдБ, рд╡рд╛рдиред рд▓реЗрдХрд┐рди рддрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд░ рдХреА рдПрдХ рдордирдорд╛рдиреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╕рд┐рд░реНрдл рддреАрди рдирд╣реАрдВред рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЗрдПрд╕ рдореЗрдВ рдХреЛрдИ рднреА рд╕рдЬрдЧрддрд╛ рдирд╣реАрдВ рд╣реИред тАЭ
рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕рдВрднрд╡ рд╣реИ? (рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ? рд╡реИрд╕реЗ рддреЛ рдиреАрдЪреЗ рдЬрд╛рдПрдВ) рд╣рд╛рдБ, рд╣рд╛рдБ, рдЬреЗрдПрд╕ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рдирдпрд╛ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ!
var sum = new Function('a', 'b', 'return alert(a + b);'); sum(2, 3);
рдПрдХ рд╣реА рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде, рдФрд░ рдПрдХ рд╣реА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╣рд░ рдХреЛрдИ рдШреГрдгрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдмрд░ рдкрд░ рдЕрдиреНрдп рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рдБ, рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдЦреБрдж рд╕рдордЭ рдЧрдП рд╣реИрдВ? рдмреЗрд╢рдХ! рдЖрдЗрдП, рдЕрдкрдиреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рдмрдирд╛рдПрдБ, рдЬреЛ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдЧрд╛:
var SelfModifyObserver = function(){ var stack = []; this.add = function(server){ stack.push(server); var code = 'return {'; for(var i = 0, ln = stack.length; i < ln; i++){ code += stack[i].name + ':' + 'stack[' + i + '].ping(),'; } code += '};'; this.check = eval('(function(){' + code +'});'); return this; }; this.check = function(){return {};} };
рдпрд╣ рдЬрдВрдЧрд▓реА рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЖрдкрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрд╡рдпрдВ рд╕рд┐рджреНрдз рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП 25 рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдЧрд╛, рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдПрдХ, рдФрд░ рдлрд┐рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд┐рддрдиреА рдмрд╛рд░ рд╡рд╣ рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
var benchmark = function(instance, note){ for(var i=65; i<=90; i++){ instance.add(new Server(String.fromCharCode(i))); } var stamp = new Date().getTime(); var iterations = 0; while(new Date().getTime() - stamp <= 1000){ instance.check(); iterations++; } console.log(iterations + ' iterations per second for ' + note); return true; };
рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ Node.js рдореЗрдВ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд▓рдЧрднрдЧ 30% рдереАред
рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдХреНрд░реЛрдо рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

рдЖрдк рджреЗрдЦрд┐рдпреЗ! рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рдЬрдЧрд╣ рд╕реЗ 30% рдмрд╛рд╣рд░ рдирд┐рдЪреЛрдбрд╝рд╛!
рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдзрдиреНрдпрд╡рд╛рджред
JSConf EU 2012 рдХреА рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреБрд▓: рдкреЛрд╕реНрдЯ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рди рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдЪрдХреНрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдХреИрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрд┐рд╕ рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдореИрдВрдиреЗ рдпрд╣ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдпрд╛ рд╣реИредрдЗрд╕рдХрд╛ рдПрдХ рдкрд╛рда рд╕рдВрд╕реНрдХрд░рдгред