рдПрдХ рдЖрд╡реЗрджрди рд╕реЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░реВрдВрдЧрд╛, рдореИрдВ рд╕рд╛рд░ рдореЗрдВ рдЫреЗрдж рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рд░рд▓ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред


рдкрд╛рдардХ рдХреЛ рдПрдХреНрдЯрд┐рд╡ рд░рд┐рдХреЙрд░реНрдб , рдбреЗрдЯрд╛ рдореЗрдкрд░ , рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдореИрдк рдФрд░ рдпреВрдирд┐рдЯ рдСрдлрд╝ рд╡рд░реНрдХ рдкреИрдЯрд░реНрди рд╕реЗ рдереЛрдбрд╝рд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдмрдбрд╝реА рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдлреЗрдВрдХрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдкрд╣рдЪрд╛рди рдХрд╛ рдирдХреНрд╢рд╛


рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдкрд╣рдЪрд╛рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдкрд╣рдЪрд╛рди рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЗрдХрд╛рдИ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреА рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ, рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╣реИ, рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ, рд▓рд┐рдВрдХ (рдкреЙрдЗрдВрдЯрд░)ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рд▓рд┐рдВрдХ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВред


рдорд╛рдгрд┐рдХ ActiveRecord рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ:


post_a = Post.find 1 post_b = Post.find 1 post_a.object_id != post_b.object_id # true post_a.title = "foo" post_b.title != "foo" # true 

рдпрд╛рдиреА рд╣рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЗ 2 рд╕рдВрджрд░реНрдн рдорд┐рд▓рддреЗ рд╣реИрдВред


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


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


рд▓рдВрдмрд╛ рд▓реЗрди-рджреЗрди


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


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


рдПрди + рез


рд╢рд╛рдпрдж ORM рдЕрдореВрд░реНрдд рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ "рдЫреЗрдж" N + 1 рдХреНрд╡реЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣реИред


ActiveRecord рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд░реВрдмреА рдкрд░ рдЙрджрд╛рд╣рд░рдг:


 posts = Post.all # select * from posts posts.each do |post| like = post.likes.order(id: :desc).first # SELECT * FROM likes WHERE post_id = ? ORDER BY id DESC LIMIT 1 # ... end 

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


рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛


рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдПрди + 1 рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ, рдЖрдк рдРрд╕рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рдЕрдиреБрд░реЛрдз :


 SELECT * FROM posts JOIN LATERAL ( SELECT * FROM likes WHERE post_id = posts.id ORDER BY likes.id DESC LIMIT 1 ) as last_like ON true; 

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


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


рд░рд╛рдЬреНрдп рдФрд░ рдкрд╣рдЪрд╛рди


рдЬреЗрдПрд╕ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 const alice = { id: 0, name: 'Alice' }; 

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


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдореМрдЬреВрджрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 const bob = { id: 1, name: 'Bob' }; alice.id = bob.id; 

рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдЗрдХрд╛рдИ рдХреА 2 рдкрд╣рдЪрд╛рди рд╣реИрдВ: рдПрдХ рд▓рд┐рдВрдХ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреАред рдФрд░ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдРрд▓рд┐рд╕ рдмреЙрдм рдмрдирд╛рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред


рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬрд┐рд╕ рд▓рд┐рдВрдХ рдХреЛ рд╣рдордиреЗ alice рдХрд╣рд╛ рд╣реИ, 2 рдХрд░реНрддрд╡реНрдпреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдПрдХ рд╕рд╛рде рдореЙрдбрд▓ рдкрд╣рдЪрд╛рди рдФрд░ рд░рд╛рдЬреНрдп рдХрд░рддрд╛ рд╣реИред рдПрдХ рд░рд╛рдЬреНрдп рдПрдХ рдореВрд▓реНрдп рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЗрди 2 рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджреЗрдВ рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?


 function Ref(initialState, validator) { let state = initialState; this.deref = () => state; this.swap = (updater) => { const newState = updater(state); if (! validator(state, newState) ) throw "Invalid state"; state = newState; return newState; }; } const UserState = Immutable.Record({ id: null, name: '' }); const aliceState = new UserState({id: 0, name: 'Alice'}); const alice = new Ref( aliceState, (oldS, newS) => oldS.id === newS.id ); alice.swap( oldS => oldS.set('name', 'Queen Alice') ); alice.swap( oldS => oldS.set('id', 1) ); // BOOM! 

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


рднрдВрдбрд╛рд░рдг


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдкреАрдЖрдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 storage.tx( t => { const alice = t.get(0); const bobState = new UserState({id: 1, name: 'Bob'}); const bob = t.create(bobState); alice.swap( oldS => oldS.update('friends', old => old.push(bob.deref.id)) ); }); 

t.get рдФрд░ t.create Ref рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред


рд╣рдо рд╡реНрдпрд╛рдкрд╛рд░ рд▓реЗрдирджреЗрди t рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдРрд▓рд┐рд╕ рдХреЛ рдЙрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬрддреЗ рд╣реИрдВ, рдмреЙрдм рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдРрд▓рд┐рд╕ рдмреЙрдм рдХреЛ рдЕрдкрдирд╛ рджреЛрд╕реНрдд рдорд╛рдирддрд╛ рд╣реИред


рдСрдмреНрдЬреЗрдХреНрдЯ t ref рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред


t рд╕реНрд╡рдпрдВ рдХреЗ рднреАрддрд░ рдЗрдХрд╛рдИ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ ref рд░рд╛рдЬреНрдп рд╣реЛрддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдореИрдк рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, t рдПрдХ рдХреИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдРрд▓рд┐рд╕ рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдкрд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


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


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


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


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


 storage.tx( t => { t.preload([0, 1, 2, 3]); const alice = t.get(0); // from cache }); 

рдкреНрд░рд╢реНрдиреЛрдВ


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


рд╣рдо рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЗрдирджреЗрди рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ (рд╕реНрдерд┐рддрд┐) рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЗрдирджреЗрди рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


 const aliceId = userQuery.findByEmail('alice@mail.com'); storage.tx( t => { const alice = t.getOne(aliceId); }); 

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


рдЖрджреЗрд╢


рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрдм рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдЦрд╛рддреЛрдВ рд╕реЗ рдорд╛рд╕рд┐рдХ рд╢реБрд▓реНрдХ рдШрдЯрд╛рдПрдВред рдпрд╛ рд╕рдВрдШрд░реНрд╖ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛ (upsert) рдбрд╛рд▓реЗрдВ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред


рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рдХреНрд╡реЗрд░реА рд╕реЗ рдмрдВрдбрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдорд╛рдВрдб рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╕рдВрдЪрд╛рд░


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


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


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд▓реЗрдВрдЯ (рдореВрд▓) рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрд╡рд╛рдж рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдЖрджреЗрд╢ рдФрд░ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ред


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


рдирд┐рд╖реНрдХрд░реНрд╖


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


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

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


All Articles