рдиреЛрдб.рдЬреЗрдПрд╕ рдкрд░ рдЯреИрдирд┐рдХреА - рдЕрдиреБрдХреВрд▓рди

рд╕рднреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЦреЗрд▓ рдХреЗ рднрдпрд╛рдирдХ рдмреНрд░реЗрдХ рдХреЗ рд╕рд╛рде рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдирдХреЗ рдХрд╛рд░рдг рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛, рдЕрдЧрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЕрдм рд╕рд░реНрд╡рд░ рдХреНрд░рдо рдореЗрдВ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рде рдЧреЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗрд╡рд▓ рдкрд╛рдБрдЪ рддрдХ рдмрдврд╝рд╛ рджреА рдЧрдИ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рдВрджреБ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдореЗрдВ рдХрд┐ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╢рд╛рдо рдХреЗ рдШрдВрдЯреЛрдВ рдореЗрдВ рдореЗрд░реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдЧрддрд┐ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдЧреАред рдЙрддреНрд╕рд╛рд╣ рдХреЗ рд▓рд┐рдП, рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрддрд░ рдЪреБрдирдирд╛ рд╕рдВрднрд╡ рд╣реИред рдФрд░ "рдЖрдХреНрд░рд╛рдордХ" рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ , 2 рдкрд░ 2 рдЦреЗрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП - рдПрдХ рдбреЗрдореЛ , рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд░реНрд╡рд░ , рджреВрд╕рд░рд╛ рд╕рд░реНрд╡рд░ ред рдЕрдм рдпрд╣ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬрд▓реНрджреА рдореЗрдВ рдирд╣реАрдВ рдерд╛, рдФрд░ рд╕рд░реНрд╡рд░ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреНрдпрд╛ рдмрдХрд╡рд╛рд╕ рдХреА рд╣реИред

рд░реВрдкрд░реЗрдЦрд╛


рддреЛ, рдХреБрдЫ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдбрд╝рдЪрдиреЗрдВ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд┐рдпрд╛: рдЦреЗрд▓ рдХреЛ - рдкреНрд░реЙрдлрд┐рдЯ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ

node --prof src/server 

рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ v8.log рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдЗрд╕реЗ рд╕реБрдкрд╛рдЪреНрдп рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ v8 рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд▓рд┐рдирдХреНрд╕-рдЯрд┐рдХ-рдкреНрд░реЛрд╕реЗрд╕рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВ рд▓рд┐рдирдХреНрд╕-рдЯрд┐рдХ-рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХрдИ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛:

 svn co http://v8.googlecode.com/svn/branches/bleeding_edge/ v8 cd v8 svn co http://gyp.googlecode.com/svn/trunk build/gyp make native 

рджреЗрд╢реА рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдирдХреНрд╕-рдЯрд┐рдХ-рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯ рдлрд╝реЛрд▓реНрдбрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред V8.log рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, v8 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

 tools/linux-tick-processor /full/path/to/v8.log > /full/path/to/v8.out 

рдкрд░рд┐рдгрд╛рдореА v8.out рдореЗрдВ, рд╣рдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ ред рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдЬрд╛рдирддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

рднрд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ


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

 phpunit --repeat=10 test.php 

рд╣рдореЗрдВ рд▓реЛрдб рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдорд┐рд▓рддрд╛ рд╣реИред

рдЕрдиреБрдХреВрд▓рди 1 - рдХреНрд▓реЛрдЬрд░


рд╣рдо рдПрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдиреЛрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЙрдЧ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ v8.out рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред V8.out рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЙрдЧ рдореЗрдВ рдкрд╣рд▓рд╛ Array.forEach рдлрд╝рдВрдХреНрд╢рди рд╣реИ:

 ticks total nonlib name 1514 2.3% 14.9% LazyCompile: *forEach native array.js:1019 

рддрдм рдореБрдЭреЗ рддреБрд░рдВрдд рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдореИрдВ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

 someArray.forEach(function(item){ ... }, this); 

рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рдПрдХ рдХреНрд▓реЛрдЬрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдЬрдЧрд╣реЛрдВ рдкрд░ рдореИрдВ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рджрд░реНрдж рд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛:

 Class.prototype.handler = function(item) { ... } Class.prototype.func = function() { someArray.forEach(this.handler, this); } 

рдРрд╕рд╛ рдХреЛрдб рддреЗрдЬреА рд╕реЗ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рд╡рд╣ рдмрд╛рдд рдирд╣реАрдВ рдереАред

рдЕрдиреБрдХреВрд▓рди 2 - рдЕрдВрддрд░ рдЦреЛрдЬ


рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд╕реЗрд▓реЗрдирд┐рдпрдо рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реИрдВ:

  ticks total nonlib name 31043 3.8% 16.5% LazyCompile: MapArrayed.intersects src/utils/map_arrayed.js:45 26763 3.3% 14.3% Stub: CEntryStub 22800 2.8% 12.1% LazyCompile: *forEach native array.js:1019 16323 2.0% 8.7% LazyCompile: IN native runtime.js:353 13800 1.7% 7.4% Stub: KeyedLoadElementStub 6911 0.9% 3.7% LazyCompile: *MapArrayed.forEach src/utils/map_arrayed.js:59 

рдЦреИрд░, рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВред рдЪреМрд░рд╛рд╣реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рддреАрди рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ: рд╕рдордиреНрд╡рдп рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА, рдЖрдпрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдЖрдпрддреЛрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ред рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ 1000 рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕рдордиреНрд╡рдп рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдкрд░ рдмрд╕ рдЧрдпрд╛: рдпрд╣ рдЖрдпрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдкрд░ рднреА рдЖрдзрд╛рд░рд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рд╕рднреА рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЫреЛрдЯреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рд╕рдорд╛рди рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдЕрд░реНрде рдХреЗ рд╕рд╛рдеред рдкрд╣рд▓реЗ рджреЛ рдЖрдпрд╛рдо рд╕реЗрд▓ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВ, рдХреЗрд╡рд▓ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд╕рдиреНрдирд┐рдХрдЯрди рдХреЗ рд╕рд╛рдеред рддреАрд╕рд░рд╛ рдЖрдпрд╛рдо рдЗрд╕ рд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдЖрдпрдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдУрдмреНрд▓рд┐рдЯрд╕ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдХрджрдо рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рджрд░реНрдж рд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рдЕрдиреБрдХреВрд▓рди 3 - forEach


рдлрд┐рд░ рд╕реЗ, рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдПрдХ рдЕрдЬреАрдм рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ, рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЧреЗрдо рдЦреЗрд▓рд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

  ticks total nonlib name 51 0.1% 11.6% LazyCompile: *Loggable.log battlecity/src/server/loggable.js:32 12 0.0% 2.7% LazyCompile: MapTiled.intersects battlecity/src/utils/map_tiled.js:106 8 0.0% 1.8% Stub: CEntryStub 6 0.0% 1.4% LazyCompile: *forEach native array.js:1019 4 0.0% 0.9% Stub: StringAddStub 4 0.0% 0.9% Stub: ArgumentsAccessStub_NewNonStrictFast 

рдЕрдЧрд░ рдореИрдВрдиреЗ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдиреЗ рдХрдИ рджрд░реНрдЬрди рдЧреЗрдо рдЦреЛ рджрд┐рдП:

  ticks total nonlib name 4108 2.0% 16.1% LazyCompile: *forEach native array.js:1019 3626 1.8% 14.3% Stub: CEntryStub 2176 1.1% 8.6% LazyCompile: *MapTiled.forEach battlecity/src/utils/map_tiled.js:139 2048 1.0% 8.0% LazyCompile: IN native runtime.js:353 1755 0.9% 6.9% Stub: KeyedLoadElementStub {1} 1475 0.7% 5.8% LazyCompile: *Loggable.log battlecity/src/server/loggable.js:32 337 0.2% 1.3% LazyCompile: MapTiled.intersects battlecity/src/utils/map_tiled.js:106 336 0.2% 1.3% Stub: ToBooleanStub_Bool 

рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, рд╕рдордп рдХреЗ рд╕рд╛рде, forEach () рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдЦрд╛рддреА рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреА рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рд╣реИ, рдФрд░ рдпрд╣ рдЖрдИрдбреА рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИ, рдпрд╛рдиреА рд╕рдордп рдХреЗ рд╕рд╛рде рдпрд╣ рдХреЗрд╡рд▓ рдмрдврд╝рддреА рд╣реИред рд▓реЗрдХрд┐рди рдирдХреНрд╢реЗ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд░рд┐рдпрд╛ рд╕реЗ рдкрд╛рд░рд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреАред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЪрд╛рд▓ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдЦреЗрд▓ рдореИрджрд╛рди рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдИрдбреА рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рди рдмрдврд╝реЗ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реА + + рдХреА рддрд░рд╣ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдпрд╣ рд╣реИрд╢ рдЯреЗрдмрд▓ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдХреНрдпреЛрдВ рдЖрдЧреЗ рдФрд░ рдмрдбрд╝рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдЗрд╕ рдЬрдЧрд╣ рдкрд░, рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рджреАрд╡рд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдкрдирд╛ рд╕рд┐рд░ рдкреАрдЯрд╛, рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдРрд╕рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛:

 a=[1]; a[1000000]=1; console.time('qwe'); a.forEach(function(i){console.log(i);}) console.timeEnd('qwe'); console.time('asd'); for (var i in a) console.log(a[i]); console.timeEnd('asd'); 

рдирддреАрдЬрд╛ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред

рдПрдлрдПрдл:
 qwe: 163ms asd: 2ms 

рдХреНрд░реЛрдо:
 qwe: 254ms asd: 1ms 

рдЦреИрд░, рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рдУрдкреЗрд░рд╛:
 qwe: 0ms (188┬╡sec) asd: 0ms (87┬╡sec) 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдУрдкреЗрд░рд╛ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, forEach () рдФрд░ for (var i in ...) рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдиреЗ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ (рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ) рдиреЗ рдХрдИ рдЧреЗрдо рдХреЗ рдмрд╛рдж рдмрд╣реБрдд рдзреАрдорд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд╣рдо forEach () рдХреЗ рд▓рд┐рдП (var i in ...) рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдФрд░ рдУрд╣, рдПрдХ рдЪрдорддреНрдХрд╛рд░! рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬреЛ рдмреНрд░реЗрдХ рд▓рдЧрд╛рдпрд╛, рд╡рд╣ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛!

рд╣рдо рдХрдИ рдХрдВрд╕реЛрд▓ рдореЗрдВ "phpunit --repeat = 100 test.php" рдЪрд▓рд╛рдХрд░ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ:

  ticks total nonlib name 746 0.2% 16.1% LazyCompile: *Loggable.log battlecity/src/server/loggable.js:28 128 0.0% 2.8% LazyCompile: *Game._stepItem battlecity/src/core/game.js:77 101 0.0% 2.2% LazyCompile: MapTiled.intersects battlecity/src/utils/map_tiled.js:102 61 0.0% 1.3% Stub: CEntryStub 52 0.0% 1.1% Function: EventEmitter.emit events.js:38 50 0.0% 1.1% Stub: SubStringStub 46 0.0% 1.0% LazyCompile: *MapTiled.add battlecity/src/utils/map_tiled.js:24 45 0.0% 1.0% LazyCompile: FILTER_KEY native runtime.js:398 

рдЕрдВрдд рдореЗрдВ, рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ, рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ forEach () рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИред

рдЕрдиреБрдХреВрд▓рди 4 - рдпрд╛рддрд╛рдпрд╛рдд


