рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рд╡рд░реНрд╖ рдХреЗ рджреМрд░рд╛рди, рд╣рдордиреЗ рд░рд┐рдПрдХреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреЗрдореНрдкреНрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдкреЗрдЬ рдХреЛ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рджреЗрдЦрд╛ред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR - рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ) рдХрд░рдиреЗ рдФрд░ SEO рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╕рд░реНрдЪ рдЗрдВрдЬрди JS рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдЗрдЯ рдХрд╛ рд░реЗрдВрдЧрдиреЗ рдХрд╛ рд╕рдордп рд╕реАрдорд┐рдд рд╣реИред



рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ HTML рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░ рдкрд░ рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреАрдореА рдорд╢реАрдиреЛрдВ рдФрд░ рдзреАрдореЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ред рдЬреЗрдПрд╕ рдбрд╛рдЙрдирд▓реЛрдб, рдкрд╛рд░реНрд╕ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗрд╡рд▓ HTML рдХреЛ рддреБрд░рдВрдд рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЗрдПрд╕рдП рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдордЧреНрд░реА рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдЪрд░рдг рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдХреЗрд╡рд▓ рд╕рдорд╛рдкреНрдд рдбреЛрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, рдФрд░ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЬрд▓рдпреЛрдЬрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реЗрдВрдбрд░ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореИрдЪ рдХреЗ рдкрд░рд┐рдгрд╛рдоред рдпрджрд┐ рд╡реЗ рд╡рд┐рдЪрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдлрд╛рдпрджреЗ рдХреЛ рдирдХрд╛рд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЛ рдореЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЙрд╕рдореЗрдВ рд╕рдкреНрд░реЗрд╕рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдЬреЛрдбрд╝реЗрдВ suppressHydrationWarning={true} рдЬреЛрдбрд╝реЗрдВред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣рд╛рдБ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ: рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ window рдирд╣реАрдВ рд╣реИред рдХреЛрдб рдЬреЛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЖрдк UNSAFE_componentWillMount () рдпрд╛, рд╣реБрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, uselayouteffect рдореЗрдВ window рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмреИрдХрдПрдВрдб рд╕реЗ рдЖрд░рдВрднрд┐рдХ рд╕реНрдЯреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдмрд▓рддреА рд╣реИ, рдЗрд╕реЗ renderToString() рдорд╛рдзреНрдпрдо рд╕реЗ renderToString() , рддреИрдпрд╛рд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╕реНрдЯреЗрдЯ рдФрд░ HTML рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЙрдард╛рддреА рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрддреА рд╣реИред


Hh.ru рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ JS рдХреЗ рд╣рд╛рдЗрдХ рдХреЛ рдХреЗрд╡рд▓ рдЕрдЬрдЧрд░ рдХреЗ рдПрдкрд┐ рдЧреЗрдЯрд╡реЗ рдореЗрдВ рдЕрдиреБрдорддрд┐ рд╣реИред рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдХреЗ рд▓рд┐рдП рд╣реИред рдкрд╛рдпрдерди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдмреИрдХрдПрдВрдб рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рджреЗрддрд╛ рд╣реИред Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдЬрдЧрд░ рдХреЛ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдпрд╛рддреНрд░рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред


рдкрд╣рд▓реЗ рдЖрдкрдХреЛ HTTP рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд░ рдЪреБрдирдирд╛ рдерд╛ред рд╣рдо рдХреЛрдЖ рдкрд░ рд░реБрдХ рдЧрдПред await рд╕рд╛рде рдЖрдзреБрдирд┐рдХ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА рд╣рд▓реНрдХреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реИ, рдЬреЛ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ рдЦреБрдж рд╣рд▓реНрдХрд╛ рдФрд░ рддреЗрдЬ рд╣реИ ред рд╣рд╛рдВ, рдФрд░ koa рджреНрд╡рд╛рд░рд╛ рдЙрд╕реА рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рдЬрд┐рд╕реЗ рд╡реЗ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ рдЕрдиреБрднрд╡ рд▓реБрднрд╛рд╡рдирд╛ рд╣реЛрддрд╛ рд╣реИред


