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

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR) рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реА рдЫреЛрдЯреА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдЕрдиреБрд╕рдВрдзрд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд░рд╣реА рд╣реИ
рдХреЛрдгреАрдп рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓реБрдврд╝рдХрд╛ рдиреАрдЪреЗ рд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
prerender
рдПрдХ рдкреНрд░реАрд░реЗрдиреНрдбрд░ рд╣рдорд╛рд░реЗ рдПрд╕рдкреАрдП рдкреГрд╖реНрда рд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреА рдкреАрдврд╝реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рд░рдВрддрд░ рдбреЛрдо рд╣реИред
рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ :
- рд╕рд╛рдзрд╛рд░рдг рд╕реНрдереИрддрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП
- рд▓рдЧрд╛рддрд╛рд░ рдпрд╛ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрджрд▓рддреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде
- рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ (+ рдмрд┐рдВрджреБ 2)
- рдЬрдм рдПрдкреАрдЖрдИ рд╕реЗ рдбреЗрдЯрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрд╕рдИрдУ рдореЗрдЯрд╛ рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ :
- рдбреЗрдЯрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рддреЗрдЬреА рд╕реЗ рдмрджрд▓ рд░рд╣реА рд╣реИ
- рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИ
- рдмрд┐рд▓реНрдбрд┐рдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ
рдХреЛрдгреАрдп рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ
рдХреЛрдгреАрдп рдпреВрдирд┐рд╡рд░реНрд╕рд▓, рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдХреЛрдгреАрдп рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ ( https://github.com/angular/universal )
рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП: https://angular.io/guide/universal
рдмрд╛рд░реАрдХрд┐рдпреЛрдВ:
рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди NodeJS рдФрд░ .Net рдХреЛрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдХреЗ рд▓рд┐рдП .Net рдХреЛрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗрддрд╛:
- рдЕрдВрджрд░ рдЖрдк рдЕрднреА рднреА NodeJS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
- рдпрд╣ рдзреАрдорд╛ рд╣реИ: https://github.com/angular/universal/issues/654#issuecomment-350037107
- рдХрдо рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ
рд╢реБрд░реБрдЖрдд рдХреЗ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг:
- https://github.com/qdouble/angular-webpack-starter
- https://github.com/ng-seed/universal
- https://github.com/Angular-RU/angular-universal-starter
DOM рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдореЛрдЬрд╝рд┐рд▓рд╛ рдХреЗ dom.js рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЛрдорд┐рдиреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ document is not defined
рддрд░рд╣ document is not defined
рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ document is not defined
ред
рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП server.ts рдореЗрдВ рдХреЛрдб:
global['window'] = win; Object.defineProperty(win.document.body.style, 'transform', { value: () => { return { enumerable: true, configurable: true }; }, }); global['document'] = win.document; global['CSS'] = null;
рдХреЛрдгреАрдп рдореЗрдВ рдкреВрд░реНрд╡рдЬ
рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: static.paths.ts ред
рд╣рдо prerender.ts рдореЗрдВ prerender рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдПрдХ рдкреНрд░реАрд░реЗрдиреНрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рджреМрдбрд╝реЗрдВ:
ng build --prod && ng run universal-demo:server:production && webpack --progress --colors
рд╕рд░реНрд╡рд░ рдХреЛрдб рдФрд░ рдХреЛрдгреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП node prerender.js
рдХреЛ node prerender.js
ред
рдПрдХ рдкреНрд░реАрд░реЗрдиреНрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЛ рдирдЧрдиреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
SSR рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо server.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рди рдХрд░реЗрдВ:
ng build --prod && ng run universal-demo:server:production && webpack --progress --colors
,
рддреЛ node server.js
ред
рд╕рд░реНрд╡рд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ node
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдк рдПрдХ рд╕рдВрдпреБрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдкреНрд░реАрд░реЗрдВрдбрд░ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ SSR, рдпрджрд┐ рдЖрдк рдХреБрдЫ рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рджреЗрддреЗ рд╣реИрдВ: рд╕рд░реНрд╡рд░ рдХреЛрдб
рдХреБрдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдХреБрдХреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд╛рдЭрд╛-рдореЗрдЯрд╛.рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ , рдЬреЛ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рд╕рд░реНрд╡рд░ рдкрд░ рдПрдкреАрдЖрдИ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдкреАрдЖрдИ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:
- TransferHttpCacheModule - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЙрдбреНрдпреВрд▓
- ngx-transfer-http - рдЙрдиреНрдирдд рд╕реЗрд╡рд╛
рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TransferState рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЛрдХрд░ рдмрд┐рд▓реНрдб рдЙрджрд╛рд╣рд░рдг:
potestit:
рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рдореБрджрд╛рдп