рдлрд┐рд░ рдореИрдВрдиреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рд╣рдЯрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрдХреВрд▓рди рдХреА рдЦреЛрдЬ рдореЗрдВ, рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдЧрдгрдирд╛ рдХреАред рдпрд╣ рдЧреЗрдо рдХреЗ рдмреАрдЪ рдореЗрдВ рдирд┐рдХрд▓рд╛ рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ 30kb / s рддрдХ рднреЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЯреИрдВрдХреЛрдВ рдЬреИрд╕реЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЕрдкрдорд╛рдирдЬрдирдХ рдЖрдВрдХрдбрд╝рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдмрд╛рдд, JSON рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рднреА рдмрдврд╝рд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛:
 Bullet.prototype.serialize = function() { return { type: 'Bullet', id: this.id, x: this.x, y: this.y, z: this.z, speedX: this.speedX, speedY: this.speedY, finalX: this.finalX, finalY: this.finalY }; }; 

рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ {"рдЯрд╛рдЗрдк": "рдмреБрд▓реЗрдЯ", "рдЖрдИрдбреА": 777, "x": 123, "y": 456, "z": 1, "speedX": 2, "speedY": 0 рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рд╣реБрдЖред "рдлрд╝рд╛рдЗрдирд▓рдПрдХреНрд╕": 123, "рдлрд╝рд╛рдЗрдирд▓реА": 456} рд▓рдЧрднрдЧ 100 рдмрд╛рдЗрдЯреНрд╕ рд▓рдВрдмрд╛ред рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХреЛ рднреБрдирд╛рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╕реНрддреБ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рд░рдгреА рд╣реЛ:
 Bullet.prototype.serialize = function() { return [ battleCityTypesSerialize['Bullet'], // 0 this.id, // 1 this.x, // 2 this.y, // 3 this.speedX, // 4 this.speedY, // 5 this.finalX, // 6 todo remove this.finalY // 7 todo remove ]; }; 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд▓рдЧрднрдЧ 25 рдмрд╛рдЗрдЯреНрд╕ [0,777,123,456,2,0,123,456] рдорд┐рд▓рддреЗ рд╣реИрдВред рдЦреЗрд▓ рдХреА рдКрдБрдЪрд╛рдИ рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рд▓рдЧрднрдЧ 7-8kb / s рддрдХ рдЧрд┐рд░ рдЧрдпрд╛ред рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЧреБрдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдг рдЖрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

рдЕрдиреБрдХреВрд▓рди 5 - рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди


рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрд╕рдлрд▓ рд░рд╣рд╛ рдерд╛ред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг, рдЙрди рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдкрд░рд┐рд╡рд░реНрддрди рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬреЛ рдЙрдирдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдпрд╣ рдерд╛ рдХрд┐ рдПрдХ рдирдпрд╛ рдЬреБрдбрд╝рд╛ рдЧреНрд░рд╛рд╣рдХ рдЕрддреАрдд рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдХреЗ рд╕рдорд╛рди рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ, рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЧреНрд░рд╣ "рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛", "рд╕рд╛рдорд╛рдиреНрдп рдЪреИрдЯ рдореЗрдВ рд╕рдВрджреЗрд╢", "рдЧреЗрдо рдХреА рд╕реВрдЪреА", "рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛", "рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдореЗрдВ рд╕рдВрджреЗрд╢" рдФрд░ "рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ" рд╣реИрдВред
рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рддрддреНрдХрд╛рд▓ рд╡рд┐рддрд░рдг рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдЬрдорд╛ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднреА рднреА рд╣рд░ 50ms рдореЗрдВ рдмреИрдЪреЛрдВ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдХрдм рдФрд░ рдХреИрд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛: watchCollection () рдФрд░ undathCollection () рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рдореВрд╣ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдирд╡ рдирд┐рд░реНрдорд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ:

 /** * @param collection * @param syncKey ,          */ ServerUser.prototype.watchCollection = function(collection, syncKey) { this.unwatchCollection(syncKey); //      this.updateCollector[syncKey] = []; var user = this; var cb = function(item, type) { user.onCollectionUpdate(syncKey, item, type); }; //    collection.on('update', cb); //  callback,     ,     this.collections[syncKey] = {'callback': cb, 'collection': collection}; //     ,    collection.traversal(function(item){ this.onCollectionUpdate(syncKey, item, 'add'); }, this); }; ServerUser.prototype.unwatchCollection = function(syncKey) { if (this.collections[syncKey]) { //   this.collections[syncKey].collection.removeListener('update', this.collections[syncKey].callback); //  ,        this.clientMessage('clearCollection', syncKey); delete this.collections[syncKey]; delete this.updateCollector[syncKey]; } }; 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рд╕рдВрдЧреНрд░рд╣) рдХреЗ рддреАрди рд╕рдореВрд╣реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ:
 user.watchCollection(registry.users, 'users'); user.watchCollection(registry.premades, 'premades'); user.watchCollection(registry.messages, 'messages'); 

рдФрд░ рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рдЦреЗрд▓ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрджрдиреБрд╕рд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ:
 Premade.prototype.join = function(user, clanId) { // ... user.watchCollection(this.users, 'premade.users'); user.watchCollection(this.messages, 'premade.messages'); // ... }; Premade.prototype.unjoin = function(user) { // ... user.unwatchCollection('premade.users'); user.unwatchCollection('premade.messages'); user.unwatchCollection('f'); user.unwatchCollection('game.botStack'); // ... }; Premade.prototype.startGame = function() { // ... this.users.traversal(function(user){ // ... user.watchCollection(this.game.field, 'f'); user.watchCollection(user.clan.enemiesClan.botStack, 'game.botStack'); // ... }, this); // ... } 

рдпрд╣ рдПрдХ рджрдпрд╛ рд╣реИ рдХрд┐ рд╕рд░рд▓ рдФрд░ рд╕рд╣реА рд╡рд┐рдЪрд╛рд░ рддреБрд░рдВрдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕:
  ticks total nonlib name 2074 0.5% 9.9% LazyCompile: *Game._stepItem battlecity/src/core/game.js:29 751 0.2% 3.6% LazyCompile: MapTiled.intersects battlecity/src/utils/map_tiled.js:102 489 0.1% 2.3% LazyCompile: MapTiled.traversal battlecity/src/utils/map_tiled.js:132 376 0.1% 1.8% LazyCompile: FILTER_KEY native runtime.js:398 

рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Game._stepItem рд╢реАрд░реНрд╖ рдкрд░ рдЖрдпрд╛ рдерд╛, рдФрд░ 9.9% рд╕рдордп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реБрдЖ, рдФрд░ 2.8% рдирд╣реАрдВ, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рдлрд▓ рдорд╛рдирддреЗ рд╣реИрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╕рд░реНрд╡рд░ рд▓рдЧрднрдЧ 50% 10 рдпреБрдЧрдкрдд рдЦреЗрд▓реЛрдВ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред рдореИрдВрдиреЗ рдбреЗрдореЛ рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 20 рдЧреЗрдо рдбрд╛рд▓рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдирд╣реАрдВ рдХреА, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╢рд╛рдо рдХреЗ рдШрдВрдЯреЛрдВ рдореЗрдВ, рдореЗрд░реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдЧрддрд┐ 200kByte / s рдФрд░ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЕрдиреБрдХреВрд▓рди 6 - рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛, рдФрд░ рд▓реВрдк рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ _stepItem () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛:
 Game.prototype._stepItem = function(item) { // tanks and Base processing within Clan.step if (item.step && !(item instanceof Tank) && !(item instanceof Base)) { // todo item.step(); } }; Game.prototype.step = function() { this.field.traversal(this._stepItem, this); this.premade.clans[0].step(); this.premade.clans[1].step(); }; 


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рджреАрд╡рд╛рд░ рдХреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдкрдорд╛рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдЯреЗрдкреЗрдмрд▓ рдЗрдЯрдореНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╢реБрд░реВ рдХреА, рдЬреЛ рдирдХреНрд╢реЗ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рддреЗ рд╕рдордп рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдФрд░ рдЕрдм рдЖрдкрдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрдЯрд┐рд▓ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
 Game = function Game(level, premade) { // ... this.stepableItems = []; this.field.on('add', this.onAddObject.bind(this)); this.field.on('remove', this.onRemoveObject.bind(this)); // ... }; Game.prototype.onAddObject = function(object) { if (object.step && !(object instanceof Tank) && !(object instanceof Base)) { this.stepableItems[object.id] = object; } }; Game.prototype.onRemoveObject = function(object) { delete this.stepableItems[object.id]; }; Game.prototype.step = function() { for (var i in this.stepableItems) { this.stepableItems[i].step(); } // ... }; 


рдирддреАрдЬрддрди, рдореИрдВ рдлрд┐рд░ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдкрд░ рд▓реМрдЯ рдЖрдпрд╛, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реНрддрд░ рдкрд░:
 ticks total nonlib name 129 0.0% 2.4% LazyCompile: MapTiled.intersects battlecity/src/utils/map_tiled.js:102 66 0.0% 1.2% Stub: SubStringStub 54 0.0% 1.0% Stub: CEntryStub 47 0.0% 0.9% Function: EventEmitter.emit events.js:38 39 0.0% 0.7% LazyCompile: MapTiled.add battlecity/src/utils/map_tiled.js:24 30 0.0% 0.6% Function: Socket._writeOut net.js:389 


рдЕрдм 5 рдЧреЗрдо рдПрдХ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреЗ 15-16% рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдореЗрд░реЗ рдкреБрд░рд╛рдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рд▓рдЧрднрдЧ 30 рдЧреЗрдо рдЦреАрдВрдЪрдиреЗ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд╛рде рдмреИрдЧрд╛


рдореБрдЭреЗ рдПрдХ рдмрдЧ рдХреЗ рд╕рд╛рде рд▓рдбрд╝рдирд╛ рдкрдбрд╝рд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ "рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░" рдХрд╣рдирд╛ рднреВрд▓ рдЧрдпрд╛:
 function Parent() { this.property = []; } function Child() { // Parent.apply(this, argiments); -  }; Child.prototype = new Parent(); Child.prototype.constructor = Child; 

рдирддреАрдЬрддрди, рд╕рдВрдкрддреНрддрд┐ рд╕рд░рдгреА рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА, рдФрд░ рдЗрд╕рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рдЪрд╛рдЗрд▓реНрдб рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣рд╛рд░реНрдб-рдЯреВ-рдбрд┐рдЯреЗрдХреНрдЯ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖред рд╕рднреА рдПрдХ рд╣реА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛


рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХрдо рдХрд░рдирд╛, рдФрд░ рдореИрдВ рд╣рд╡рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ - рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЗрд╡рд▓ рдХрдВрдЯреНрд░реЛрд▓ рдХрдорд╛рдВрдбреНрд╕ рддрдХ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ "рдЖрдВрджреЛрд▓рди рдХреА рд╢реБрд░реБрдЖрдд", "рд╕реНрдЯреЙрдк", рдЖрджрд┐ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ desync рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдг рдЯреАрдо рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрдкрдХреЛ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдзреАрдорд╛ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдУрдУрдкреА рдпрд╛ рдХреБрдЫ рд▓реЗрдЦреЛрдВ рдкрд░ рдХрд┐рддрд╛рдмреЗрдВ рдкрдврд╝рддреЗ рд╕рдордп, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЛрдб рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╣рд▓рд╛ рднрд╛рдЧ

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


All Articles