рд╣рдордиреЗ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЛ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ KOA рдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦрд╛, рдЬреЛ 200 рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдФрд░ рдЗрд╕реЗ рдареЗрд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рджрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛:


 const Koa = require('koa'); const app = new Koa(); const SERVER_PORT = 9400; app.use(async (ctx) => { ctx.body = 'Hello World'; }); app.listen(SERVER_PORT); 

Hh.ru рдореЗрдВ, рд╕рднреА рд╕реЗрд╡рд╛рдПрдБ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд░рд╣рддреА рд╣реИрдВред рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдЕрдирд╕реЙрд▓рд┐рдмрд▓ рдкреНрд▓реЗрдмреБрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдФрд░ рдЯреЗрд╕реНрдЯ рд╕реНрдЯреИрдВрдбреНрд╕ рдкрд░ рд╕рд░реНрд╡рд┐рд╕ рд░реЛрд▓ рдЖрдЙрдЯ рд╣реЛ рдЬрд╛рдПред рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдФрд░ рдкрд░реАрдХреНрд╖рдХ рдХрд╛ рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдареЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИред рд╣рдордиреЗ рдЕрдкрдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдФрд░ рдКрд░реНрдЬрд╛ рдирд╛рдЯрдХрдкреБрд╕реНрддрдХ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╡реНрдпрддреАрдд рдХреАред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рджреЛ рдлреНрд░рдВрдЯ-рдПрдВрдб рд░реЗрдВрдбрд░рд░реНрд╕ рдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдпрд╣ hh.ru рдореЗрдВ рдПрдХ рдиреЛрдб рдкрд░ рдкрд╣рд▓реА рд╕реЗрд╡рд╛ рд╣реИред рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдерд╛ рдХрд┐ рд╕реЗрд╡рд╛ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдХреИрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕реЗ рдЙрд╕ рд╕реЗрд╡рд╛ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдкрд╛рджрди рд╣реЛ рд░рд╣рд╛ рд╣реИред рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВред рдПрдХ рдирдВрдЧреЗ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдбреЙрдХ рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реЛред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рддрдиреА рд░реИрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


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


рдлрд┐рд░ рд╣рдордиреЗ рд░рд╛рдЙрдЯрд┐рдВрдЧ рд╕рд░реНрд╡рд░ рд╕реАрдЦрд╛ред рдЙрдЪрд┐рдд рд╕рдВрддреБрд▓рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЬреАрд╡рд┐рдд рд╣реИрдВред рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдСрдкрд░реЗрд╢рдирд▓ рд╣рд╛рд░реНрдЯ рдмреАрдЯ /status рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 200 рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рдВрддреБрд▓рди рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп, рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рддреИрдпрд╛рд░ рдорд╛рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд▓рд╛:


 export default async function(ctx, next) { if (routeMap[ctx.request.path]) { routeMap[ctx.request.path](ctx); } else { ctx.throw(NOT_FOUND, getStatusText(NOT_FOUND)); } next(); } 

рдФрд░ рд╣рдо рд╕рд╣реА url рдкрд░ 200 рдХрд╛ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ:


 export default (ctx) => { ctx.status = 200; ctx.body = '200'; }; 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдПрдХ рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡ рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рдЬреЛ <script> рдореЗрдВ рд╕реНрдЯреЗрдЯ рд▓реМрдЯрд╛ рдФрд░ HTML рддреИрдпрд╛рд░ред


рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рддреЗрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЙрдЧ JSON рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реА рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓реЙрдЧ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ред Log4js рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ - рдпрд╣ рддреЗрдЬрд╝, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЙрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред рдирд┐рдЧрд░рд╛рдиреА рд╕рдорд░реНрдерди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдЧ рдкреНрд░рд╛рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рд▓реЙрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдорд┐рдд рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЙрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрднреА рднреА рд╕рдВрддрд░реА рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдореИрдВ рд▓реЙрдЧрд░реНрд╕ рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред


