рдЕрдВрдЪрд▓ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдгреАрдпред рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди

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

рдпрд╣рд╛рдВ рдореИрдВ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдирдП рдЖрдЗрд╡реА рдХрдВрдкрд╛рдЗрд▓рд░ (рдЬреЛ рдХрд┐ рдХреЛрдгреАрдп 9 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╝реЛрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред



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

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

рдЖрдкрдХреЛ рдЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛ рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред


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

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

рдХреЛрдгреАрдп рд╕реЗ рдЬрд╝реЛрди рдирд┐рдХрд╛рд▓реЗрдВ


рдХреЛрдгреАрдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдпрд╛рдд рдХрдорд╛рдВрдб рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ polyfills.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред


рдЬрд╝реЛрди рдмрд╛рд╣рд░ рдЯрд┐рдкреНрдкрдгреА рдХреАред рдЖрдпрд╛рдд рдЖрджреЗрд╢

рдЕрдЧрд▓рд╛ - рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд░реВрдЯ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд▓реИрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 platformBrowserDynamic()  .bootstrapModule(AppModule, {    ngZone: 'noop'  })  .catch(err => console.error(err)); 

рдХреЛрдгреАрдп рдЖрдЗрд╡реА: рд╕реНрд╡-рдкрд╣рдЪрд╛рди рдкрд░рд┐рд╡рд░реНрддрди etdetectChanges рдФрд░ vymarkDirty рдХреЗ рд╕рд╛рде


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВ, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдЗрд╡реА рдЖрдкрдХреЛ рдШрдЯрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЧрдВрджрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд╝реЛрди рдФрд░ рдбреАрдЖрдИ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред

@angular/core рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпреЗ ╔╡detectChanges рдФрд░ ╔╡markDirty ред рдпреЗ рджреЛ рдХрд╛рд░реНрдп рдЕрднреА рднреА рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рд╣реИрдВ рдФрд░ рдЕрд╕реНрдерд┐рд░ рд╣реИрдВ - рдкреНрд░рддреАрдХ ╔╡ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

╞Я ╔╡markDirty рдлрд╝рдВрдХреНрд╢рди


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдПрдХ рдШрдЯрдХ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ "рдЧрдВрджрд╛" рдмрдирд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдШрдЯрдХ рдХреЛ "рдЧрдВрджрд╛" рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред

 import { ╔╡markDirty as markDirty } from '@angular/core'; @Component({...}) class MyComponent {  setTitle(title: string) {    this.title = title;    markDirty(this);  } } 

тЦН тЦНdetectChanges рдлрд╝рдВрдХреНрд╢рди


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

 import { ╔╡detectChanges as detectChanges } from '@angular/core'; @Component({...}) class MyComponent {  setTitle(title: string) {    this.title = title;    detectChanges(this);  } } 

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ


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

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

Ervedрднрд╛рд░рдд рдХреА рд╢реЛрднрд╛ рдмрдврд╝рд╛рддреЗ рд╣реБрдП


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

  • рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдПред
  • рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡рд╕реНрддреБред
  • рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ рдХреЛред

рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, рд╣рдо state рд╡рд╕реНрддреБ рдФрд░ changeTitle рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП changeTitle @observed рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

 export class Component {    title = '';    @observed() state = {        name: ''    };    @observed()    changeTitle(title: string) {        this.title = title;    }    changeName(name: string) {        this.state.name = name;    } } 

  • state рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
  • рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ changeTitle рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдпрд╣рд╛рдБ BehaviorSubject рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 export class AppComponent {    @observed() show$ = new BehaviorSubject(true);    toggle() {        this.show$.next(!this.show$.value);    } } 

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

тЦН рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдпрд╣рд╛рдБ observed рдбреЗрдХреЛрд░реЗрдЯрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ:

 export function observed() {  return function(    target: object,    propertyKey: string,    descriptor?: PropertyDescriptor  ) {} } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, descriptor рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╡рд┐рдзрд┐ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╣ рдХрд░рддреЗ рд╣реИрдВ:

  • descriptor. рдЧреБрдг рд╕рд╣реЗрдЬреЗрдВ descriptor. value ред
  • рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ markDirty(this) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

     if (descriptor) {  const original = descriptor.value; //     descriptor.value = function(...args: any[]) {    original.apply(this, args); //       markDirty(this);  }; } else {  //   } 

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡рд╕реНрддреБ рдпрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХреЛрдгреАрдп рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐, рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!)ред

рд╣рдо ╔╡cmp рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдгреАрдп рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдЧреБрдгреЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо onInit рдФрд░ onInit onDestroy рдХреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 const getCmp = type => (type).╔╡cmp; const cmp = getCmp(target.constructor); const onInit = cmp.onInit || noop; const onDestroy = cmp.onDestroy || noop; 

рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЪрд┐рдиреНрд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо ReflectMetadata рдЙрдкрдпреЛрдЧ ReflectMetadata рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ true ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЬрд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдШрдЯрдХ рдХреЗ рдЖрд░рдореНрдн рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 Reflect.set(target, propertyKey, true); 

рдЕрдм onInit рд╣реБрдХ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдФрд░ рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:

 cmp.onInit = function() {  checkComponentProperties(this);  onInit.call(this); }; 

рд╣рдо checkComponentProperties рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ Reflect.set рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ:

 const checkComponentProperties = (ctx) => {  const props = Object.getOwnPropertyNames(ctx);  props.map((prop) => {    return Reflect.get(target, prop);  }).filter(Boolean).forEach(() => {    checkProperty.call(ctx, propertyKey);  }); }; 

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

 const checkProperty = function(name: string) {  const ctx = this;  if (ctx[name] instanceof Observable) {    const subscriptions = getSubscriptions(ctx);    subscriptions.add(ctx[name].subscribe(() => {      markDirty(ctx);    }));  } else {    //    } }; 

рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рдЙрд╕рдХреЗ handler рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ markDirty рдХреЛ рдХреЙрд▓ markDirty :

 const handler = {  set(obj, prop, value) {    obj[prop] = value;    ╔╡markDirty(ctx);    return true;  } }; ctx[name] = new Proxy(ctx, handler); 

рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдШрдЯрдХ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 cmp.onDestroy = function() {  const ctx = this;  if (ctx[subscriptionsSymbol]) {    ctx[subscriptionsSymbol].unsubscribe();  }  onDestroy.call(ctx); }; 

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

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

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреНрд╡рд░рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


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

рдореИрдВ, рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЬрд╝реЛрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдХреНрд░рд┐рдкреНрдЯреЛрдлрд╝реЛрд▓рд┐рдпреЛ рд╢реМрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред

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

 @Component({...}) export class AssetPricerComponent {  @observed() price$: Observable<string>;  @observed() trend$: Observable<Trend>;   // ... } 

рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рджреЛ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: price (рд╕рдВрдкрддреНрддрд┐ рдХреА рдХреАрдордд рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реЛрдЧреА) рдФрд░ trend (рдпрд╣ рдЪрд░ рдореВрд▓реНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреА рджрд┐рд╢рд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реБрдП рдорд╛рди up , stale рдФрд░ down рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ @observed рд╕рдЬрд╛рдпрд╛ред

тЦН рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдВрдбрд▓ рдЖрдХрд╛рд░


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


Zone.js рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо

рдФрд░ рдпрд╣рд╛рдБ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╣реИред


рдмрд┐рдирд╛ рдЬрд╝реЛрди рдХреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдоред рдЬреЗрдПрд╕

polyfills-es2015.xxx.js рдкрд░ рдзреНрдпрд╛рди polyfills-es2015.xxx.js ред рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд╝реЛрди.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд▓рдЧрднрдЧ 35 Kb рд╣реИред рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдЬрд╝реЛрди.рдЬреЗрдПрд╕ - рдХреЗрд╡рд▓ 130 рдмрд╛рдЗрдЯреНрд╕ред

тЦНNachalnaya рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ


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

рд╢рд╛рдпрдж рджреЛ рдЖрд╡реЗрджрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдмрдВрдбрд▓реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рддреЛ, рдпрд╣рд╛рдБ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред


рдЬреЛрди.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдо

рдФрд░ рдпрд╣рд╛рдБ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣реИ рдЬреЛ рдЬрд╝реЛрдиред рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

тЦН рдкреНрд░рджрд░реНрд╢рди


рдФрд░ рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдПред рдпрд╣ рд▓реЛрдб рдХреЗ рддрд╣рдд рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕реИрдХрдбрд╝реЛрдВ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдЕрдкрдбреЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред

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

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

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдпрд╣рд╛рдБ рдкрд░ рдЬреЛ рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИ рдЬреЛ Zone.js. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рджрд┐рдЦрддрд╛ рд╣реИ


System.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдб

рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


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

рд╣рдо рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдЧреНрд░рд╛рдл (рдкреАрд▓рд╛) рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ:

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

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдкрд░рд┐рдгрд╛рдо рдХреНрд░реЛрдо рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рд╛рде рдЦреБрд▓реЗ рдереЗ, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рджрдмрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред

тЦН рднрд╛рд░ рд╡реГрджреНрдзрд┐


рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдореВрд▓реНрдп рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрддреНрдкрд╛рджрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рд░ рдкрд▓ 4 рдФрд░ рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рдХрд░реЗрдЧреАред

рдпрд╣рд╛рдБ рд╣рдо рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдЬрд┐рд╕рдореЗрдВ рдЬрд╝реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓реЛрдб рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЕрдм рд▓рдЧрднрдЧ 50% рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
  • рд╡рд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣рд╛, рдЬрд┐рддрдирд╛ рдХрд┐ рдЬреЛрди.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рддрднреА рдЬрдм рдХреАрдорддреЛрдВ рдХреЛ рд╣рд░ 10 рдПрдордПрд╕ (рдирдП рдбреЗрдЯрд╛, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, 100 рд╕рдВрд╕реНрдерд╛рдУрдВ рд╕реЗ рдЖрдП) рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

тЦН рдХреЛрдгреАрдп рдмреЗрдВрдЪрдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг


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

рдореИрдВрдиреЗ, рдЗрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛, рдЬреЛ рднрд╛рд░реА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдВрдЧреБрд▓рд░ рдмреЗрдВрдЪрдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред

рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдШрдЯрдХ рдХрд╛ рдХреЛрдб рд╣реИ:

 @Component({...}) export class AppComponent {  public data = [];  @observed()  run(length: number) {    this.clear();    this.buildData(length);  }  @observed()  append(length: number) {    this.buildData(length);  }  @observed()  removeAll() {    this.clear();  }  @observed()  remove(item) {    for (let i = 0, l = this.data.length; i < l; i++) {      if (this.data[i].id === item.id) {        this.data.splice(i, 1);        break;      }    }  }  trackById(item) {    return item.id;  }  private clear() {    this.data = [];  }  private buildData(length: number) {    const start = this.data.length;    const end = start + length;    for (let n = start; n <= end; n++) {      this.data.push({        id: n,        label: Math.random()      });    }  } } 

рдореИрдВрдиреЗ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдФрд░ рдмреЗрдВрдЪрдкреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реЗрдЯ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рд╕рдВрдЪрд╛рд▓рди рдХрдИ рдмрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд┐рдП рдЧрдП рдереЗред


рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ

рдкрд░рд┐рдгрд╛рдо


рдпрд╣рд╛рдБ Benchpress рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдПрдХ рдирдореВрдирд╛ рд╣реИред


рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░рд┐рдгрд╛рдо

рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд╕рдВрдХреЗрддрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  • gcAmount : gc рдСрдкрд░реЗрд╢рдВрд╕ рд╡реЙрд▓реНрдпреВрдо (рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣), Kb
  • gcTime : рдЬреАрд╕реА рдСрдкрд░реЗрд╢рди рд╕рдордп, рдПрдордПрд╕ред
  • majorGcTime : рдореБрдЦреНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдордп gc, msред
  • pureScriptTime : рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдПрдордПрд╕ рдореЗрдВ, рдЬреАрд╕реА рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
  • рд░реЗрдВрдбрд░ рдЯрд╛рдЗрдо: рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЯрд╛рдЗрдо, renderTime
  • scriptTime : рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬреАрд╕реА рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрдиред

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

рдЯреЗрд╕реНрдЯ: 1000 рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдирд╛


рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, 1000 рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред


рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдЯреЗрд╕реНрдЯ: 10,000 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рднрд╛рд░ рдмрдврд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИред


рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдЯреЗрд╕реНрдЯ: 1000 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ


рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, 1000 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ 10,000 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред


рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдЯреЗрд╕реНрдЯ: 10,000 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛


рдпрд╣рд╛рдВ, 10,000 рд▓рд╛рдЗрдиреЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рддрдм рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕реЛрд░реНрд╕ рдХреЛрдб


рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИред рдпрд╣ рдХреЛрдб рднреА рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

 // tslint:disable import { Observable, Subscription } from 'rxjs'; import { Type, ╔╡ComponentType as ComponentType, ╔╡markDirty as markDirty } from '@angular/core'; interface ComponentDefinition {  onInit(): void;  onDestroy(): void; } const noop = () => { }; const getCmp = <T>(type: Function) => (type as any).╔╡cmp as ComponentDefinition; const subscriptionsSymbol = Symbol('__ng__subscriptions'); export function observed() {  return function(    target: object,    propertyKey: string,    descriptor?: PropertyDescriptor  ) {    if (descriptor) {      const original = descriptor.value;      descriptor.value = function(...args: any[]) {        original.apply(this, args);        markDirty(this);      };    } else {      const cmp = getCmp(target.constructor);      if (!cmp) {        throw new Error(`Property ╔╡cmp is undefined`);      }      const onInit = cmp.onInit || noop;      const onDestroy = cmp.onDestroy || noop;      const getSubscriptions = (ctx) => {        if (ctx[subscriptionsSymbol]) {          return ctx[subscriptionsSymbol];        }        ctx[subscriptionsSymbol] = new Subscription();        return ctx[subscriptionsSymbol];      };      const checkProperty = function(name: string) {        const ctx = this;        if (ctx[name] instanceof Observable) {          const subscriptions = getSubscriptions(ctx);          subscriptions.add(ctx[name].subscribe(() => markDirty(ctx)));        } else {          const handler = {            set(obj: object, prop: string, value: unknown) {              obj[prop] = value;              markDirty(ctx);              return true;            }          };          ctx[name] = new Proxy(ctx, handler);        }      };      const checkComponentProperties = (ctx) => {        const props = Object.getOwnPropertyNames(ctx);        props.map((prop) => {          return Reflect.get(target, prop);        }).filter(Boolean).forEach(() => {          checkProperty.call(ctx, propertyKey);        });      };      cmp.onInit = function() {        const ctx = this;        onInit.call(ctx);        checkComponentProperties(ctx);      };      cmp.onDestroy = function() {        const ctx = this;        onDestroy.call(ctx);        if (ctx[subscriptionsSymbol]) {          ctx[subscriptionsSymbol].unsubscribe();        }      };      Reflect.set(target, propertyKey, true);    }  }; } 

рдкрд░рд┐рдгрд╛рдо


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

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдХрд╛рд╕ рд╕рдмрд╕реЗ рдЖрдХрд░реНрд╖рдХ рдЪреАрдЬ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЙрд╕рдХреЗ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИред рд╡рд╣ рд╣реИ - рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕реНрд╡рд╛рдореА рд╣реИ рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреЛ рдЙрд╕рдХреЗ рдЙрдЪрд┐рдд рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рд╕рдордп рд╣реИред

рдпрджрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдорд╛рдирд╛ рдХрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЕрдбрд╝рдЪрди рдареАрдХ рдЬреЛрди.рдЬреЗрдПрд╕ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдХрд░ рдПрдВрдЧреБрд▓рд░ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЛрдгреАрдп рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрд╡реА рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рдЖрд╡реЗрджрди рдХреА рдЧрддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝реЛрди.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк рдЕрдкрдиреА рдХреЛрдгреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?


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


All Articles