{"id":337541,"date":"2022-08-26T09:00:39","date_gmt":"2022-08-26T09:00:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=337541"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=337541","title":{"rendered":"<span>\u042f\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 DivKit \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f server-driven UI \u0441\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u042f\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 DivKit \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0432\u0451\u0440\u0441\u0442\u043a\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443: \u043d\u0430\u043b\u0430\u0434\u0438\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0430\u043f\u0434\u0435\u0439\u0442\u043e\u0432 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0437\u043d\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/mm\/kl\/j1\/mmklj1vpqovhgbqrwt6isktevfo.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/mm\/kl\/j1\/mmklj1vpqovhgbqrwt6isktevfo.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a: \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0434\u043b\u044f Android, iOS \u0438 \u0432\u0435\u0431\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 <abbr title=\"Domain-specific language\">DSL<\/abbr> \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 Kotlin, TypeScript \u0438 Python. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d <a href=\"https:\/\/github.com\/divkit\/divkit\">\u043d\u0430 \u0413\u0438\u0442\u0445\u0430\u0431\u0435<\/a> \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache 2.0. <\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 DivKit \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u042f\u043d\u0434\u0435\u043a\u0441, \u0410\u043b\u0438\u0441\u0435, \u0415\u0434\u0430\u0434\u0438\u043b\u0435, \u041c\u0430\u0440\u043a\u0435\u0442\u0435, \u0422\u0412 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a \u043b\u0435\u043d\u0442\u044b \u0425\u0430\u0431\u0440\u0430, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e<\/h2>\n<p>  \u041c\u044b \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u042f\u043d\u0434\u0435\u043a\u0441 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0434\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b, \u043f\u0440\u043e\u0431\u043a\u0438 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u043e\u0440\u043e\u0433 \u0432 \u0433\u043e\u0440\u043e\u0434\u0435. \u041a\u0430\u043a \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0435\u0441\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u043b\u0430\u0441\u044c \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u043c\u0435\u0442\u0440\u043e, \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u0448\u0451\u043b \u0433\u0440\u0430\u0434 \u2014 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0438 \u0432 UI?<\/p>\n<p>  \u041d\u0430\u0448\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043b\u0435\u043d\u0442\u0443 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 WebView \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041d\u043e, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430 \u0440\u0430\u0437\u0431\u043e\u0440 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u0440\u0435\u0448\u0435\u0439 WebView, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0443\u0442\u044c. <\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430 \u043b\u0435\u043d\u0442\u0443 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u0438 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0432 \u043d\u0438\u0445 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0447\u0430\u0441\u0442\u0435\u0439. \u0412\u0435\u0437\u0434\u0435 \u0435\u0441\u0442\u044c \u0448\u0430\u043f\u043a\u0430 \u0441 \u0442\u0440\u0435\u043c\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0438 \u0444\u0443\u0442\u0435\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f. \u0412 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u0438\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043f\u043b\u044e\u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430.<\/p>\n<p>  \u0422\u0430\u043a \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Div&#8217;\u043e\u0432, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432. \u0421 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"json\">{     \"type\": \"title\",     \"title\": \"Hello World!\",     \"title_style\": \"title_s\" }<\/code><\/pre>\n<p>  \u041d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043c\u044b \u0437\u0430\u0448\u0438\u043b\u0438 \u0437\u043d\u0430\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u0440\u0430\u0437\u043c\u0435\u0440, \u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0435, \u043c\u0435\u0436\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0438 \u043c\u0435\u0436\u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b) \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u0441\u0442\u0438\u043b\u044f title_s.<\/p>\n<p>  \u0412\u0441\u0451 \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0433\u043e\u0434. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443, \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0435\u0451 \u0432\u0438\u0434\u043e\u043c \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a, \u0430 \u043d\u043e\u0432\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043b\u0435\u043d\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f pixel perfect \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043c\u0430\u043a\u0435\u0442\u0430\u043c\u0438: \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c \u0438\u0437 \u043c\u0430\u043a\u0435\u0442\u043e\u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043e\u043d\u0438 \u0442\u043e\u0447\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435. <\/p>\n<p>  \u041d\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u043a\u0430\u043a \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u0435 \u0441\u0442\u043e\u044f\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u043b\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0437\u0430\u0448\u0438\u0442\u044b\u0445 \u0441\u0442\u0438\u043b\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u0430, \u043f\u043e\u0442\u043e\u043c \u2014 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0441\u0442\u0438\u043b\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432, \u043d\u043e \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0441 \u043d\u0443\u043b\u044f \u0438 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443.<\/p>\n<h2>Div 2.0<\/h2>\n<p>  \u0420\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0439\u0442\u0438 \u043e\u0442 \u0438\u0434\u0435\u0438 \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u2014 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418 \u0437\u0430\u043e\u0434\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u0438\u0431\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0432 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0411\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0443 \u043d\u0430\u0441 \u0441\u0442\u0430\u043b\u0438 \u0442\u0435\u043a\u0441\u0442, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430, \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0441\u0435\u0442\u043a\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<blockquote><p>font_size: \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430.<\/p>\n<p>  font_family: \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u043e\u0432.<\/p>\n<p>  line_height: \u043c\u0435\u0436\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b (\u0438\u043d\u0442\u0435\u0440\u043b\u0438\u043d\u044c\u044f\u0436) \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430. \u041e\u0442\u0441\u0447\u0451\u0442 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u0448\u0440\u0438\u0444\u0442\u0430.<\/p>\n<p>  max_lines: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u044b \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<br \/>   min_hidden_lines: \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  auto_ellipsize: \u0432\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0435\u0437\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<p>  letter_spacing: \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438.<\/p>\n<p>  font_weight: \u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0435.<\/p>\n<p>  text_alignment_horizontal: \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>  text_alignment_vertical: \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>  text_color: \u0446\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430. <\/p>\n<p>  focused_text_color: \u0446\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p>  text_gradient: \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>  text: \u0441\u0430\u043c \u0442\u0435\u043a\u0441\u0442.<\/p>\n<p>  underline: \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  strike: \u0437\u0430\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  ranges: \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0438\u043b\u044f. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 <code>start<\/code> \u0438 <code>end<\/code>.<\/p>\n<p>  images: \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442.<\/p>\n<p>  ellipsis: \u043c\u0430\u0440\u043a\u0435\u0440 \u043e\u0431\u0440\u0435\u0437\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>  selectable: \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p><\/blockquote>\n<\/div><\/div>\n<p>  \u041f\u0435\u0440\u0435\u0435\u0437\u0434 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e. \u041d\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Div2, \u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u043c\u044b \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0438\u0441\u0442\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u0432\u0441\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0439\u0434\u044f \u043e\u0442 \u0441\u0442\u0430\u0440\u043e\u0439.<\/p>\n<p>  \u0412 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438 DivKit: \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u0438\u0448\u0451\u043b \u00ab\u0437\u043e\u043b\u043e\u0442\u043e\u0439 \u0432\u0435\u043a\u00bb \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u2014 \u0432\u0441\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u0433\u043e\u0434\u0430, \u0438 \u043e\u043d\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0432\u0435\u0437\u0434\u0435. <\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0433\u043e\u0434 \u043d\u0430\u043c \u0441\u0442\u0430\u043b\u043e \u0442\u0435\u0441\u043d\u043e \u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0444\u0438\u0447\u0430\u0445 \u0442\u043e\u0436\u0435, \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0443\u043c\u0435\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u043b\u0435\u043d\u0442\u0435. \u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441 \u043d\u0430\u0442\u0438\u0432\u0430 \u043d\u0430 \u0434\u0438\u0432\u044b \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0448\u0430\u043f\u043a\u0430, \u0443 \u043d\u0430\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043d\u0430 \u0441\u043c\u0435\u0448\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0411\u0435\u043d\u0434\u0435\u0440. \u041f\u0440\u043e\u0444\u0438\u043b\u044c, bottom sheet \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0442\u043e\u0436\u0435 \u0441\u0442\u0430\u043b\u0438 \u00ab\u0434\u0438\u0432\u043d\u044b\u043c\u0438\u00bb.<\/p>\n<p>  \u041d\u043e \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0445 \u0444\u0438\u0447. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b\u0430 \u0432\u043d\u043e\u0432\u044c, \u0438 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0435\u0439 \u0434\u0435\u043d\u044c.<\/p>\n<h2>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 DivKit<\/h2>\n<p>  <\/p>\n<h4>\u0415\u0434\u0430\u0434\u0438\u043b<\/h4>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0415\u0434\u0430\u0434\u0438\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043c\u0438\u043d\u0438-\u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0423 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430, \u043d\u043e \u0442\u0435 \u044d\u043a\u0440\u0430\u043d\u044b, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0431-\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439. \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u2014 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u0441\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u0432 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u043e\u0432\u0443\u044e \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u044b \u2014 \u0441\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0438 \u0435\u0434\u0438\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0430 \u043e\u0431\u0435\u0438\u0445 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445.<\/p>\n<p>  \u0422\u0430\u043a \u0437\u0430\u0440\u043e\u0434\u0438\u043b\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441 Mosaic. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c UI \u0434\u043b\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043e\u0439 (\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f Backend Driven UI) \u0441\u0442\u0430\u043b DivKit. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u043e\u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0432\u0435\u0440\u0441\u0442\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u0432 \u0431\u043b\u043e\u043a\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 WYSIWYG-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. Mosaic \u0443\u0436\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043e\u0434 \u0436\u0438\u0432\u0451\u0442 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/1d\/2h\/ni\/1d2hnip_jjaxmrpxq747fpwqnxs.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/1d\/2h\/ni\/1d2hnip_jjaxmrpxq747fpwqnxs.jpeg\" data-blurred=\"true\"\/><\/p>\n<h4>\u041c\u0430\u0440\u043a\u0435\u0442<\/h4>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u041c\u0430\u0440\u043a\u0435\u0442\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432: <\/p>\n<ul>\n<li>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u0440\u043e\u0433\u043e \u0438 \u043d\u0435\u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e.<\/li>\n<li>Flutter\/React Native. \u0414\u043e\u0440\u043e\u0433\u043e \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0435\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043b\u044e\u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. <\/li>\n<li>KMM \u2014 \u043d\u0435 \u0440\u0435\u0448\u0430\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0432\u0451\u0440\u0441\u0442\u043a\u043e\u0439, \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443. <\/li>\n<\/ul>\n<p>  \u0421\u0430\u043c\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043f\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f DivKit. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 proof of concept \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0437\u0430\u0439\u043c\u0451\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u043d\u0443\u043b\u044f, \u0431\u0435\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u043f\u043e\u043c\u043e\u0449\u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 DivKit, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u043c\u0430\u043a\u0435\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0437\u0430 \u0447\u0430\u0441. <\/p>\n<p>  \u0412 \u043f\u043b\u0430\u043d\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0433\u043b\u0430\u0434\u043a\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e:<\/p>\n<ul>\n<li>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Sample App \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. <\/li>\n<li>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0432\u044f\u0437\u043a\u0438 \u0434\u043b\u044f \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 DivKit.<\/li>\n<li>\u0418 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0443\u044e \u0432\u0451\u0440\u0441\u0442\u043a\u0443 \u0438 \u043d\u0430 iOS, \u0438 \u043d\u0430 Android.<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/6e\/6_\/b9\/6e6_b9ic68qsl_ezaacj8xli9lc.jpeg\" width=\"300\" data-src=\"https:\/\/habrastorage.org\/webt\/6e\/6_\/b9\/6e6_b9ic68qsl_ezaacj8xli9lc.jpeg\" data-blurred=\"true\"\/><\/p>\n<h4>\u042f\u043d\u0434\u0435\u043a\u0441 \u0422\u0412<\/h4>\n<p>  \u0423 \u042f\u043d\u0434\u0435\u043a\u0441 \u0422\u0412 \u043e\u0441\u043e\u0431\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u2014 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0440\u0435\u0436\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0430\u043f\u0434\u0435\u0439\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0438 \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u0430. Server Driven UI \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0441 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439, \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u0447\u0438, \u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0434\u043a\u043e. \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0434\u0438\u043d \u0438\u0437 \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0422\u0412 \u0441\u043e\u0437\u0434\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e DivKit.<\/p>\n<h2>\u041a \u0434\u0435\u043b\u0443!<\/h2>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 Android \u0438 iOS. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a \u043b\u0435\u043d\u0442\u044b \u0425\u0430\u0431\u0440\u0430.<\/p>\n<p>  \u0414\u043b\u044f DivKit \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0412 Android \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">fun createDivConfiguration(): DivConfiguration {     return DivConfiguration.Builder(DefaultDivImageLoader(imageManager))         .actionHandler(DemoDivActionHandler())         .supportHyphenation(true)         .typefaceProvider(YandexSansTypefaceProvider(this))         .visualErrorsEnabled(true)         .build() }<\/code><\/pre>\n<p>  \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a. \u042f \u0432\u043e\u0437\u044c\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u0432\u0430\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: Glide, Picasso \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. <\/p>\n<p>  <code>.supportHyphenation(true)<\/code> \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u044e \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u043f\u043e \u0441\u043b\u043e\u0433\u0430\u043c. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043f\u043e \u0441\u043b\u043e\u0433\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0430\u0434\u043a\u0438 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u044f\u0432\u043d\u043e.<\/p>\n<p>  <code>.typefaceProvider(YandexSansTypefaceProvider(this))<\/code> \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0448\u0440\u0438\u0444\u0442. Yandex Sans \u0438\u0434\u0451\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c, \u043d\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435.<\/p>\n<p>  <code>.visualErrorsEnabled(true)<\/code> \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u044e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u044f\u043c\u043e \u0432 \u043c\u043e\u0435\u0439 \u0432\u044c\u044e\u0445\u0435. \u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u0431\u0430\u0433: \u0435\u0441\u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0431\u0443\u0434\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 div-\u0432\u0451\u0440\u0441\u0442\u043a\u0435, \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u0443\u043d\u0442\u0435\u0440 \u0441 \u043d\u0438\u043c\u0438 \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443. \u042d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u0412 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d-\u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c.<\/p>\n<p>  \u041a\u043e\u0434 \u0434\u043b\u044f iOS \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"swift\">components = DivKitComponents(   updateCardAction: nil,   urlOpener: urlOpener )<\/code><\/pre>\n<p>  <code>DivKitComponents<\/code> \u2014 \u00ab\u0444\u0430\u0441\u0430\u0434\u00bb \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 DivKit.<\/p>\n<p>  <code>updateCardAction<\/code> \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 DivKit \u0445\u043e\u0447\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u044c\u044e\u0445\u0443.<br \/>  <code>urlOpener<\/code> \u2014 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a URL-\u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<p>  \u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0434\u0438\u0432\u0430\u0445. \u041f\u0440\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u0432\u0451\u0440\u0441\u0442\u043a\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0443\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. \u041a\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043f\u043e\u043b\u044f <code>\"text\"<\/code>, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0434\u0438\u0432\u0430, \u0442\u043e \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f. \u0412 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 <code>\"items\"<\/code>. \u042d\u0442\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043d\u0430\u0448\u0435\u0439 json-schema.<\/p>\n<p>  \u0420\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u043c JSON. \u041f\u043e\u043a\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0437\u0430\u0448\u0438\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 DivKit&#8217;\u0443 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432\u0451\u0440\u0441\u0442\u043a\u0430.<\/p>\n<p>  Android:<\/p>\n<pre><code class=\"kotlin\">val divJson = assetReader.read(DIVJSON_PATH) val templateJson = divJson.optJSONObject(\"templates\") val cardJson = divJson.getJSONObject(\"card\")<\/code><\/pre>\n<p>  iOS:<\/p>\n<pre><code class=\"swift\">private func loadCard() throws -> DeserializationResult&lt;DivData>? {   let url = Bundle.main.url(forResource: \"div_json\", withExtension: \"json\")!   let data = try Data(contentsOf: url)   let divJson = try DivJson(JSONData: data)   return divJson.cards.first.flatMap {     DivData.resolve(       card: $0,       templates: divJson.templates     )   } }<\/code><\/pre>\n<p>  <code>DivJson<\/code> \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>  <code>DivData.resolve()<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<p>  \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>divJson.optJSONObject(\"templates\")<\/code>? \u0412\u0451\u0440\u0441\u0442\u043a\u0430 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0451\u043c\u0430. \u0423 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0442\u0438\u043f \u0434\u0438\u0432\u0430, \u0438\u043b\u0438 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u043e\u043b\u044f, \u0442\u043e \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 $ \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u043b\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <code>\"$text\": \"card_title\"<\/code>, \u0433\u0434\u0435 <code>\"card_title\"<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0412\u043e\u0442 \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043b\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0425\u0430\u0431\u0440\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"json\">\"templates\": {     \"habr_card\": {         \"type\": \"container\",         \"background\": [             {                 \"type\": \"solid\",                 \"color\": \"#FFF\"             }         ],         \"paddings\": {             \"left\": 16,             \"top\": 16,             \"right\": 16,             \"bottom\": 16         },         \"margins\": {             \"bottom\": 8         },         \"items\": [             {                 \"type\": \"container\",                 \"orientation\": \"horizontal\",                 \"items\": [                     {                         \"type\": \"user_avatar\",                         \"$image_url\": \"avatar\"                     },                     {                         \"type\": \"user_name\",                         \"$text\": \"username\"                     },                     {                         \"type\": \"time\",                         \"$text\": \"time\"                     }                 ],                 \"margins\": {                     \"bottom\": 8                 }             },             {                 \"type\": \"title\",                 \"$text\": \"title\"             },             {                 \"type\": \"container\",                 \"orientation\": \"horizontal\",                 \"items\": [                     {                         \"type\": \"footer_icon\",                         \"image_url\": \"https:\/\/yastatic.net\/s3\/home\/yandex-app\/div_demo\/diamond.png\"                     },                     {                         \"type\": \"footer_text\",                         \"text_color\": \"#7AA600\",                         \"$text\": \"votes\"                     },                     {                         \"type\": \"footer_space\"                     },                     {                         \"type\": \"footer_icon\",                         \"image_url\": \"https:\/\/yastatic.net\/s3\/home\/yandex-app\/div_demo\/eye.png\"                     },                     {                         \"type\": \"footer_text\",                         \"$text\": \"views\"                     },                     {                         \"type\": \"footer_space\"                     },                     {                         \"type\": \"footer_icon\",                         \"image_url\": \"https:\/\/yastatic.net\/s3\/home\/yandex-app\/div_demo\/flag.png\"                     },                     {                         \"type\": \"footer_text\",                         \"$text\": \"favorites\"                     },                     {                         \"type\": \"footer_space\"                     },                     {                         \"type\": \"footer_icon\",                         \"image_url\": \"https:\/\/yastatic.net\/s3\/home\/yandex-app\/div_demo\/bubble.png\"                     },                     {                         \"type\": \"footer_text\",                         \"$text\": \"comments\"                     }                 ]             }         ],         \"orientation\": \"vertical\"     },     \"user_name\": {         \"type\": \"text\",         \"font_size\": 13,         \"text_color\": \"#414b50\",         \"font_weight\": \"medium\",         \"width\": {             \"type\": \"wrap_content\"         },         \"alignment_vertical\": \"center\",         \"margins\": {             \"right\": 5         }     },     \"user_avatar\": {         \"type\": \"image\",         \"width\": {             \"type\": \"fixed\",             \"value\": 24         },         \"height\": {             \"type\": \"fixed\",             \"value\": 24         },         \"border\": {             \"corner_radius\": 3         },         \"margins\": {             \"right\": 5         }     },     \"time\": {         \"type\": \"text\",         \"font_size\": 13,         \"text_color\": \"#777\",         \"width\": {             \"type\": \"wrap_content\"         },         \"alignment_vertical\": \"center\",         \"margins\": {             \"right\": 5         }     },     \"title\": {         \"type\": \"text\",         \"font_size\": 20,         \"text_color\": \"#333\",         \"line_height\": 23,         \"font_weight\": \"medium\",         \"margins\": {             \"bottom\": 20         }     },     \"footer_icon\": {         \"type\": \"image\",         \"scale_type\": \"fit\",         \"width\": {             \"type\": \"fixed\",             \"value\": 24         },         \"height\": {             \"type\": \"fixed\",             \"value\": 24         },         \"border\": {             \"corner_radius\": 3         },         \"paddings\": {             \"top\": 4,             \"bottom\": 4,             \"left\": 4,             \"right\": 4         }     },     \"footer_text\": {         \"type\": \"text\",         \"font_size\": 13,         \"text_color\": \"#BDCDD6\",         \"font_weight\": \"medium\",         \"width\": {             \"type\": \"wrap_content\"         },         \"margins\": {             \"left\": 4         },         \"alignment_vertical\": \"center\"     },     \"footer_space\": {         \"type\": \"separator\",         \"width\": {             \"type\": \"match_parent\",             \"weight\": 1         },         \"delimiter_style\": {             \"color\": \"#0000\"         }     } }<\/code><\/pre>\n<\/div><\/div>\n<p>  \u041f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d:<\/p>\n<pre><code class=\"json\">\"card\": {     \"log_id\": \"div2_sample_card\",     \"states\": [         {             \"state_id\": 0,             \"div\": {                 \"type\": \"container\",                 \"background\": [                     {                         \"type\": \"solid\",                         \"color\": \"#F0F0F0\"                     }                 ],                 \"items\": [                     {                         \"type\": \"habr_card\",                         \"avatar\": \"https:\/\/habrastorage.org\/r\/w32\/getpro\/habr\/avatars\/133\/48f\/f00\/13348ff00887755177016af1d4ea450e.png\",                         \"username\": \"Barseadr\",                         \"time\": \"\u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0432 11:48\",                         \"title\": \"\u0412\u0441\u0442\u0440\u0435\u0447\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 1-on-1: \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0430 \u0441\u043b\u0430\u0436\u0435\u043d\u043d\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\",                         \"votes\": \"+4\",                         \"comments\": \"10\",                         \"views\": \"200\",                         \"favorites\": \"2\"                     }                 ]             }         }     ] }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u044b\u0439 \u043e\u0431\u044a\u0451\u043c. \u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0451\u0440\u0441\u0442\u043a\u0443, \u0432\u044b\u0434\u0435\u043b\u0438\u0432 \u0432\u0441\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b. \u0412\u043e\u0442 \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0430\u043c\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/rm\/e9\/9s\/rme99s-n7pdw2dkjub5hwmjyakw.jpeg\" width=\"500\" data-src=\"https:\/\/habrastorage.org\/webt\/rm\/e9\/9s\/rme99s-n7pdw2dkjub5hwmjyakw.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u044c\u044e\u0448\u0435\u043a. Android:<\/p>\n<pre><code class=\"kotlin\">internal class DivViewFactory(     private val context: Div2Context,     private val templatesJson: JSONObject? = null ) {      private val environment = DivParsingEnvironment(ParsingErrorLogger.ASSERT).apply {         if (templatesJson != null) parseTemplates(templatesJson)     }      fun createView(cardJson: JSONObject): Div2View {         val divData = DivData(environment, cardJson)         return Div2View(context).apply {             setData(divData, DivDataTag(divData.logId))         }     } }<\/code><\/pre>\n<p>  <code>DivParsingEnvironment<\/code> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0441\u043f\u0430\u0440\u0448\u0435\u043d\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a. \u041c\u0435\u0442\u043e\u0434\u043e\u043c <code>createView<\/code> \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c view \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f <code>DivContext<\/code> \u2014 \u043e\u043d \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443 \u0432 Android \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u0435\u0445 \u0436\u0435 \u0446\u0435\u043b\u0435\u0439. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u044c\u044e\u0445\u0430\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442:<\/p>\n<pre><code class=\"kotlin\">val divContext = Div2Context(baseContext = this, configuration = createDivConfiguration())<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e view: <code>setData(divData, DivDataTag(divData.logId)<\/code>. DivData \u2014 \u044d\u0442\u043e DTO-\u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<p>  iOS:<\/p>\n<pre><code class=\"swift\">func setCard(_ card: DivData) throws {   let context = components.makeContext(     cardId: DivCardID(rawValue: card.logId),     cachedImageHolders: []   )   let block = try card.makeBlock(context: context)   let view = block.reuse(     state?.view,     observer: nil,     overscrollDelegate: nil,     renderingDelegate: nil,     superview: self   )   state = State(block: block, view: view) }<\/code><\/pre>\n<p>  <code>components.makeContext()<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u043c\u043e\u0440\u0433\u0430\u043b\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p>  <code>block.reuse()<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u0443\u044e \u0432\u044c\u044e\u0445\u0443 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e.<\/p>\n<p>  \u041a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/divkit\/divkit\/tree\/main\/client\/android\/sample\">\u043d\u0430 \u0413\u0438\u0442\u0445\u0430\u0431\u0435<\/a>, \u0442\u0430\u043c \u043e\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e: \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043d\u0435 \u043e\u0434\u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430, \u0430 \u043b\u0435\u043d\u0442\u0430 \u043d\u0430 DivKit, \u0438 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/divkit\/divkit\/tree\/main\/client\/ios\/Sample\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f iOS.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e DivKit \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0446\u0432\u0435\u0442\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wz\/an\/kg\/wzankg5nivtefcobsbbqfbgvcna.gif\" data-src=\"https:\/\/habrastorage.org\/webt\/wz\/an\/kg\/wzankg5nivtefcobsbbqfbgvcna.gif\"\/><\/p>\n<h2>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/h2>\n<p>  \u0412\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442 \u0441\u0432\u043e\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 DivKit, \u0438 \u043c\u044b \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043f\u043e\u0434 \u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043f\u043b\u0430\u043d\u0430\u0445:<\/p>\n<ul>\n<li>\u041d\u043e\u0432\u044b\u0439 layout \u0441 \u00ab\u043a\u043e\u043d\u0441\u0442\u0440\u0435\u0439\u0442\u0430\u043c\u0438\u00bb<\/li>\n<li>Flutter<\/li>\n<li>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 DivKit<\/li>\n<\/ul>\n<p>  DivKit \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f Server Driven UI \u0443\u0434\u043e\u0431\u043d\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u0434\u0438\u0432\u044b \u043e\u0434\u0438\u043d \u044d\u043a\u0440\u0430\u043d \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c \u2014 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443, \u043a\u043d\u043e\u043f\u043a\u0443 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d: DivKit \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0448\u0438\u0442\u044c \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0430\u043f\u0434\u0435\u0439\u0442\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0435\u0441\u0442\u044c <a href=\"https:\/\/divkit.tech\/ru\/playground\">\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430<\/a>. \u041a \u043d\u0435\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0432\u0435\u0431-\u0434\u0432\u0438\u0436\u043e\u043a DivKit, \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u0437 Google Play \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0435 <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.yandex.divkit.demo\">\u0434\u0435\u043c\u043e\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a> (\u0432 App Store \u043e\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435). \u0414\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u0436\u0438\u0432\u0443\u044e: \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u0434\u0435\u043c\u043e\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0432\u0435\u0431-\u0441\u043e\u043a\u0435\u0442\u0430\u043c. \u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0435\u0441\u0442\u044c <a href=\"https:\/\/divkit.tech\">\u043d\u0430 \u0441\u0430\u0439\u0442\u0435<\/a>, \u0435\u0441\u043b\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u2014 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0438\u043b\u0438 <a href=\"https:\/\/t.me\/divkit_community_ru\">\u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u0447\u0430\u0442\u0435<\/a>.<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/683886\/\"> https:\/\/habr.com\/ru\/company\/yandex\/blog\/683886\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u042f\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 DivKit \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0432\u0451\u0440\u0441\u0442\u043a\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443: \u043d\u0430\u043b\u0430\u0434\u0438\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0430\u043f\u0434\u0435\u0439\u0442\u043e\u0432 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0437\u043d\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/mm\/kl\/j1\/mmklj1vpqovhgbqrwt6isktevfo.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/mm\/kl\/j1\/mmklj1vpqovhgbqrwt6isktevfo.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a: \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0434\u043b\u044f Android, iOS \u0438 \u0432\u0435\u0431\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 <abbr title=\"Domain-specific language\">DSL<\/abbr> \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 Kotlin, TypeScript \u0438 Python. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d <a href=\"https:\/\/github.com\/divkit\/divkit\">\u043d\u0430 \u0413\u0438\u0442\u0445\u0430\u0431\u0435<\/a> \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Apache 2.0. <\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 DivKit \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u042f\u043d\u0434\u0435\u043a\u0441, \u0410\u043b\u0438\u0441\u0435, \u0415\u0434\u0430\u0434\u0438\u043b\u0435, \u041c\u0430\u0440\u043a\u0435\u0442\u0435, \u0422\u0412 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a \u043b\u0435\u043d\u0442\u044b \u0425\u0430\u0431\u0440\u0430, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-337541","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=337541"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337541\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=337541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=337541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=337541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}