рддрдм рдПрдХ рд╕реБрдВрджрд░ рд╢рдЯрдбрд╛рдЙрди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ - рдЬрдм рд╕рд░реНрд╡рд░ рдмреАрдорд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЬрдм рд░рд┐рд▓реАрдЬ рд░реЛрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рд▓рдЯрдХрд╛рдП рдЧрдП рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдХрдИ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ gracefulShutdown(app.listen(SERVER_PORT)) -рд╢рдЯрдбрд╛рдЙрди рд▓рд┐рдпрд╛ , рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдерд╛ рд╡рд╣ gracefulShutdown(app.listen(SERVER_PORT)) рдХреЙрд▓ gracefulShutdown(app.listen(SERVER_PORT)) рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдЙрддреНрдкрд╛рджрди-рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдкреГрд╖реНрда рдкрд░ 5% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреЗрдЦрд╛, рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдлрдПрдордкреА рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдПрдХ рд╕рд░реНрд╡рд░ ~ 20 рдЖрд░рдкреАрдПрд╕ рд░рдЦрддрд╛ рд╣реИ (рдпрд╣ рддрдереНрдп рдЬрд╛рд╡рд┐рд╕реНрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдордиреЛрд░рдВрдЬрдХ рдерд╛)ред рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛:


  • рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ рд╡реЗ NODE_ENV = рдЙрддреНрдкрд╛рджрди рдХреЗ рдмрд┐рдирд╛ рдмрдирд╛рдП рдЧрдП рдереЗ (рд╣рдо рд╕рд░реНрд╡рд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдИрдПрдирд╡реА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЧреИрд░-рдЙрддреНрдкрд╛рджрди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рджреЗрддреА рд╣реИ, рдЬреЛ рд▓рдЧрднрдЧ 30% рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓рддреА рд╣реИред


  • рд╣рдордиреЗ рдиреЛрдб рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 8 рд╕реЗ 10 рддрдХ рдмрдврд╝рд╛ рджрд┐рдпрд╛, рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдПрдХ рдФрд░ 20-25% рдорд┐рд▓рд╛ред


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



 if (cluster.isMaster) { cluster.on('exit', (worker, exitCode) => { if (exitCode !== SUCCESS) { cluster.fork(); } }); for (let i = 0; i < serverConfig.cpuCores; i++) { cluster.fork(); } } else { runApp(); } 

рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕реАрдкреАрдпреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рдпрджрд┐ рдмрдЪреНрдЪрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рдХреНрд░реИрд╢ рдХрд░рддрд╛ рд╣реИ - рддреЛ рдирд┐рдХрд╛рд╕ рдХреЛрдб 0 рдирд╣реАрдВ рд╣реИ (рд╣рдо рдЦреБрдж рд╕рд░реНрд╡рд░ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ), рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреА рд╣реИред
рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕реАрдкреАрдпреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдмрдврд╝рддрд╛ рд╣реИред


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдореВрд▓ рдкреНрд▓реЗрдмреБрдХ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп - рд▓рдЧрднрдЧ 3 рд╕рдкреНрддрд╛рд╣ред рдкреВрд░реЗ SSR рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 2 рд╕рдкреНрддрд╛рд╣ рдХрд╛ рд╕рдордп рд▓рдЧрд╛ рдФрд░ рд▓рдЧрднрдЧ рдПрдХ рдорд╣реАрдиреЗ рддрдХ рд╣рдордиреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ред рдпрд╣ рд╕рдм рдиреЛрдбреНрд╕ рдХреЗ рдЙрджреНрдпрдо рдЕрдиреБрднрд╡ рдХреЗ рдмрд┐рдирд╛, 2 рдореЛрд░реНрдЪреЛрдВ рдХреА рддрд╛рдХрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред SSR рдХрд░рдиреЗ рд╕реЗ рдбрд░реЛ рдордд, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд - NODE_ENV=production рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдПрд╕рдИрдУ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдВрдЧреЗред

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


All Articles