
рд╕рднреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ
рдкрд╣рд▓реА рдмрд╛рд░ рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЦреЗрд▓ рдХреЗ рднрдпрд╛рдирдХ рдмреНрд░реЗрдХ рдХреЗ рд╕рд╛рде рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдирдХреЗ рдХрд╛рд░рдг рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛, рдЕрдЧрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЕрдм рд╕рд░реНрд╡рд░ рдХреНрд░рдо рдореЗрдВ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рде рдЧреЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗрд╡рд▓ рдкрд╛рдБрдЪ рддрдХ рдмрдврд╝рд╛ рджреА рдЧрдИ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рдВрджреБ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдореЗрдВ рдХрд┐ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╢рд╛рдо рдХреЗ рдШрдВрдЯреЛрдВ рдореЗрдВ рдореЗрд░реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдЧрддрд┐ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдЧреАред рдЙрддреНрд╕рд╛рд╣ рдХреЗ рд▓рд┐рдП, рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрддрд░ рдЪреБрдирдирд╛ рд╕рдВрднрд╡ рд╣реИред рдФрд░
"рдЖрдХреНрд░рд╛рдордХ" рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ , 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'],
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд▓рдЧрднрдЧ 25 рдмрд╛рдЗрдЯреНрд╕ [0,777,123,456,2,0,123,456] рдорд┐рд▓рддреЗ рд╣реИрдВред рдЦреЗрд▓ рдХреА рдКрдБрдЪрд╛рдИ рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рд▓рдЧрднрдЧ 7-8kb / s рддрдХ рдЧрд┐рд░ рдЧрдпрд╛ред рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЧреБрдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдг рдЖрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
рдЕрдиреБрдХреВрд▓рди 5 - рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрд╕рдлрд▓ рд░рд╣рд╛ рдерд╛ред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг, рдЙрди рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдкрд░рд┐рд╡рд░реНрддрди рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬреЛ рдЙрдирдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдпрд╣ рдерд╛ рдХрд┐ рдПрдХ рдирдпрд╛ рдЬреБрдбрд╝рд╛ рдЧреНрд░рд╛рд╣рдХ рдЕрддреАрдд рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдХреЗ рд╕рдорд╛рди рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ, рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЧреНрд░рд╣ "рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛", "рд╕рд╛рдорд╛рдиреНрдп рдЪреИрдЯ рдореЗрдВ рд╕рдВрджреЗрд╢", "рдЧреЗрдо рдХреА рд╕реВрдЪреА", "рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛", "рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдореЗрдВ рд╕рдВрджреЗрд╢" рдФрд░ "рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ" рд╣реИрдВред
рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рддрддреНрдХрд╛рд▓ рд╡рд┐рддрд░рдг рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдЬрдорд╛ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднреА рднреА рд╣рд░ 50ms рдореЗрдВ рдмреИрдЪреЛрдВ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдХрдм рдФрд░ рдХреИрд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛: watchCollection () рдФрд░ undathCollection () рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рдореВрд╣ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдирд╡ рдирд┐рд░реНрдорд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ:
ServerUser.prototype.watchCollection = function(collection, syncKey) { this.unwatchCollection(syncKey);
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рд╕рдВрдЧреНрд░рд╣) рдХреЗ рддреАрди рд╕рдореВрд╣реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ:
user.watchCollection(registry.users, 'users'); user.watchCollection(registry.premades, 'premades'); user.watchCollection(registry.messages, 'messages');
рдФрд░ рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рдЦреЗрд▓ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрджрдиреБрд╕рд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ:
Premade.prototype.join = function(user, clanId) {
рдпрд╣ рдПрдХ рджрдпрд╛ рд╣реИ рдХрд┐ рд╕рд░рд▓ рдФрд░ рд╕рд╣реА рд╡рд┐рдЪрд╛рд░ рддреБрд░рдВрдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕:
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) {
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рджреАрд╡рд╛рд░ рдХреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдкрдорд╛рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдЯреЗрдкреЗрдмрд▓ рдЗрдЯрдореНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╢реБрд░реВ рдХреА, рдЬреЛ рдирдХреНрд╢реЗ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рддреЗ рд╕рдордп рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдФрд░ рдЕрдм рдЖрдкрдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрдЯрд┐рд▓ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
Game = function Game(level, premade) {
рдирддреАрдЬрддрди, рдореИрдВ рдлрд┐рд░ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдкрд░ рд▓реМрдЯ рдЖрдпрд╛, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реНрддрд░ рдкрд░:
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() {
рдирддреАрдЬрддрди, рд╕рдВрдкрддреНрддрд┐ рд╕рд░рдгреА рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА, рдФрд░ рдЗрд╕рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рдЪрд╛рдЗрд▓реНрдб рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣рд╛рд░реНрдб-рдЯреВ-рдбрд┐рдЯреЗрдХреНрдЯ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖред рд╕рднреА рдПрдХ рд╣реА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛
рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХрдо рдХрд░рдирд╛, рдФрд░ рдореИрдВ рд╣рд╡рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ - рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЗрд╡рд▓ рдХрдВрдЯреНрд░реЛрд▓ рдХрдорд╛рдВрдбреНрд╕ рддрдХ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ "рдЖрдВрджреЛрд▓рди рдХреА рд╢реБрд░реБрдЖрдд", "рд╕реНрдЯреЙрдк", рдЖрджрд┐ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ desync рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдг рдЯреАрдо рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрдкрдХреЛ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдзреАрдорд╛ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдУрдУрдкреА рдпрд╛ рдХреБрдЫ рд▓реЗрдЦреЛрдВ рдкрд░ рдХрд┐рддрд╛рдмреЗрдВ рдкрдврд╝рддреЗ рд╕рдордп, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЛрдб рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╣рд▓рд╛ рднрд╛рдЧ