{"id":378425,"date":"2024-06-09T15:10:59","date_gmt":"2024-06-09T15:10:59","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=378425"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-09T15:10:59","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=378425","title":{"rendered":"<span>\u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432 Bitrix \u043d\u0430 D7<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u044f \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0441\u0430\u043c\u044b\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043d\u043e\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430 D7. \u0412 \u0446\u0435\u043b\u043e\u043c \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438 \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e &#8212; \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c (\u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c).<\/p>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043c\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435, \u043d\u043e \u044f \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0438\u043c \u0434\u043e\u0432\u043e\u043b\u0435\u043d.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0432\u0441\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u043a\u0430\u043a \u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \/ \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435. \u0410 \u0437\u0430\u0442\u0435\u043c \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0441 \u0442\u0435\u043c \u0447\u0442\u043e \u043c\u043e\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0442\u044f\u0436\u0435\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432\u0435\u0434\u044c \u043e\u043d \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0430 JS \/ <s>GayQuery<\/s> JQuery \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0432\u0441\u0435\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c BX, \u0432 \u0446\u0435\u043b\u043e\u043c \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u043b \u0432 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435, \u043d\u043e \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0440\u044f\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0435 \u043d\u0430 20 &#8212; 50% \u0430 \u043d\u0430 \u0432\u0441\u0435 200%. \u0412\u044b\u0436\u0438\u043c\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0442\u043e \u043a\u0440\u0443\u0442\u044b\u0435 \u0448\u0442\u0443\u043a\u0438.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c Bitrix \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430 \u0441\u0430\u043c\u0430 \u0431\u0430\u0437\u0430 \u044f\u0434\u0440\u0430 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 (\u043a\u0430\u043a \u0438 \u0441\u0430\u043c PHP), \u043d\u043e \u0438\u0441\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u043c. \u0414\u0430\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u0440\u0443\u0442\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 Bitrix. \u041d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u0442, \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b (\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0431\u0435\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043a\u0430\u043a \u0431\u043e\u043d\u0443\u0441 \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432 \u044f\u0434\u0440\u0435)<\/p>\n<p>\u0418 \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<blockquote>\n<p>\u041d\u0443 \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u044e\u0442 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0435 \u043f\u0438\u0448\u0438\u0442\u0435 \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443, \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432 \u0442\u0435\u0445. \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0442\u044c, \u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u0443\u044e \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432 \u044f\u0434\u0440\u043e \u0447\u0442\u043e \u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0434\u0435 \u043a\u043e\u0441\u044f\u043a, \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0433-\u0440\u0435\u043f\u043e\u0440\u0442<\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0446\u0438\u0442\u0430\u0442\u0430 \u043d\u0430 17:25<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/664a3449ee339fd48b0cf10b\" data-style=\"\" id=\"664a3449ee339fd48b0cf10b\" width=\"\"><\/div>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u043d\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043a\u0430\u043a \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430. \u041d\u0443 \u0432 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0420\u0435\u0431\u044f\u0442\u0430 \u0434\u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 Bitrix \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0440\u0430\u0441\u0442\u0435\u0442.<\/p>\n<p>P.S. \u0434\u0430 \u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043a\u043e\u043f\u0430\u043b\u0441\u044f \u0434\u043e \u0432\u0438\u0434\u0435\u043e 2018 \u0433\u043e\u0434\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c YouTube \u043a\u0430\u043d\u0430\u043b\u0435 \u0411\u0438\u0442\u0440\u0438\u043a\u044124!!!<\/p>\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/yt3.googleusercontent.com\/Pviiw7oAGwBdEiRgXM52BxoGOPkuu_vRCkXCaLLrm0yybiXAChTuVprpDMaY0oyHBgY7Ea1tKtw=s900-c-k-c0x00ffffff-no-rj&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>\u0411\u0438\u0442\u0440\u0438\u043a\u044124. \u0414\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430<\/span><\/div>\n<p><a href=\"https:\/\/www.youtube.com\/channel\/UCCaFbhrkxpOvVbgewxfjoRg\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">www.youtube.com<\/a><\/div>\n<\/div>\n<p>\u041d\u0443 \u0438 \u0432\u043e\u0442 \u044f \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0438 \u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043d\u0438 \u043a\u043e\u043c\u0443 \u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0443\u0442, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043c\u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0437\u0430 300\u043a \u0432 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0443 (\u043d\u0435\u0442).<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f2c\/51a\/283\/f2c51a283efa555620ba590278ce5ac9.gif\" alt=\"\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u043b \u0441\u043e\u0432\u0435\u0442 \u0438 \u0434\u043e\u043f\u0438\u0441\u0430\u043b \u044f\u0434\u0440\u043e \u0438 \u043b\u0438\u0448\u0438\u043b\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u0442\u0435\u0445. \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0434\u0440\u0430\" title=\"\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u043b \u0441\u043e\u0432\u0435\u0442 \u0438 \u0434\u043e\u043f\u0438\u0441\u0430\u043b \u044f\u0434\u0440\u043e \u0438 \u043b\u0438\u0448\u0438\u043b\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u0442\u0435\u0445. \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0434\u0440\u0430\" width=\"220\" height=\"220\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f2c\/51a\/283\/f2c51a283efa555620ba590278ce5ac9.gif\"\/><\/p>\n<div><figcaption>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u043b \u0441\u043e\u0432\u0435\u0442 \u0438 \u0434\u043e\u043f\u0438\u0441\u0430\u043b \u044f\u0434\u0440\u043e \u0438 \u043b\u0438\u0448\u0438\u043b\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u0442\u0435\u0445. \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0434\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u0431\u0435\u0434\u043e\u043b\u0430\u0433\u0438 \u0444\u0440\u043e\u043d\u0442\u044b \u0441\u0438\u0434\u044f\u0442 \u0438 \u0434\u0443\u043c\u0430\u044e\u0442 \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0440\u043e\u043d\u0442 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u0434\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043c\u043e\u0434\u0443\u043b\u044f\u043c Bitrix, \u0438 \u043f\u043e \u0438\u0442\u043e\u0433\u0443 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a\u0443\u044e \u0442\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u0443\u044e API, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u043d\u0435\u0441\u043b\u0438 \u0444\u0440\u043e\u043d\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u0441\u0430\u043c Bitrix \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a backend \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u0432 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c. \u041d\u043e \u0443\u0432\u044b \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043b\u0438\u0448\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0435\u0449\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0435\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438 \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u0438 SPA \u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435:<\/p>\n<div class=\"embed_link embed_layout-right\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7d5\/831\/149\/7d58311491e2b175f2094652e3431cec.jpg&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>Frontend \u0432\u043d\u0443\u0442\u0440\u0438 Bitrix. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 + SPA \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Vue \u0438\u043b\u0438 React<\/span><\/div>\n<div class=\"embed__caption-description\">\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a Frontend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432 Bitrix. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 &#8230;<\/div>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/810581\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">habr.com<\/a><\/div>\n<\/div>\n<\/div>\n<\/details>\n<p>\u0412 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0445 \u0438 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u0442\u0435\u043c\u0443 <strong><em>Bitrix<\/em><\/strong> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 <strong>\u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b,<\/strong> <strong>\u0430 \u0443\u0432\u0438\u0434\u0435\u043b \u043b\u0438\u0448\u044c <em>\u0447\u0430\u0441\u0442\u0438\u0447\u043a\u0438<\/em><\/strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u0442\u043e \u0442\u043e \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b \u0438 \u0441\u0430\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442, \u043d\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u044d\u0442\u043e \u044f \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044f \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 :D, \u043d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u043d\u0435 \u043a\u0438\u0434\u0430\u0439\u0442\u0435 \u0432 \u043c\u0435\u043d\u044f \u043f\u0430\u043b\u043a\u0438, \u044f \u043d\u0435 \u0437\u043d\u0430\u043b.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0447\u0442\u043e \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<h2>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h2>\n<ol>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/introduction.php https:\/\/dev.1c-bitrix.ru\/api_d7\/bitrix\/ui\/index.php\" data-title=\"&lt;p>&lt;a href=&quot;https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/introduction.php&quot;>https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/introduction.php&lt;\/a>&lt;\/p>&lt;p>&lt;\/p>&lt;p>&lt;a href=&quot;https:\/\/dev.1c-bitrix.ru\/api_d7\/bitrix\/ui\/index.php&quot;>https:\/\/dev.1c-bitrix.ru\/api_d7\/bitrix\/ui\/index.php&lt;\/a>&lt;\/p>&#187; data-abbr=&#187;JS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Bitrix&#187;>JS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Bitrix<\/abbr><\/em><\/strong> \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"CSS \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 ( CSS preprocessor) - \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e CSS \u043a\u043e\u0434 . \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0441\u0442\u043e\u0433\u043e CSS, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u043a: \u043f\u0440\u0438\u043c\u0435\u0441\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0440. \u042d\u0442\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 CSS: \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443.\" data-title=\"&lt;p>CSS \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (&lt;strong>CSS preprocessor&lt;\/strong>) &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e CSS&lt;br> \u043a\u043e\u0434 . \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442&lt;br> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0441\u0442\u043e\u0433\u043e CSS, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u043a: \u043f\u0440\u0438\u043c\u0435\u0441\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435&lt;br> \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0440. \u042d\u0442\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 CSS: \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. &lt;\/p>&lt;p>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/678\/0e9\/b9d\/6780e9b9def990cac1551d99e03d1750.png&#187; data-abbr=&#187; &#187; data-image-width=&#187;640&#8243; data-image-height=&#187;480&#8243;>\u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 SCSS \/ SASS<\/abbr> <\/em><\/strong>\u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f CSS.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0411\u0438\u0442\u0440\u0438\u043a\u0441-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441: \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0421\u0430\u0439\u0442\u043e\u043c \u0438 \u0411\u0438\u0442\u0440\u0438\u043a\u044124.\" data-title=\"&lt;p>\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442&lt;br> \u0411\u0438\u0442\u0440\u0438\u043a\u0441-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c&lt;br> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 &lt;em>1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441: \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0421\u0430\u0439\u0442\u043e\u043c&lt;\/em> \u0438 &lt;em>\u0411\u0438\u0442\u0440\u0438\u043a\u044124&lt;\/em>.&lt;\/p>&lt;p>&lt;\/p>&#187; data-abbr=&#187;Bitrix CLI&#187;>Bitrix CLI<\/abbr><\/em><\/strong> \u0434\u043b\u044f <strong><em><abbr class=\"habraabbr\" title=\"\u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u0438\u043b\u0438 \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0441\u0431\u043e\u0440\u043a\u0443, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 (\u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b) \u2013 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041e\u043d\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 JavaScript, \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.\" data-title=\"&lt;p>\u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u0438\u043b\u0438 \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0441\u0431\u043e\u0440\u043a\u0443, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 (\u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b) \u2013 \u044d\u0442\u043e &lt;strong>\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435&lt;\/strong>. \u041e\u043d\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 JavaScript, \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.&lt;\/p>&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u0441\u0431\u043e\u0440\u043a\u0438 \u0432 bundle&#187;>\u0441\u0431\u043e\u0440\u043a\u0438 JS \u0432 bundle<\/abbr><\/em><\/strong> , <strong><em><abbr class=\"habraabbr\" title=\"\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0301\u0446\u0438\u044f ( \u0430\u043d\u0433\u043b. minification) \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0443\u0442\u0451\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, JavaScript), \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b (\u043a\u0430\u0441\u0430\u0435\u043c\u043e \u0441\u0430\u0439\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432).\" data-title=\"&lt;p>&lt;strong>\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0301\u0446\u0438\u044f&lt;\/strong> (&lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA&quot;>\u0430\u043d\u0433\u043b.&lt;\/a>&amp;nbsp;&lt;em>minification&lt;\/em>) \u0432 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&quot;>\u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&lt;\/a>&amp;nbsp;\u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4&quot;>\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430&lt;\/a> \u043f\u0443\u0442\u0451\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&quot;>\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445&lt;\/a> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/JavaScript&quot;>JavaScript&lt;\/a>), \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b (\u043a\u0430\u0441\u0430\u0435\u043c\u043e \u0441\u0430\u0439\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&quot;>\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f&lt;\/a> &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&quot;>\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432&lt;\/a>). &lt;\/p>&lt;p>&lt;\/p>&#187;>\u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/abbr><\/em><\/strong> JS \u0438 SCSS \u0432 CSS.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"\u0410\u0432\u0442\u043e\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435\u0440, Stylelint, babel-preset-env \u0438 cssnext \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Browserslist, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.\" data-title=\"&lt;p>\u0410\u0432\u0442\u043e\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435\u0440, Stylelint, babel-preset-env \u0438 cssnext \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Browserslist, &lt;strong>\u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.&lt;\/strong>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d9d\/9d2\/513\/d9d9d251329b2e334763050a94b349ac.png&#187; data-abbr=&#187;browserslist&#187; data-image-width=&#187;225&#8243; data-image-height=&#187;225&#8243;>browserslist<\/abbr><\/em><\/strong> \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>(\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u0414\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 <strong><em><abbr class=\"habraabbr\" title=\"\u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 HTML-\u043a\u043e\u0434\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 HTML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0433\u043e\u0432.\" data-title=\"&lt;p>\u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438&lt;br> \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 HTML-\u043a\u043e\u0434\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418\u043d\u044b\u043c\u0438&lt;br> \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 HTML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0433\u043e\u0432.&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/011\/fe8\/1c8\/011fe81c8006c5f524250bc6f25340df.png&#187; data-abbr=&#187;DOM&#187; data-image-width=&#187;680&#8243; data-image-height=&#187;340&#8243;>DOM<\/abbr><\/em><\/strong> \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong><em><abbr class=\"habraabbr\" title=\"\u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 DOM. \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e-\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0441\u0435\u0431\u0435 \u043a\u0430\u043a \u0432\u0435\u0434\u0440\u043e. \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e.\" data-title=\"&lt;p>\u044d\u0442\u043e &lt;strong>\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 DOM&lt;\/strong>.&lt;br> \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e-\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0441\u0435\u0431\u0435 \u043a\u0430\u043a \u0432\u0435\u0434\u0440\u043e.&lt;br> \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u043c&lt;br> \u0432\u044b\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e.&lt;\/p>&#187; data-abbr=&#187;DocumentFragment&#187;>DocumentFragment<\/abbr> <\/em><\/strong>\u0438\u043b\u0438 <a href=\"https:\/\/learn.javascript.ru\/template-tag\" rel=\"noopener noreferrer nofollow\"><strong><em>template<\/em><\/strong><\/a> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438<strong><em> DocumentFragment<\/em><\/strong>. <\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"Unit-\u0442\u0435\u0441\u0442 - \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\" data-title=\"&lt;p>Unit-\u0442\u0435\u0441\u0442 &#8212; \u044d\u0442\u043e &lt;strong>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b&lt;\/strong>.&lt;br> \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c&lt;br> \u0432\u0430\u0436\u043d\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c&lt;br> \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.&lt;\/p>&lt;p>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a0\/18c\/035\/4a018c035d66bb6bd8ab995deb866914.jpeg&#187; data-image-width=&#187;238&#8243; data-image-height=&#187;147&#8243;>unit \u0442\u0435\u0441\u0442\u043e\u0432<\/abbr><\/em><\/strong> \u0434\u043b\u044f <a href=\"https:\/\/dev.1c-bitrix.ru\/learning\/course\/index.php?COURSE_ID=43&amp;LESSON_ID=11981\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/a>.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f<\/h2>\n<ol>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"\u041e\u0431\u044a\u0435\u0301\u043a\u0442\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u043b\u0438 \u0441\u0442\u0438\u043b\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432\/\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 \u043a\u0430\u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\" data-title=\"&lt;p>&lt;strong>\u041e\u0431\u044a\u0435\u0301\u043a\u0442\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 &lt;\/strong>&lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&quot;>&lt;strong>\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u0438\u0435&lt;\/strong>&lt;\/a> &amp;nbsp;\u2014 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&quot;>\u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u043b\u0438 \u0441\u0442\u0438\u043b\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&lt;\/a>&lt;br> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432\/\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u0438\u0445&lt;br> \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 \u043a\u0430\u043a&lt;br> \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BB%D0%B0%D1%81%D1%81_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)&quot;>\u043a\u043b\u0430\u0441\u0441\u043e\u0432&lt;\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F&quot;>\u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e&lt;\/a> &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)&quot;>\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f&lt;\/a>&lt;\/p>&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u041e\u041e\u041f&#187;>\u041e\u041e\u041f<\/abbr><\/em><\/strong> \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c, \u0434\u043b\u044f \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u043c <strong><em><abbr class=\"habraabbr\" title=\"Asynchronous Javascript and XML \u2014 \u00ab\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 JavaScript \u0438 XML\u00bb \u2014 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u00ab\u0444\u043e\u043d\u043e\u0432\u043e\u043c\u00bb \u043e\u0431\u043c\u0435\u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0438 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435.\" data-title=\"&lt;p>&lt;em>Asynchronous Javascript and XML&lt;\/em>&amp;nbsp;\u2014 \u00ab\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/JavaScript&quot;>JavaScript&lt;\/a> \u0438 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/XML&quot;>XML&lt;\/a>\u00bb \u2014 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81&quot;>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432&lt;\/a> &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%92%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5&quot;>\u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439&lt;\/a>, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u00ab\u0444\u043e\u043d\u043e\u0432\u043e\u043c\u00bb &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B1%D0%BC%D0%B5%D0%BD_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8&quot;>\u043e\u0431\u043c\u0435\u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438&lt;\/a> &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%92%D0%B5%D0%B1-%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80&quot;>\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430&lt;\/a> \u0441 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80&quot;>\u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c&lt;\/a>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%92%D0%B5%D0%B1-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&quot;>\u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430&lt;\/a> \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0438 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435.&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/368\/7f5\/17b\/3687f517b93d86c86328db874d86de36.png&#187; data-abbr=&#187;AJAX&#187; data-image-width=&#187;398&#8243; data-image-height=&#187;191&#8243;>AJAX<\/abbr><\/em><\/strong> \u0444\u0430\u0439\u043b \u0438\u043b\u0438 action \u0432 \u043a\u043b\u0430\u0441\u0441\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0432\u0435\u0440\u0441\u0442\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0442\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0418\u043b\u0438 \u0436\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0431\u0443\u0434\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043e\u0431\u043c\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0447\u0435\u0440\u0435\u0437 AJAX \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <strong><em><abbr class=\"habraabbr\" title=\"\u041e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u0430\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 JavaScript, \u0432\u043d\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\" data-title=\"&lt;p>\u041e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u0430\u044f&lt;br> \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438&lt;br> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445&lt;br> \u043d\u0430 JavaScript, \u0432\u043d\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/553\/728\/1cc\/5537281ccf1d7904b54b7e85a6871baf.png&#187; data-image-width=&#187;1200&#8243; data-image-height=&#187;734&#8243;>nodejs<\/abbr><\/em><\/strong> \u0438 <strong><em><abbr class=\"habraabbr\" title=\"(Node Package Manager) \u2013 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f JavaScript, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 Node.js. \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 npm \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439: CLI (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438) \u2013 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u043d\u043b\u0430\u0439\u043d \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 javascript \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438.\" data-title=\"&lt;p>(Node Package Manager) \u2013 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f JavaScript, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 Node.js. \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 npm \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:&lt;\/p>&lt;p>&lt;\/p>&lt;p>CLI (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438) \u2013 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432.&lt;\/p>&lt;p>&lt;\/p>&lt;p>\u041e\u043d\u043b\u0430\u0439\u043d \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 javascript \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438.&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/23e\/603\/7cf\/23e6037cf26f53d4daec81b10481af1a.png&#187; data-image-width=&#187;1200&#8243; data-image-height=&#187;467&#8243;>npm<\/abbr><\/em><\/strong> \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b <a href=\"https:\/\/www.npmjs.com\/package\/@bitrix\/cli\/v\/3.0.2\" rel=\"noopener noreferrer nofollow\">bitrix\/cli<\/a> \u0438 <a href=\"https:\/\/www.npmjs.com\/package\/node-sass\" rel=\"noopener noreferrer nofollow\">node-sass<\/a><\/p>\n<p>\u042f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e \u0438\u0445 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u043d\u043e \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043b\u0443\u0447\u0448\u0435 \u0447\u0442\u043e\u0431 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b <a href=\"https:\/\/docs.npmjs.com\/cli\/v10\/configuring-npm\/package-json\/\" rel=\"noopener noreferrer nofollow\">package.json<\/a> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 <code>npm install<\/code>  (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <a href=\"https:\/\/git-scm.com\/\" rel=\"noopener noreferrer nofollow\">Git<\/a>)<\/p>\n<pre><code class=\"bash\">npm install -g @bitrix\/cli node-sass<\/code><\/pre>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0444\u0438\u043b\u044c\u0442\u0440.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u0435\u0451 &#8212; \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7a8\/0f1\/8b8\/7a80f18b8aaff2163bf700f1392b6a45.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.\" width=\"231\" height=\"337\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a8\/0f1\/8b8\/7a80f18b8aaff2163bf700f1392b6a45.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439.<\/figcaption><\/div>\n<\/figure>\n<h3>\u041a\u043e\u0434 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/h3>\n<p>\u043c\u043e\u0434\u0443\u043b\u044c main.core &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 BX, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u043e\u0442\u0442\u0443\u0434\u0430. \u0418\u043b\u0438 \u0436\u0435 \u044f\u0434\u0440\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<h4>bundle.config.js<\/h4>\n<p>\u041d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"javascript\">module.exports = {   \/\/ \u0424\u0430\u0439\u043b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443. \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c input: '.\/src\/Notification.js',     \/\/ \u041f\u0443\u0442\u044c \u043a \u0431\u0430\u043d\u0434\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0431\u043e\u0440\u043a\u0438.  \/\/ \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e .\/dist\/&lt;extension_name>.bundle.js \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c  output: {       js: '.\/dist\/Notification.bundle.js',       css: '.\/dist\/Notification.bundle.css'     },     \/\/ \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b \u0438\u0437 \u0444\u0430\u0439\u043b\u0430,  \/\/ \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435.     namespace: 'BX',     \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e.     \/\/ \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e.     \/\/ \u041c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a Terser:     \/\/ false \u2014 \u043d\u0435 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)     \/\/ true \u2014 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e      \/\/ object \u2014 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438      minification: true,     \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Source Maps \u0444\u0430\u0439\u043b\u043e\u0432      sourceMap: false, };<\/code><\/pre>\n<h4>config.php<\/h4>\n<p>\u041d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u043c. \u0418 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u044f\u0434\u0440\u043e, \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0438\u0442\u044c<\/p>\n<pre><code class=\"php\">&lt;?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die(); }  return [   \/\/ \u041f\u0443\u0442\u044c \u043a `css` \u0444\u0430\u0439\u043b\u0443 \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0443\u0442\u0435\u0439  \/\/ \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c     \/\/ \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432. 'css' => '.\/dist\/Notification.bundle.css',     \/\/ \u041f\u0443\u0442\u044c \u043a `js` \u0444\u0430\u0439\u043b\u0443 \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0443\u0442\u0435\u0439  \/\/ \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c     \/\/ \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432. 'js' => '.\/dist\/Notification.bundle.js',   \/\/ \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c  \/\/ \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \/\/ \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430  'rel' => [ 'main.core', ],   \/\/ \u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c `main.core` \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \/\/ \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `false` \u2014 `main.core` \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f.  \/\/ \u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \/\/ \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 `main.core` 'skip_core' => false, ];<\/code><\/pre>\n<h4>Notification.js<\/h4>\n<pre><code class=\"javascript\">\/\/\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 SCSS \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f import \".\/Notification.scss\";  \/\/\u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 BX import {   append,   create,   findChildrenByClassName,   findParent,   insertBefore,   remove, } from \"main.core\";  \/\/\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 BX.Notification  export class Notification {   constructor(message, status) {     this.notificationsList =       this.getNotificationsList() || this.buildNotificationsList();     this.buildNotification(message, status);   }   getNotificationsList() {     return document.getElementById(\"notifications-list\");   }   buildNotificationsList() {     const fragment = create(\"ul\", {       attrs: {         id: \"notifications-list\",         className: \"notifications-list\",       },       children: [         create(\"button\", {           attrs: {             type: \"button\",             id: \"notifications-list__close-all\",           },           events: {             \/\/\u0412\u0435\u0448\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f             click: ({ target }) => {               const parent = findParent(target);               const notifications = findChildrenByClassName(                 parent,                 \"notification\"               );                notifications.forEach((notification) => remove(notification));             },           },           text: \"\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435\",         }),       ],     });     append(fragment, document.body);     return this.getNotificationsList();   }    buildNotification(message, status) {     const notification = create(\"li\", {       attrs: {         className: `notification ${status ? \"notification_\" + status : \"\"}`,       },       children: [         create(\"p\", {           attrs: {             className: \"notification__message\",           },           text: message,         }),         create(\"button\", {           attrs: {             type: \"button\",             className: \"notification__close\",           },           text: \"x\",           events: {             \/\/\u0412\u0435\u0448\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.             click: ({ target }) => remove(findParent(target)),           },         }),       ],     });     this.mountNotification(notification);   }   mountNotification(notification) {     insertBefore(       notification,       document.getElementById(\"notifications-list__close-all\")     );   } } <\/code><\/pre>\n<h4>Notification.scss<\/h4>\n<pre><code class=\"css\">@keyframes show-notification {   from {     left: 200px;     opacity: 0;   }    to {     opacity: 1;     left: 0;   } }  #notifications-list {   position: fixed;   bottom: 0;   right: 0;   padding: 25px;    &amp;:not(:has(.notification)) {     display: none;   }    button {     cursor: pointer;     transition: .3s;      &amp;:hover {       background-color: #4a4a7c !important;       color: white;     }   }    &amp;__close-all {     width: 100%;     background-color: #f3f3f3;     box-shadow: 0px 0px 25px 0px #00000035;     border-radius: 8px;     text-align: center;     border: none;     font-weight: 600;     padding: 8px;   }    .notification {     position: relative;     animation: show-notification .5s linear;     display: flex;     gap: 8px;     margin-bottom: 20px;     background-color: #f3f3f3;     padding: 12px;     align-items: center;     border-radius: 8px;     justify-content: space-between;     width: 250px;     box-sizing: border-box;     box-shadow: 0px 0px 25px 0px #00000035;     border-bottom-right-radius: 24px;      &amp;__close {       border-radius: 20px;       height: 30px;       aspect-ratio: 4\/4;       background-color: transparent;       border: none;       margin-top: auto;     }      &amp;__message {       margin: 0;       word-break: break-all;     }   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 local \u0438\u043b\u0438 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c.<\/p>\n<pre><code class=\"bash\">bitrix build<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 &#8212; <code>bitrix help<\/code><\/p>\n<p> \u0418 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 <a href=\"https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/runtime\/Runtime_loadExtension.php\" rel=\"noopener noreferrer nofollow\">\u043c\u044b \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <\/a>\u0447\u0435\u0440\u0435\u0437 <code>BX.Runtime.loadExtension('site.notification')<\/code> \u0438\u043b\u0438 \u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c.<\/p>\n<p>\u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 <a href=\"https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/kernel\/utilits\/bx_namespace.php\" rel=\"noopener noreferrer nofollow\">Namespace<\/a> \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 export \u043d\u0443\u0436\u043d\u044b\u0445 \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e namespace (BX.Notification)<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 Bitrix CLI, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c \u0447\u0442\u043e \u043d\u0430\u0448 \u043a\u043e\u0434 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d, \u0430 css \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 -webkit-, -ms- \u0438 \u0441\u043e\u0431\u0440\u0430\u043b SCSS \u0432 CSS.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/edd\/053\/fd1\/edd053fd1c572b67cbc1916e23a7d56a.gif\" alt=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\" title=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\" width=\"536\" height=\"206\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/edd\/053\/fd1\/edd053fd1c572b67cbc1916e23a7d56a.gif\"\/><\/p>\n<div><figcaption>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">!function(t,i){\"use strict\";var n=function(){function t(t,i){this.notificationsList=this.getNotificationsList()||this.buildNotificationsList(),this.buildNotification(t,i)}var n=t.prototype;return n.getNotificationsList=function(){return document.getElementById(\"notifications-list\")},n.buildNotificationsList=function(){var t=i.create(\"ul\",{attrs:{id:\"notifications-list\",className:\"notifications-list\"},children:[i.create(\"button\",{attrs:{type:\"button\",id:\"notifications-list__close-all\"},events:{click:function(t){var n=t.target,o=i.findParent(n);i.findChildrenByClassName(o,\"notification\").forEach((function(t){return i.remove(t)}))}},text:\"\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435\"})]});return i.append(t,document.body),this.getNotificationsList()},n.buildNotification=function(t,n){var o=i.create(\"li\",{attrs:{className:\"notification \"+(n?\"notification_\"+n:\"\")},children:[i.create(\"p\",{attrs:{className:\"notification__message\"},text:t}),i.create(\"button\",{attrs:{type:\"button\",className:\"notification__close\"},text:\"x\",events:{click:function(t){var n=t.target;return i.remove(i.findParent(n))}}})]});this.mountNotification(o)},n.mountNotification=function(t){i.insertBefore(t,document.getElementById(\"notifications-list__close-all\"))},t}();t.Notification=n}(this.BX=this.BX||{},BX); \/\/# sourceMappingURL=Notification.bundle.js.map <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u044e \u0447\u0435\u0440\u0435\u0437 Prettier<\/p>\n<pre><code class=\"javascript\">!(function (t, i) {   \"use strict\";   var n = (function () {     function t(t, i) {       (this.notificationsList =         this.getNotificationsList() || this.buildNotificationsList()),         this.buildNotification(t, i);     }     var n = t.prototype;     return (       (n.getNotificationsList = function () {         return document.getElementById(\"notifications-list\");       }),       (n.buildNotificationsList = function () {         var t = i.create(\"ul\", {           attrs: { id: \"notifications-list\", className: \"notifications-list\" },           children: [             i.create(\"button\", {               attrs: { type: \"button\", id: \"notifications-list__close-all\" },               events: {                 click: function (t) {                   var n = t.target,                     o = i.findParent(n);                   i.findChildrenByClassName(o, \"notification\").forEach(                     function (t) {                       return i.remove(t);                     }                   );                 },               },               text: \"\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435\",             }),           ],         });         return i.append(t, document.body), this.getNotificationsList();       }),       (n.buildNotification = function (t, n) {         var o = i.create(\"li\", {           attrs: {             className: \"notification \" + (n ? \"notification_\" + n : \"\"),           },           children: [             i.create(\"p\", {               attrs: { className: \"notification__message\" },               text: t,             }),             i.create(\"button\", {               attrs: { type: \"button\", className: \"notification__close\" },               text: \"x\",               events: {                 click: function (t) {                   var n = t.target;                   return i.remove(i.findParent(n));                 },               },             }),           ],         });         this.mountNotification(o);       }),       (n.mountNotification = function (t) {         i.insertBefore(           t,           document.getElementById(\"notifications-list__close-all\")         );       }),       t     );   })();   t.Notification = n; })((this.BX = this.BX || {}), BX); \/\/# sourceMappingURL=Notification.bundle.js.map<\/code><\/pre>\n<pre><code class=\"css\">@-webkit-keyframes show-notification {   from {     left: 200px;     opacity: 0; }   to {     opacity: 1;     left: 0; } }  @keyframes show-notification {   from {     left: 200px;     opacity: 0; }   to {     opacity: 1;     left: 0; } }  #notifications-list {   position: fixed;   bottom: 0;   right: 0;   padding: 25px; }   #notifications-list:not(:has(.notification)) {     display: none; }   #notifications-list button {     cursor: pointer;     -webkit-transition: .3s;     -o-transition: .3s;     transition: .3s; }     #notifications-list button:hover {       background-color: #4a4a7c !important;       color: white; }   #notifications-list__close-all {     width: 100%;     background-color: #f3f3f3;     -webkit-box-shadow: 0px 0px 25px 0px #00000035;             box-shadow: 0px 0px 25px 0px #00000035;     border-radius: 8px;     text-align: center;     border: none;     font-weight: 600;     padding: 8px; }   #notifications-list .notification {     position: relative;     -webkit-animation: show-notification .5s linear;             animation: show-notification .5s linear;     display: -webkit-box;     display: -ms-flexbox;     display: flex;     gap: 8px;     margin-bottom: 20px;     background-color: #f3f3f3;     padding: 12px;     -webkit-box-align: center;         -ms-flex-align: center;             align-items: center;     border-radius: 8px;     -webkit-box-pack: justify;         -ms-flex-pack: justify;             justify-content: space-between;     width: 250px;     -webkit-box-sizing: border-box;             box-sizing: border-box;     -webkit-box-shadow: 0px 0px 25px 0px #00000035;             box-shadow: 0px 0px 25px 0px #00000035;     border-bottom-right-radius: 24px; }     #notifications-list .notification__close {       border-radius: 20px;       height: 30px;       aspect-ratio: 4\/4;       background-color: transparent;       border: none;       margin-top: auto; }     #notifications-list .notification__message {       margin: 0;       word-break: break-all; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0430\u0448\u0435\u0433\u043e JS \u0444\u0430\u0439\u043b\u0430 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043d\u0430\u0448\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f. \u041d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043d\u043e \u0432\u043e\u0442 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u0435\u0441\u043b\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u044b\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d35\/990\/bf2\/d35990bf2dee3db66431fc1601b69a1b.png\" alt=\"\u041a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.\" title=\"\u041a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.\" width=\"1332\" height=\"104\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d35\/990\/bf2\/d35990bf2dee3db66431fc1601b69a1b.png\"\/><\/p>\n<div><figcaption>\u041a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0442\u043e \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043d\u0430\u0448\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c. (\u042f \u043f\u043e\u0434 \u0430\u0434\u043c\u0438\u043d\u043e\u043c).<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/790\/c5f\/e8e\/790c5fe8ea98f77381d8a236da35ea0a.png\" alt=\"\u0432\u043a\u043b\u0430\u0434\u043a\u0430 sources \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.\" title=\"\u0432\u043a\u043b\u0430\u0434\u043a\u0430 sources \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.\" width=\"495\" height=\"44\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/790\/c5f\/e8e\/790c5fe8ea98f77381d8a236da35ea0a.png\"\/><\/p>\n<div><figcaption>\u0432\u043a\u043b\u0430\u0434\u043a\u0430 sources \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 \u043a\u043e\u0440\u043d\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u0430\u043f\u043a\u0443 test \u0438 \u0444\u0430\u0439\u043b \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u0430\u043a \u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043e\u043c test.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ed7\/791\/42d\/ed779142d4c4adc6cd415f6add5ea8ee.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"376\" height=\"182\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed7\/791\/42d\/ed779142d4c4adc6cd415f6add5ea8ee.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432 \u043f\u0430\u043f\u043a\u0435 src \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c &#8212; \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u0443 \u0436\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 test.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a02\/96f\/7da\/a0296f7da590f057d7fa0f19d9a5e386.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440\" width=\"369\" height=\"269\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a02\/96f\/7da\/a0296f7da590f057d7fa0f19d9a5e386.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0432 Notification.test.js \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b. \u0418 \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0437\u0430\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442 scss \u0444\u0430\u0439\u043b\u0430 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fb2\/702\/b39\/fb2702b3976475b0abe4a940f1e8e876.png\" alt=\"Notification.js \u0432 \u043f\u0430\u043f\u043a\u0435 src\" title=\"Notification.js \u0432 \u043f\u0430\u043f\u043a\u0435 src\" width=\"581\" height=\"119\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fb2\/702\/b39\/fb2702b3976475b0abe4a940f1e8e876.png\"\/><\/p>\n<div><figcaption>Notification.js \u0432 \u043f\u0430\u043f\u043a\u0435 src<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"javascript\">\/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0442\u0438\u043f\u044b \u0438\u0437 \u044f\u0434\u0440\u0430 \u0438 \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f import { Notification } from \"myextensions.notification\"; import { type } from \"main.core\";  console.log(Notification); \/\/ \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0443\u0442 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u044b describe(\"Notification\", () => {   \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043a\u043d\u0446\u0438\u0438 \u044d\u0442\u043e Dom \u044d\u043b\u0435\u043c\u0435\u043d\u0442   it(\"return type DomNode?\", () => {     assert(type.isDomNode(new Notification()));   });   \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043a\u043d\u0446\u0438\u0438 \u044d\u0442\u043e undefined   it(\"return type undefined\", () => {     assert(type.isUndefined(new Notification()));   });   it(\"return type object\", () => {     assert(type.isObject(new Notification()));   }); });<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 bitrix test \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/668\/41a\/95b\/66841a95bb87f206940332e6673c441d.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432\" width=\"950\" height=\"710\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/668\/41a\/95b\/66841a95bb87f206940332e6673c441d.png\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u0441\u0435 \u0442\u0430\u043a \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u0435\u0434\u044c \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442. \u0421\u0438\u043b\u044c\u043d\u043e \u0432 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u044d\u0442\u043e \u043f\u0440\u044f\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0438\u0445\u0438\u044f.<\/p>\n<h2>\u041d\u0415 \u0420\u0415\u041a\u041e\u041c\u0415\u041d\u0414\u0423\u042e!!!<\/h2>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430:<\/p>\n<ul>\n<li>\n<p><code>bitrix build -w<\/code><\/p>\n<\/li>\n<li>\n<p><code>bitrix build -t<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043c\u044b \u0432\u0441\u0435 \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 Bitrix \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0435 \u0442\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e. \u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <strong>\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442<\/strong> <strong>\u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e \u0438 \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e: <\/strong>\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 <code>bitrix build -t<\/code> \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 <strong><em><abbr class=\"habraabbr\" title=\"\u044d\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c JS \u043a\u043e\u0434 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u0435\u0434\u0438\u043d\u043e.\" data-title=\"&lt;p>\u044d\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c JS \u043a\u043e\u0434 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u0435\u0434\u0438\u043d\u043e. &lt;\/p>&lt;p>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/536\/102\/8cf\/5361028cf308c139e088b6a91d104793.png&#187; data-abbr=&#187;bundle&#187; data-image-width=&#187;2598&#8243; data-image-height=&#187;1299&#8243;>bundle<\/abbr><\/em><\/strong> \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u044b. \u0410 <code>bitrix build -w<\/code> \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 CSS \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e. \u041f\u043e\u00a0\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0443\u0447\u043a\u0430\u043c\u0438, \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u0435\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u0440\u0430\u0441\u043a\u043e\u043c\u0438\u0442\u0438\u043c \u0438\u043c\u043f\u043e\u0440\u0442 scss \u0444\u0430\u0439\u043b\u0430. \u0418 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0421\u044e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u043e \u044f \u0435\u0451 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b. <strong>\u0415\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u043c\u043e\u0433\u0443 \u043f\u043e\u0442\u043e\u043c \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c<\/strong> \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e \u044d\u0442\u043e &#8212; \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0438 \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u0444\u0430\u0439\u043b \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c .browserslistrc.<\/p>\n<p>\u0410 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 bundle.config.js \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 browserslist.<\/p>\n<pre><code class=\"javascript\">module.exports = {   \/\/ \u0424\u0430\u0439\u043b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443.   \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c   input: \".\/src\/Notification.js\",   \/\/ \u041f\u0443\u0442\u044c \u043a \u0431\u0430\u043d\u0434\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0431\u043e\u0440\u043a\u0438.   \/\/ \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e .\/dist\/&lt;extension_name>.bundle.js   \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c   output: {     js: \".\/dist\/Notification.bundle.js\",     css: \".\/dist\/Notification.bundle.css\",   },   \/\/ \u041d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b \u0438\u0437 \u0444\u0430\u0439\u043b\u0430,   \/\/ \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435.   namespace: \"BX\",   \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e.   \/\/ \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e.   \/\/ \u041c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a Terser:   \/\/ false \u2014 \u043d\u0435 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)   \/\/ true \u2014 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e   \/\/ object \u2014 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438   minification: true,   \/\/\u0421\u0431\u043e\u0440\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441 \u0443\u0447\u0435\u0442\u043e\u043c .browserslistrc   browserslist: true,   \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Source Maps \u0444\u0430\u0439\u043b\u043e\u0432   sourceMap: false, };<\/code><\/pre>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1e1\/772\/1e6\/1e17721e68d0c7f16c3657d8e63ebe19.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"279\" height=\"201\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1e1\/772\/1e6\/1e17721e68d0c7f16c3657d8e63ebe19.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u0443\u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0434\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0432\u043f\u0435\u0440\u0432\u044b\u0435, \u0432\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 <a href=\"https:\/\/browsersl.ist\/\" rel=\"noopener noreferrer nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442<\/a> \u0432 \u043f\u043e\u0434\u0431\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443.<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c <strong>\u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441<\/strong> <strong>\u0440\u0430\u0437\u043d\u044b\u043c\u0438<\/strong> \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/p>\n<h2>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043c <strong><em><abbr class=\"habraabbr\" title=\"Highload-\u0431\u043b\u043e\u043a\u0438 - \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438, \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438, \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0411\u0414 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0447\u0435\u0440\u0435\u0437 HandlerSocket \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0451\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. Highload-\u0431\u043b\u043e\u043a\u0438 \u0445\u0440\u0430\u043d\u044f\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0441\u0432\u043e\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0432\u043e\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b. https:\/\/dev.1c-bitrix.ru\/learning\/course\/index.php?COURSE_ID=43&amp;CHAPTER_ID=05745\" data-title=\"&lt;p>Highload-\u0431\u043b\u043e\u043a\u0438 &#8212; \u044d\u0442\u043e &lt;strong>\u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438, \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438, \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0441\u0432\u043e\u0439\u0441\u0442\u0432&lt;\/strong>.&lt;br> \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0411\u0414 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0447\u0435\u0440\u0435\u0437 HandlerSocket \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441&lt;br> \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0451\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. Highload-\u0431\u043b\u043e\u043a\u0438 \u0445\u0440\u0430\u043d\u044f\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0441\u0432\u043e\u0438\u0445&lt;br> \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0432\u043e\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b.&lt;\/p>&lt;p>&lt;a href=&quot;https:\/\/dev.1c-bitrix.ru\/learning\/course\/index.php?COURSE_ID=43&amp;amp;CHAPTER_ID=05745&quot;>https:\/\/dev.1c-bitrix.ru\/learning\/course\/index.php?COURSE_ID=43&amp;amp;CHAPTER_ID=05745&lt;\/a>&lt;\/p>&lt;p>&lt;\/p>&#187;>highloadblock<\/abbr><\/em><\/strong>, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0447\u0435\u043c\u0443 \u0445\u0430\u0439\u043b\u043e\u0430\u0434<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0443 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0438\u043d\u0444\u043e\u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u0438 \u043d\u043e\u0432\u043e\u043c \u044f\u0434\u0440\u0435. + \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e highload \u0431\u043b\u043e\u043a\u0438 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0435, \u0445\u043e\u0442\u044f \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438\u0445 API.<\/p>\n<p>\u041d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u043d\u0444\u043e\u0431\u043b\u043e\u043a\u0438 \u0432\u0430\u043c \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442.<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e87\/2db\/2bc\/e872db2bcea6e7ecadc78527a891f390.png\" alt=\"\u041f\u043e\u043b\u044f \u0445\u0430\u0439\u043b\u043e\u0430\u0434\u0431\u043b\u043e\u043a\u0430 \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.\" title=\"\u041f\u043e\u043b\u044f \u0445\u0430\u0439\u043b\u043e\u0430\u0434\u0431\u043b\u043e\u043a\u0430 \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.\" width=\"2105\" height=\"241\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e87\/2db\/2bc\/e872db2bcea6e7ecadc78527a891f390.png\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043b\u044f \u0445\u0430\u0439\u043b\u043e\u0430\u0434\u0431\u043b\u043e\u043a\u0430 \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0418 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0442\u0443\u0434\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u0432\u043e\u0435\u0433\u043e \u0445\u0430\u0439\u043b\u043e\u0430\u0434 \u0431\u043b\u043e\u043a\u0430.<\/p>\n<pre><code class=\"php\">&lt;?php $APPLICATION->IncludeComponent(     \"test:todolist\", \".default\", [         'HIGHLOAD_BLOCK' => 'TodoList',         'ADDED_TASK_NOTIFICATION_TEXT' => '\u0417\u0430\u0434\u0430\u0447\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430',     ],     false );<\/code><\/pre>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/61a\/150\/d52\/61a150d52aa876d9b375a8ed7e0f1166.PNG\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\" width=\"272\" height=\"330\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>class.php<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php  \/**  * \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u043b\u043e\u0433  *\/ if (!defined(\"B_PROLOG_INCLUDED\") || B_PROLOG_INCLUDED !== true) {     die(); }  \/**   * \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439  *\/ use Bitrix\\Main\\Loader,     Bitrix\\Main\\Entity,     Bitrix\\Main\\Web\\Json,     Bitrix\\Main\\UI\\Extension,     Bitrix\\Highloadblock\\HighloadBlockTable,     Bitrix\\Main\\Engine\\Contract\\Controllerable;  \/* \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 *\/ Extension::load('myextensions.notification');  \/** * \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0445\u0430\u0439\u043b\u043e\u0430\u0434 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 *\/ Loader::includeModule(\"highloadblock\");  \/** \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u041e\u041e\u041f \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0442 CBitrixComponent   * \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Controllerable  * \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 AJAX \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043e\u0442 JS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Bitrix  *\/ class TodoList extends CBitrixComponent implements Controllerable {     \/**      * \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0447\u0442\u0435\u043d\u044b \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u044d\u043a\u0448\u0435\u043d\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430       * \u0447\u0435\u0440\u0435\u0437 AJAX \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e action      * \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c signedParameters \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b BX.ajax.runComponentAction;      * @return array      *\/ public function listKeysSignedParameters() : array { return [             'HIGHLOAD_BLOCK',             'ADDED_TASK_NOTIFICATION_TEXT' ]; }     \/** \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u043a\u0448\u0435\u043d\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 AJAX \u044f\u0434\u0440\u0430      * @return array     *\/     public function configureActions() : array     {         \/**\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0443 \u043d\u0430\u0448\u0438\u0445 \u044d\u043a\u0448\u0435\u043d\u043e\u0432 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 *\/         return [             'getFilteredTasks' => [                 '-prefilters' => [                     ActionFilter\\Authentication::class,                 ],             ],             'addTask' => [                 '-prefilters' => [                     ActionFilter\\Authentication::class,                 ],             ],          ];     }     \/**\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 *\/     public function executeComponent() : void     {         $this->getArResult();         $this->includeComponentTemplate();     }     \/** \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ArResult *\/     protected function getArResult(): void     {         \/*\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c todo \u0437\u0430\u0434\u0430\u0447\u0438 *\/         $arResult['TASKS'] = $this->getTasks();          \/**\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0432 JS          * \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0438\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u044d\u043a\u0448\u0435\u043d\u0443 \u0447\u0435\u0440\u0435\u0437 AJAX,          * \u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0431\u044b\u043b\u0438 arParams, \u0438 \u043e\u043d \u043c\u043e\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443*\/         $arResult['SIGNED_PARAMETERS'] = Json::encode($this->getSignedParameters());          $this->arResult = $arResult;     }      \/** \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 todo \u0437\u0430\u0434\u0430\u0447 \u043f\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0443, \u0435\u0441\u043b\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e      * @return array      *\/     protected function getTasks(array $filter = []): array     {         return HighloadBlockTable::compileEntity($this->arParams['HIGHLOAD_BLOCK'])->getDataClass()::getList([             'select' => ['*'],             'order' => ['ID' => 'ASC'],             'filter' => $filter,         ])->fetchAll();     }           \/**\u0424\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e\u0441\u0442 *\/     protected function filterPost(): void     {         \/**\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0438\u0437 \u043f\u043e\u0441\u0442\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b,           * \u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u0448\u0430\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 POST \u0432 filter *\/         unset($_POST['signedParameters']);                  $_POST = array_filter($_POST, fn($value) => !empty(trim($value)));     }          \/**\u042d\u043a\u0448\u0435\u043d \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 *\/     public function getFilteredTasksAction(): array     {         $this->filterPost();         return $this->getTasks($_POST);     }     \/**\u042d\u043a\u0448\u0435\u043d \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0443 \u0437\u0430\u0434\u0430\u043d\u0438\u044f *\/     public function changeTaskStatusAction(int $taskId, string $taskCompleted): void     {         \/**\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 *\/         HighloadBlockTable::compileEntity($this->arParams['HIGHLOAD_BLOCK'])->getDataClass()             ::update($taskId, ['UF_COMPLETED' => ($taskCompleted === \"true\")]);     }     \/**\u042d\u043a\u0448\u0435\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0443 *\/     public function addTaskAction(): string     {         $this->filterPost();          $addedTask = HighloadBlockTable::compileEntity($this->arParams['HIGHLOAD_BLOCK'])->getDataClass()::add($_POST);          return $this->arParams['ADDED_TASK_NOTIFICATION_TEXT'];     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>template.php<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;section id=\"todo\" class=\"todo\">     &lt;h2>TodoList&lt;\/h2>     &lt;form class=\"todo__filter form\" id=\"todo__filter\">         &lt;div class=\"form__field\">             &lt;label for=\"\">\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443&lt;\/label>             &lt;input type=\"text\" name=\"%UF_TEXT\">         &lt;\/div>         &lt;div class=\"form__buttons\">             &lt;button class=\"form__button\" type=\"submit\">\u041d\u0430\u0439\u0442\u0438&lt;\/button>         &lt;\/div>     &lt;\/form>     &lt;ul class=\"todo__list\" id=\"todo__list\">         &lt;?foreach ($arResult['TASKS'] as $key => $task):?>         &lt;li class=\"todo__item\">             &lt;label>                 &lt;input type=\"checkbox\" &lt;?=$task['UF_COMPLETED'] ? 'checked' : '' ?> data-id=\"&lt;?=$task['ID']?>\" \/>                 &lt;?=$task['UF_TEXT']?>             &lt;\/label>         &lt;\/li>         &lt;?endforeach?>     &lt;\/ul>     &lt;form id=\"todo__add-form\" class=\"form\">         &lt;div class=\"form__field\">             &lt;label for=\"\">\u041d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430&lt;\/label>             &lt;textarea name=\"UF_TEXT\">&lt;\/textarea>         &lt;\/div>         &lt;div class=\"form__buttons\">             &lt;button class=\"form__button\" type=\"submit\">\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c&lt;\/button>             &lt;button class=\"form__button\" type=\"reset\">\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c&lt;\/button>         &lt;\/div>     &lt;\/form> &lt;\/section>   &lt;script> \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c SIGNED_PARAMETERS \u0432 JS \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u043a\u0442 BX.message BX.message({     signedParameters: &lt;?=$arResult['SIGNED_PARAMETERS']?> }) \/\/\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u043d\u0438\u0446\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0443\u0442. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u0447\u0435\u043c\u0443. new BX.TodoList() &lt;\/script><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\/src\/TodoList.js<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">import \".\/TodoList.scss\";  import {   PreventDefault,   ajax,   append,   bind,   cleanNode,   create,   createFragment,   data,   findChildren,   fireEvent,   message, } from \"main.core\";  \/**\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430\u0448 \u044d\u043a\u0441\u0442\u0435\u043d\u0448\u0435\u043d \u0441 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 *\/ import { Notification } from \"myextensions.notification\";  \/**\u0422\u0430\u043a \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 *\/ export class TodoList {   constructor() {     \/**      * Function provides access to language messages.      * If the param parameter is a string, the language message with the identifier param will be returned.      * Otherwise, the parameter is interpreted as an object of the form {identifier: message, identifier: message}      * language messages are added to the current ones (overwriting existing ones).cd      *      * @param {string|Object} param - The identifier or an object of language messages.      * @returns {string} - The language message with the given identifier.      * @example &lt;caption>      *      * BX.message({test: 123}) \/\/returns undefined      *      * BX.message('test') \/\/returns 123      * &lt;\/caption>      *\/     this.signedParameters = message(\"signedParameters\");      this.todoList = document.getElementById(\"todo__list\");     this.filter = document.getElementById(\"todo__filter\");     this.addForm = document.getElementById(\"todo__add-form\");     \/**\u0412\u044b\u043d\u043e\u0441\u0438\u043c \u043d\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0432\u0435\u043d\u0442\u043e\u0432 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442.\u043a. \u043d\u0430\u0448\u0438 todo \u0437\u0430\u0434\u0430\u0447\u0438, \u0431\u0443\u0434\u0443\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 *\/     this.initTaskEvent();      \/**      * Binds an event handler to an element or a collection of elements.      * @param {Node} el - The element to bind the event handler to.      * @param {String} event - The name of the event to bind the handler to.      * @param {Function} handler - The function to execute when the event is triggered.      *\/     bind(this.filter, \"submit\", (e) => this.submitFilter(e, this));     bind(this.addForm, \"submit\", (e) => this.submitAddForm(e, this));   }   \/**\u041d\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430 \u043d\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u0447\u0438. *\/   initTaskEvent() {     \/**      * Finds all direct child nodes of the specified DOMNode.      *      * @param {Node} node - The DOMNode to search for children.      * @param {Object} [params] - An optional object containing parameters to filter the child nodes.\",      * @param {string} [params.tagName] - The tag name of the desired child node.\",      * @param {string} [params.className] - The class name of the desired child node.\",      * @param {Object} [params.attrs] - An object containing attribute key-value pairs to filter the child nodes.\",      * @param {Object} [params.props] - An object containing property key-value pairs to filter the child nodes.\",      * @param {boolean} [recursive=false] - If true, also search for children of the children.      * @returns {array&lt;Node>} - An array of all direct child nodes.      *\/     \/**\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 *\/     const tasks = findChildren(this.todoList, { tagName: \"input\" }, true);      tasks.forEach((task) => {       const taskId = data(task, \"id\");       \/**\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0433\u0434\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043c\u0435\u043d\u044f\u043b data-id, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e \u043d\u0430 \u0431\u044d\u043a\u044d\u043d\u0434 \u0441\u0442\u0430\u0440\u043e\u0435 *\/       bind(task, \"change\", (e) =>         this.changeTaskStatus(taskId, e.target.checked, this)       );     });   }   \/**\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0444\u043e\u0440\u043c\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043d\u0430 \u0431\u044d\u043a\u044d\u043d\u0434 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0443 *\/   async submitFilter(e, classContext) {     \/**      * Prevents the default action of an event from occurring.      * @param {Event} e - The event object.      *\/     PreventDefault(e);     \/**      * This function makes an AJAX request to a component.      * @param {string} componentName - The name of the component. Example: 'mysitetemplate:mycomponent      * @param {string} action - The name of the function in ajax.php or class.php .      * @param {Object} [params] - The parameters for the request.      * @param {string} [params.mode] - The mode for the request. Can be either \"class\" or \"ajax\".      * @param {string} [params.method] - default POST      * @param {Object|FormData} [params.data] - The data for the request.      * @param {boolean} [params.json] - A flag indicating whether to send JSON data. In this case, when the request is sent, the Content-type header      * will be set to application\/json, and the controllers will be able to access the original JSON, which will make it easier to work with numbers and empty values.      * @param {Object} [params.navigation] - The navigation data for the request.      * @param {string|Object} [params.analyticsLabel] - The analytics label for the request. It is used as a marker for analytics to indicate popular content.      * @param {string} [params.signedParameters] - The signed parameters for the request.      * @returns {Promise} - A promise that resolves with the response from the server.      *\/     \/**\u0415\u0441\u043b\u0438 \u043d\u0430 \u0431\u044d\u043a\u044d\u043d\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 error \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0432 catch*\/     try {       const { data } = await ajax.runComponentAction(         \"test:todolist\",         \"getFilteredTasks\",         {           mode: \"class\",           data: new FormData(classContext.filter),           signedParameters: classContext.signedParameters,         }       );       \/**\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043c \u0438\u0445 *\/       const template = classContext.renderTasks(data);        \/**        * Cleans the specified node and its descendants.        * @param {Node} node - The node to clean.        * @param {boolean} [removeSelf=false] - Indicates whether to remove the node itself.        *\/       \/**\u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 *\/       cleanNode(classContext.todoList);       \/**        * Appends a node to the end of another node.        *        * @param {Node} node - The node to be appended.        * @param {Node} dstNode - The destination node where the node will be appended.        *\/       \/**\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 *\/       append(template.content, classContext.todoList);       \/**\u0417\u0430\u043d\u043e\u0432\u043e \u0438\u043d\u0438\u0446\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 *\/       classContext.initTaskEvent();     } catch ({ errors }) {       \/**\u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0435\u0441\u043b\u0438 \u0447\u0442\u043e \u0442\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c *\/       errors.forEach((error) => new Notification(error.message));     }   }   async submitAddForm(e, classContext) {     PreventDefault(e);     try {       const { data } = await ajax.runComponentAction(         \"test:todolist\",         \"addTask\",         {           mode: \"class\",           data: new FormData(classContext.addForm),           signedParameters: classContext.signedParameters,         }       );       new Notification(data);     } catch ({ errors }) {       errors.forEach((error) => new Notification(error.message));     }   }   \/**\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0431\u044d\u043a\u044d\u043d\u0434 \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f *\/   async changeTaskStatus(taskId, taskCompleted, classContext) {     try {       await ajax.runComponentAction(\"test:todolist\", \"changeTaskStatus\", {         mode: \"class\",         data: {           taskId: taskId,           taskCompleted: taskCompleted,         },         signedParameters: classContext.signedParameters,       });     } catch ({ errors }) {       errors.forEach((error) => new Notification(error.message));     }   }   \/**\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 template \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 *\/   renderTasks(tasks) {     const html = tasks       .map((task) => {         return \/*html*\/ `         &lt;li class=\"todo__item\">           &lt;label>             &lt;input               type=\"checkbox\"               ${Number(task[\"UF_COMPLETED\"]) &amp;&amp; \"checked\"}               data-id=\"${task[\"ID\"]}\"             \/>             ${task[\"UF_TEXT\"]}           &lt;\/label>         &lt;\/li>       `;       })       .join(\" \");     return create(\"template\", { html: html });   } } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\/src\/TodoList.scss<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"css\">$shadow: 0px 0px 5px 0px #00000040;  #todo {   padding: 100px;   max-width: 900px;   box-sizing: border-box;   width: 100%;   margin: auto;    .form {     $filter-color: #f7f7f7;      border-radius: 12px;     border: 1px solid $filter-color;     background-color: $filter-color;     padding: 12px;      &amp;__field {       margin-bottom: 12px;       display: flex;       gap: 4px;       flex-direction: column;     }      &amp;__button {       outline: none;       border: none;       background-color: #f7f7f7;       border-radius: 6px;       padding: 6px 12px;       cursor: pointer;       transition: background-color .2s ease-in-out;       box-shadow: $shadow;        &amp;[type=\"submit\"] {         background-color: #b6b6ff;          &amp;:hover {           background-color: #9a9af1;         }       }        &amp;:hover {         background-color: #e6e6e6;       }     }   }      .todo {     &amp;__list {       padding: 0;       list-style: none;       margin: 0;       height: 500px;       overflow: auto;     }      &amp;__item {       margin-bottom: 6px;       padding: 6px;        cursor: pointer;     }   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>bundle.config.js<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">module.exports = {   input: \".\/src\/TodoList.js\",    output: {     js: \".\/script.js\",     css: \".\/style.css\",   },   namespace: \"BX\",   minification: true,   treeshake: false, }; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>config.php<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die(); }  return [ 'css' => 'script.css', 'js' => 'script.js', 'rel' => [ 'main.core', 'myextensions.notification', ], 'skip_core' => false, ]; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>script.js<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">!(function (t, e, r) {   \"use strict\";   function n() {     \/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https:\/\/github.com\/facebook\/regenerator\/blob\/main\/LICENSE *\/ n =       function () {         return t;       };     var t = {},       e = Object.prototype,       r = e.hasOwnProperty,       o =         Object.defineProperty ||         function (t, e, r) {           t[e] = r.value;         },       a = \"function\" == typeof Symbol ? Symbol : {},       i = a.iterator || \"@@iterator\",       c = a.asyncIterator || \"@@asyncIterator\",       s = a.toStringTag || \"@@toStringTag\";     function u(t, e, r) {       return (         Object.defineProperty(t, e, {           value: r,           enumerable: !0,           configurable: !0,           writable: !0,         }),         t[e]       );     }     try {       u({}, \"\");     } catch (t) {       u = function (t, e, r) {         return (t[e] = r);       };     }     function l(t, e, r, n) {       var a = e &amp;&amp; e.prototype instanceof d ? e : d,         i = Object.create(a.prototype),         c = new T(n || []);       return o(i, \"_invoke\", { value: k(t, r, c) }), i;     }     function f(t, e, r) {       try {         return { type: \"normal\", arg: t.call(e, r) };       } catch (t) {         return { type: \"throw\", arg: t };       }     }     t.wrap = l;     var h = {};     function d() {}     function p() {}     function v() {}     var m = {};     u(m, i, function () {       return this;     });     var y = Object.getPrototypeOf,       g = y &amp;&amp; y(y(P([])));     g &amp;&amp; g !== e &amp;&amp; r.call(g, i) &amp;&amp; (m = g);     var w = (v.prototype = d.prototype = Object.create(m));     function b(t) {       [\"next\", \"throw\", \"return\"].forEach(function (e) {         u(t, e, function (t) {           return this._invoke(e, t);         });       });     }     function x(t, e) {       var n;       o(this, \"_invoke\", {         value: function (o, a) {           function i() {             return new e(function (n, i) {               !(function n(o, a, i, c) {                 var s = f(t[o], t, a);                 if (\"throw\" !== s.type) {                   var u = s.arg,                     l = u.value;                   return l &amp;&amp;                     \"object\" == babelHelpers.typeof(l) &amp;&amp;                     r.call(l, \"__await\")                     ? e.resolve(l.__await).then(                         function (t) {                           n(\"next\", t, i, c);                         },                         function (t) {                           n(\"throw\", t, i, c);                         }                       )                     : e.resolve(l).then(                         function (t) {                           (u.value = t), i(u);                         },                         function (t) {                           return n(\"throw\", t, i, c);                         }                       );                 }                 c(s.arg);               })(o, a, n, i);             });           }           return (n = n ? n.then(i, i) : i());         },       });     }     function k(t, e, r) {       var n = \"suspendedStart\";       return function (o, a) {         if (\"executing\" === n) throw new Error(\"Generator is already running\");         if (\"completed\" === n) {           if (\"throw\" === o) throw a;           return j();         }         for (r.method = o, r.arg = a; ; ) {           var i = r.delegate;           if (i) {             var c = E(i, r);             if (c) {               if (c === h) continue;               return c;             }           }           if (\"next\" === r.method) r.sent = r._sent = r.arg;           else if (\"throw\" === r.method) {             if (\"suspendedStart\" === n) throw ((n = \"completed\"), r.arg);             r.dispatchException(r.arg);           } else \"return\" === r.method &amp;&amp; r.abrupt(\"return\", r.arg);           n = \"executing\";           var s = f(t, e, r);           if (\"normal\" === s.type) {             if (((n = r.done ? \"completed\" : \"suspendedYield\"), s.arg === h))               continue;             return { value: s.arg, done: r.done };           }           \"throw\" === s.type &amp;&amp;             ((n = \"completed\"), (r.method = \"throw\"), (r.arg = s.arg));         }       };     }     function E(t, e) {       var r = e.method,         n = t.iterator[r];       if (void 0 === n)         return (           (e.delegate = null),           (\"throw\" === r &amp;&amp;             t.iterator.return &amp;&amp;             ((e.method = \"return\"),             (e.arg = void 0),             E(t, e),             \"throw\" === e.method)) ||             (\"return\" !== r &amp;&amp;               ((e.method = \"throw\"),               (e.arg = new TypeError(                 \"The iterator does not provide a '\" + r + \"' method\"               )))),           h         );       var o = f(n, t.iterator, e.arg);       if (\"throw\" === o.type)         return (e.method = \"throw\"), (e.arg = o.arg), (e.delegate = null), h;       var a = o.arg;       return a         ? a.done           ? ((e[t.resultName] = a.value),             (e.next = t.nextLoc),             \"return\" !== e.method &amp;&amp; ((e.method = \"next\"), (e.arg = void 0)),             (e.delegate = null),             h)           : a         : ((e.method = \"throw\"),           (e.arg = new TypeError(\"iterator result is not an object\")),           (e.delegate = null),           h);     }     function L(t) {       var e = { tryLoc: t[0] };       1 in t &amp;&amp; (e.catchLoc = t[1]),         2 in t &amp;&amp; ((e.finallyLoc = t[2]), (e.afterLoc = t[3])),         this.tryEntries.push(e);     }     function _(t) {       var e = t.completion || {};       (e.type = \"normal\"), delete e.arg, (t.completion = e);     }     function T(t) {       (this.tryEntries = [{ tryLoc: \"root\" }]),         t.forEach(L, this),         this.reset(!0);     }     function P(t) {       if (t) {         var e = t[i];         if (e) return e.call(t);         if (\"function\" == typeof t.next) return t;         if (!isNaN(t.length)) {           var n = -1,             o = function e() {               for (; ++n &lt; t.length; )                 if (r.call(t, n)) return (e.value = t[n]), (e.done = !1), e;               return (e.value = void 0), (e.done = !0), e;             };           return (o.next = o);         }       }       return { next: j };     }     function j() {       return { value: void 0, done: !0 };     }     return (       (p.prototype = v),       o(w, \"constructor\", { value: v, configurable: !0 }),       o(v, \"constructor\", { value: p, configurable: !0 }),       (p.displayName = u(v, s, \"GeneratorFunction\")),       (t.isGeneratorFunction = function (t) {         var e = \"function\" == typeof t &amp;&amp; t.constructor;         return (           !!e &amp;&amp; (e === p || \"GeneratorFunction\" === (e.displayName || e.name))         );       }),       (t.mark = function (t) {         return (           Object.setPrototypeOf             ? Object.setPrototypeOf(t, v)             : ((t.__proto__ = v), u(t, s, \"GeneratorFunction\")),           (t.prototype = Object.create(w)),           t         );       }),       (t.awrap = function (t) {         return { __await: t };       }),       b(x.prototype),       u(x.prototype, c, function () {         return this;       }),       (t.AsyncIterator = x),       (t.async = function (e, r, n, o, a) {         void 0 === a &amp;&amp; (a = Promise);         var i = new x(l(e, r, n, o), a);         return t.isGeneratorFunction(r)           ? i           : i.next().then(function (t) {               return t.done ? t.value : i.next();             });       }),       b(w),       u(w, s, \"Generator\"),       u(w, i, function () {         return this;       }),       u(w, \"toString\", function () {         return \"[object Generator]\";       }),       (t.keys = function (t) {         var e = Object(t),           r = [];         for (var n in e) r.push(n);         return (           r.reverse(),           function t() {             for (; r.length; ) {               var n = r.pop();               if (n in e) return (t.value = n), (t.done = !1), t;             }             return (t.done = !0), t;           }         );       }),       (t.values = P),       (T.prototype = {         constructor: T,         reset: function (t) {           if (             ((this.prev = 0),             (this.next = 0),             (this.sent = this._sent = void 0),             (this.done = !1),             (this.delegate = null),             (this.method = \"next\"),             (this.arg = void 0),             this.tryEntries.forEach(_),             !t)           )             for (var e in this)               \"t\" === e.charAt(0) &amp;&amp;                 r.call(this, e) &amp;&amp;                 !isNaN(+e.slice(1)) &amp;&amp;                 (this[e] = void 0);         },         stop: function () {           this.done = !0;           var t = this.tryEntries[0].completion;           if (\"throw\" === t.type) throw t.arg;           return this.rval;         },         dispatchException: function (t) {           if (this.done) throw t;           var e = this;           function n(r, n) {             return (               (i.type = \"throw\"),               (i.arg = t),               (e.next = r),               n &amp;&amp; ((e.method = \"next\"), (e.arg = void 0)),               !!n             );           }           for (var o = this.tryEntries.length - 1; o >= 0; --o) {             var a = this.tryEntries[o],               i = a.completion;             if (\"root\" === a.tryLoc) return n(\"end\");             if (a.tryLoc &lt;= this.prev) {               var c = r.call(a, \"catchLoc\"),                 s = r.call(a, \"finallyLoc\");               if (c &amp;&amp; s) {                 if (this.prev &lt; a.catchLoc) return n(a.catchLoc, !0);                 if (this.prev &lt; a.finallyLoc) return n(a.finallyLoc);               } else if (c) {                 if (this.prev &lt; a.catchLoc) return n(a.catchLoc, !0);               } else {                 if (!s)                   throw new Error(\"try statement without catch or finally\");                 if (this.prev &lt; a.finallyLoc) return n(a.finallyLoc);               }             }           }         },         abrupt: function (t, e) {           for (var n = this.tryEntries.length - 1; n >= 0; --n) {             var o = this.tryEntries[n];             if (               o.tryLoc &lt;= this.prev &amp;&amp;               r.call(o, \"finallyLoc\") &amp;&amp;               this.prev &lt; o.finallyLoc             ) {               var a = o;               break;             }           }           a &amp;&amp;             (\"break\" === t || \"continue\" === t) &amp;&amp;             a.tryLoc &lt;= e &amp;&amp;             e &lt;= a.finallyLoc &amp;&amp;             (a = null);           var i = a ? a.completion : {};           return (             (i.type = t),             (i.arg = e),             a               ? ((this.method = \"next\"), (this.next = a.finallyLoc), h)               : this.complete(i)           );         },         complete: function (t, e) {           if (\"throw\" === t.type) throw t.arg;           return (             \"break\" === t.type || \"continue\" === t.type               ? (this.next = t.arg)               : \"return\" === t.type               ? ((this.rval = this.arg = t.arg),                 (this.method = \"return\"),                 (this.next = \"end\"))               : \"normal\" === t.type &amp;&amp; e &amp;&amp; (this.next = e),             h           );         },         finish: function (t) {           for (var e = this.tryEntries.length - 1; e >= 0; --e) {             var r = this.tryEntries[e];             if (r.finallyLoc === t)               return this.complete(r.completion, r.afterLoc), _(r), h;           }         },         catch: function (t) {           for (var e = this.tryEntries.length - 1; e >= 0; --e) {             var r = this.tryEntries[e];             if (r.tryLoc === t) {               var n = r.completion;               if (\"throw\" === n.type) {                 var o = n.arg;                 _(r);               }               return o;             }           }           throw new Error(\"illegal catch attempt\");         },         delegateYield: function (t, e, r) {           return (             (this.delegate = { iterator: P(t), resultName: e, nextLoc: r }),             \"next\" === this.method &amp;&amp; (this.arg = void 0),             h           );         },       }),       t     );   }   var o = (function () {     function t() {       var r = this;       babelHelpers.classCallCheck(this, t),         (this.signedParameters = e.message(\"signedParameters\")),         (this.todoList = document.getElementById(\"todo__list\")),         (this.filter = document.getElementById(\"todo__filter\")),         (this.addForm = document.getElementById(\"todo__add-form\")),         this.initTaskEvent(),         e.bind(this.filter, \"submit\", function (t) {           return r.submitFilter(t, r);         }),         e.bind(this.addForm, \"submit\", function (t) {           return r.submitAddForm(t, r);         });     }     var o, a, i;     return (       babelHelpers.createClass(t, [         {           key: \"initTaskEvent\",           value: function () {             var t = this;             e.findChildren(this.todoList, { tagName: \"input\" }, !0).forEach(               function (r) {                 var n = e.data(r, \"id\");                 e.bind(r, \"change\", function (e) {                   return t.changeTaskStatus(n, e.target.checked, t);                 });               }             );           },         },         {           key: \"submitFilter\",           value:             ((i = babelHelpers.asyncToGenerator(               n().mark(function t(o, a) {                 var i, c, s;                 return n().wrap(                   function (t) {                     for (;;)                       switch ((t.prev = t.next)) {                         case 0:                           return (                             e.PreventDefault(o),                             (t.prev = 1),                             (t.next = 4),                             e.ajax.runComponentAction(                               \"test:todolist\",                               \"getFilteredTasks\",                               {                                 mode: \"class\",                                 data: new FormData(a.filter),                                 signedParameters: a.signedParameters,                               }                             )                           );                         case 4:                           (i = t.sent),                             (c = i.data),                             (s = a.renderTasks(c)),                             e.cleanNode(a.todoList),                             e.append(s.content, a.todoList),                             a.initTaskEvent(),                             (t.next = 16);                           break;                         case 12:                           (t.prev = 12),                             (t.t0 = t.catch(1)),                             t.t0.errors.forEach(function (t) {                               return new r.Notification(t.message);                             });                         case 16:                         case \"end\":                           return t.stop();                       }                   },                   t,                   null,                   [[1, 12]]                 );               })             )),             function (t, e) {               return i.apply(this, arguments);             }),         },         {           key: \"submitAddForm\",           value:             ((a = babelHelpers.asyncToGenerator(               n().mark(function t(o, a) {                 var i, c;                 return n().wrap(                   function (t) {                     for (;;)                       switch ((t.prev = t.next)) {                         case 0:                           return (                             e.PreventDefault(o),                             (t.prev = 1),                             (t.next = 4),                             e.ajax.runComponentAction(                               \"test:todolist\",                               \"addTask\",                               {                                 mode: \"class\",                                 data: new FormData(a.addForm),                                 signedParameters: a.signedParameters,                               }                             )                           );                         case 4:                           (i = t.sent),                             (c = i.data),                             new r.Notification(c),                             (t.next = 13);                           break;                         case 9:                           (t.prev = 9),                             (t.t0 = t.catch(1)),                             t.t0.errors.forEach(function (t) {                               return new r.Notification(t.message);                             });                         case 13:                         case \"end\":                           return t.stop();                       }                   },                   t,                   null,                   [[1, 9]]                 );               })             )),             function (t, e) {               return a.apply(this, arguments);             }),         },         {           key: \"changeTaskStatus\",           value:             ((o = babelHelpers.asyncToGenerator(               n().mark(function t(o, a, i) {                 return n().wrap(                   function (t) {                     for (;;)                       switch ((t.prev = t.next)) {                         case 0:                           return (                             (t.prev = 0),                             (t.next = 3),                             e.ajax.runComponentAction(                               \"test:todolist\",                               \"changeTaskStatus\",                               {                                 mode: \"class\",                                 data: { taskId: o, taskCompleted: a },                                 signedParameters: i.signedParameters,                               }                             )                           );                         case 3:                           t.next = 9;                           break;                         case 5:                           (t.prev = 5),                             (t.t0 = t.catch(0)),                             t.t0.errors.forEach(function (t) {                               return new r.Notification(t.message);                             });                         case 9:                         case \"end\":                           return t.stop();                       }                   },                   t,                   null,                   [[0, 5]]                 );               })             )),             function (t, e, r) {               return o.apply(this, arguments);             }),         },         {           key: \"renderTasks\",           value: function (t) {             var r = t               .map(function (t) {                 return '\\n        &lt;li class=\"todo__item\">\\n          &lt;label>\\n            &lt;input\\n              type=\"checkbox\"\\n              '                   .concat(                     Number(t.UF_COMPLETED) &amp;&amp; \"checked\",                     '\\n              data-id=\"'                   )                   .concat(t.ID, '\"\\n            \/>\\n            ')                   .concat(                     t.UF_TEXT,                     \"\\n          &lt;\/label>\\n        &lt;\/li>\\n      \"                   );               })               .join(\" \");             return e.create(\"template\", { html: r });           },         },       ]),       t     );   })();   t.TodoList = o; })((this.BX = this.BX || {}), BX, BX); \/\/# sourceMappingURL=script.js.map <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>style.css<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"css\">#todo {   padding: 100px;   max-width: 900px;   -webkit-box-sizing: border-box;           box-sizing: border-box;   width: 100%;   margin: auto; }   #todo .form {     border-radius: 12px;     border: 1px solid #f7f7f7;     background-color: #f7f7f7;     padding: 12px; }     #todo .form__field {       margin-bottom: 12px;       display: -webkit-box;       display: -ms-flexbox;       display: flex;       gap: 4px;       -webkit-box-orient: vertical;       -webkit-box-direction: normal;           -ms-flex-direction: column;               flex-direction: column; }     #todo .form__button {       outline: none;       border: none;       background-color: #f7f7f7;       border-radius: 6px;       padding: 6px 12px;       cursor: pointer;       -webkit-transition: background-color .2s ease-in-out;       -o-transition: background-color .2s ease-in-out;       transition: background-color .2s ease-in-out;       -webkit-box-shadow: 0px 0px 5px 0px #00000040;               box-shadow: 0px 0px 5px 0px #00000040; }       #todo .form__button[type=\"submit\"] {         background-color: #b6b6ff; }         #todo .form__button[type=\"submit\"]:hover {           background-color: #9a9af1; }       #todo .form__button:hover {         background-color: #e6e6e6; }   #todo .todo__list {     padding: 0;     list-style: none;     margin: 0;     height: 500px;     overflow: auto; }   #todo .todo__item {     margin-bottom: 6px;     padding: 6px;     cursor: pointer; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>P.S. \u0422\u0435\u0441\u0442\u044b \u044f \u043d\u0435 \u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438\u0431\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u043d\u044c, + \u044f \u0443\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0438\u0448\u0443\u0442\u0441\u044f.<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 TodoList \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u0445\u0430\u0439\u043b\u043e\u0430\u0434.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u0432\u044b\u043d\u0435\u0441\u043b\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 template.php<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5a3\/4a6\/50a\/5a34a650a263960c8734658e7f681b7e.png\" alt=\"template.php\" title=\"template.php\" width=\"760\" height=\"205\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5a3\/4a6\/50a\/5a34a650a263960c8734658e7f681b7e.png\"\/><\/p>\n<div><figcaption>template.php<\/figcaption><\/div>\n<\/figure>\n<p>\u0423 \u0431\u0438\u0442\u0440\u0438\u043a\u0441\u0430 \u0435\u0441\u0442\u044c \u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0447\u0435\u0440\u0435\u0437 AJAX \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<p><strong><em>\u0412\u0430\u0436\u043d\u043e\u0435 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435!!!<\/em><\/strong><\/p>\n<p>\u041d\u0435 \u0432\u0435\u0440\u0441\u0442\u043a\u0443, \u043d\u0435 CSS \u0438 JS \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<pre><code class=\"php\">&lt;? public function testIncludeComponentAction() {     return new Bitrix\\Main\\Engine\\Response\\Component('test:test', '.default', []); }<\/code><\/pre>\n<p>\u0418 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0430\u043a \u0436\u0435 \u0442\u0443\u0434\u0430 \u0434\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0438 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. <\/p>\n<p><strong><em>\u041d\u041e \u0412\u041e\u0422 \u0411\u0415\u0414\u0410!!!<\/em><\/strong><\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044f, \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043c\u044b \u0432 \u043d\u0430\u0448\u0435\u043c ajax \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0446\u0435\u043b\u044b\u0439 assets \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043f\u0440\u0438\u0447\u0435\u043c JavaScript \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 CSS, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 DOM \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 <strong><em><abbr class=\"habraabbr\" title=\"\u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0438\u043b\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.\" data-title=\"&lt;p>&lt;a href=&quot;https:\/\/developer.mozilla.org\/ru\/docs\/Glossary\/Primitive&quot;>&lt;strong>\u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0435&lt;\/strong>&lt;\/a> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f &lt;strong>\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c&lt;\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0438\u043b\u0438 &lt;a href=&quot;https:\/\/developer.mozilla.org\/ru\/docs\/Glossary\/Argument&quot;>\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c&lt;\/a>, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.  &lt;\/p>&#187; data-abbr=&#187;undefined&#187;>undefined<\/abbr><\/em><\/strong> \u0438 \u043d\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u044d\u043a\u0448\u0435\u043d.<\/p>\n<pre><code class=\"php\">&lt;?  public function getComponentAction()     {          return new Bitrix\\Main\\Engine\\Response\\Component('test:todolist', '.default', [             'HIGHLOAD_BLOCK' => 'TodoList',             'ADDED_TASK_NOTIFICATION_TEXT' => '\u0417\u0430\u0434\u0430\u0447\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430',          ]);     }<\/code><\/pre>\n<p> \u0423\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<pre><code class=\"javascript\">BX.ajax.runComponentAction('test:todolist', 'getComponent', {     mode: 'class' }).then(res => {     console.log(res) }) <\/code><\/pre>\n<p>\u0418 \u0434\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u0435\u043c \u0447\u0435\u0440\u0435\u0437 namespace \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c Notification \u0438 \u0441\u0430\u043c \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 TodoList.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e18\/d06\/da7\/e18d06da7e3a413e211734f62b70bf94.png\" width=\"499\" height=\"45\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e18\/d06\/da7\/e18d06da7e3a413e211734f62b70bf94.png\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f49\/b79\/ab9\/f49b79ab9cde404758ac793fe63cab58.png\" width=\"331\" height=\"174\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f49\/b79\/ab9\/f49b79ab9cde404758ac793fe63cab58.png\"\/><\/figure>\n<p>\u041d\u043e \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/972\/a11\/3c4\/972a113c40daae90ebfb958c97efc07f.png\" width=\"554\" height=\"44\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/972\/a11\/3c4\/972a113c40daae90ebfb958c97efc07f.png\"\/><\/figure>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a <code>signedParameters<\/code> \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0430\u0448\u0435\u043c <strong><em>template.php<\/em><\/strong> \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0442\u043e \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u044d\u043a\u0448\u0435\u043d\u0430.<\/p>\n<pre><code class=\"json\">{   \"status\": \"success\",   \"data\": {     \"html\": \"&lt;section id=\\\"todo\\\" class=\\\"todo\\\">\\n    &lt;h2>TodoList&lt;\/h2>\\n    &lt;form class=\\\"todo__filter form\\\" id=\\\"todo__filter\\\">\\n        &lt;div class=\\\"form__field\\\">\\n            &lt;label for=\\\"\\\">\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443&lt;\/label>\\n            &lt;input type=\\\"text\\\" name=\\\"%UF_TEXT\\\">\\n        &lt;\/div>\\n        &lt;div class=\\\"form__buttons\\\">\\n            &lt;button class=\\\"form__button\\\" type=\\\"submit\\\">\u041d\u0430\u0439\u0442\u0438&lt;\/button>\\n        &lt;\/div>\\n    &lt;\/form>\\n    &lt;ul class=\\\"todo__list\\\" id=\\\"todo__list\\\">\\n                &lt;li class=\\\"todo__item\\\">\\n            &lt;label>\\n                &lt;input type=\\\"checkbox\\\" checked data-id=\\\"6\\\" \/>\\n                Test            &lt;\/label>\\n        &lt;\/li>\\n                &lt;li class=\\\"todo__item\\\">\\n            &lt;label>\\n                &lt;input type=\\\"checkbox\\\"  data-id=\\\"7\\\" \/>\\n                asdasdasdas            &lt;\/label>\\n        &lt;\/li>\\n                &lt;li class=\\\"todo__item\\\">\\n            &lt;label>\\n                &lt;input type=\\\"checkbox\\\"  data-id=\\\"8\\\" \/>\\n                UUUUU\\r\\n            &lt;\/label>\\n        &lt;\/li>\\n                &lt;li class=\\\"todo__item\\\">\\n            &lt;label>\\n                &lt;input type=\\\"checkbox\\\"  data-id=\\\"9\\\" \/>\\n                zxczzxczxczxczx            &lt;\/label>\\n        &lt;\/li>\\n            &lt;\/ul>\\n    &lt;form id=\\\"todo__add-form\\\" class=\\\"form\\\">\\n        &lt;div class=\\\"form__field\\\">\\n            &lt;label for=\\\"\\\">\u041d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430&lt;\/label>\\n            &lt;textarea name=\\\"UF_TEXT\\\">&lt;\/textarea>\\n        &lt;\/div>\\n        &lt;div class=\\\"form__buttons\\\">\\n            &lt;button class=\\\"form__button\\\" type=\\\"submit\\\">\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c&lt;\/button>\\n            &lt;button class=\\\"form__button\\\" type=\\\"reset\\\">\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c&lt;\/button>\\n        &lt;\/div>\\n    &lt;\/form>\\n&lt;\/section>\\n\\n\\n&lt;script>\\n\/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c SIGNED_PARAMETERS \u0432 JS \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u043a\u0442 BX.message\\nBX.message({\\n    signedParameters: \\\"YToyOntzOjE0OiJISUdITE9BRF9CTE9DSyI7czo4OiJUb2RvTGlzdCI7czoyODoiQURERURfVEFTS19OT1RJRklDQVRJT05fVEVYVCI7czo0Njoi0JfQsNC00LDRh9CwINGD0YHQv9C10YjQvdC+INC00L7QsdCw0LLQu9C10L3QsCI7fQ==.8b94b928477bfc1a77c5d7ca10f4ddcc9c6e1dafc18d4421bca4832ed936c290\\\"})\\n\/\/\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u043d\u0438\u0446\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0443\u0442. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u0447\u0435\u043c\u0443.\\nnew BX.TodoList()\\n&lt;\/script>\",     \"assets\": {       \"css\": [         \"\/local\/js\/myextensions\/notification\/dist\/Notification.bundle.css?17172271471600\",         \"\/local\/components\/test\/todolist\/templates\/.default\/style.css?17175728821460\"       ],       \"js\": [         \"\/bitrix\/js\/pull\/protobuf\/protobuf.js?1713462987274055\",         \"\/bitrix\/js\/pull\/protobuf\/model.js?171346298770928\",         \"\/bitrix\/js\/main\/core\/core_promise.js?17134629805220\",         \"\/bitrix\/js\/rest\/client\/rest.client.js?171346298717414\",         \"\/bitrix\/js\/pull\/client\/pull.client.js?171346298681036\",         \"\/local\/js\/myextensions\/notification\/dist\/Notification.bundle.js?17172271471419\",         \"\/local\/components\/test\/todolist\/templates\/.default\/script.js?17175728829870\"       ],       \"string\": [         \"&lt;script type=\\\"text\/javascript\\\">(window.BX||top.BX).message({'pull_server_enabled':'Y','pull_config_timestamp':'1671782091','pull_guest_mode':'N','pull_guest_user_id':'0'});(window.BX||top.BX).message({'PULL_OLD_REVISION':'\u0414\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0430\u0439\u0442\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.'});&lt;\/script>\",         \"&lt;script type=\\\"text\/javascript\\\">(window.BX||top.BX).message({'JS_CORE_LOADING':'\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...','JS_CORE_NO_DATA':'- \u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 -','JS_CORE_WINDOW_CLOSE':'\u0417\u0430\u043a\u0440\u044b\u0442\u044c','JS_CORE_WINDOW_EXPAND':'\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c','JS_CORE_WINDOW_NARROW':'\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043e\u043a\u043d\u043e','JS_CORE_WINDOW_SAVE':'\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c','JS_CORE_WINDOW_CANCEL':'\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c','JS_CORE_WINDOW_CONTINUE':'\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c','JS_CORE_H':'\u0447','JS_CORE_M':'\u043c','JS_CORE_S':'\u0441','JSADM_AI_HIDE_EXTRA':'\u0421\u043a\u0440\u044b\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435','JSADM_AI_ALL_NOTIF':'\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435','JSADM_AUTH_REQ':'\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f!','JS_CORE_WINDOW_AUTH':'\u0412\u043e\u0439\u0442\u0438','JS_CORE_IMAGE_FULL':'\u041f\u043e\u043b\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440'});&lt;\/script>\\r\\n\",         \"&lt;script type=\\\"text\/javascript\\\" src=\\\"\/bitrix\/js\/main\/core\/core.js?1713462980487984\\\">&lt;\/script>\\r\\n\",         \"&lt;script>BX.setJSList(['\/bitrix\/js\/main\/core\/core_ajax.js','\/bitrix\/js\/main\/core\/core_promise.js','\/bitrix\/js\/main\/polyfill\/promise\/js\/promise.js','\/bitrix\/js\/main\/loadext\/loadext.js','\/bitrix\/js\/main\/loadext\/extension.js','\/bitrix\/js\/main\/polyfill\/promise\/js\/promise.js','\/bitrix\/js\/main\/polyfill\/find\/js\/find.js','\/bitrix\/js\/main\/polyfill\/includes\/js\/includes.js','\/bitrix\/js\/main\/polyfill\/matches\/js\/matches.js','\/bitrix\/js\/ui\/polyfill\/closest\/js\/closest.js','\/bitrix\/js\/main\/polyfill\/fill\/main.polyfill.fill.js','\/bitrix\/js\/main\/polyfill\/find\/js\/find.js','\/bitrix\/js\/main\/polyfill\/matches\/js\/matches.js','\/bitrix\/js\/main\/polyfill\/core\/dist\/polyfill.bundle.js','\/bitrix\/js\/main\/core\/core.js','\/bitrix\/js\/main\/polyfill\/intersectionobserver\/js\/intersectionobserver.js','\/bitrix\/js\/main\/lazyload\/dist\/lazyload.bundle.js','\/bitrix\/js\/main\/polyfill\/core\/dist\/polyfill.bundle.js','\/bitrix\/js\/main\/parambag\/dist\/parambag.bundle.js']);\\n&lt;\/script>\",         \"&lt;script type=\\\"text\/javascript\\\">\\n\\t\\t\\t\\t\\t(function () {\\n\\t\\t\\t\\t\\t\\t\\\"use strict\\\";\\n\\n\\t\\t\\t\\t\\t\\tvar counter = function ()\\n\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\tvar cookie = (function (name) {\\n\\t\\t\\t\\t\\t\\t\\t\\tvar parts = (\\\"; \\\" + document.cookie).split(\\\"; \\\" + name + \\\"=\\\");\\n\\t\\t\\t\\t\\t\\t\\t\\tif (parts.length == 2) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttry {return JSON.parse(decodeURIComponent(parts.pop().split(\\\";\\\").shift()));}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcatch (e) {}\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t})(\\\"BITRIX_CONVERSION_CONTEXT_s1\\\");\\n\\n\\t\\t\\t\\t\\t\\t\\tif (cookie &amp;&amp; cookie.EXPIRE >= BX.message(\\\"SERVER_TIME\\\"))\\n\\t\\t\\t\\t\\t\\t\\t\\treturn;\\n\\n\\t\\t\\t\\t\\t\\t\\tvar request = new XMLHttpRequest();\\n\\t\\t\\t\\t\\t\\t\\trequest.open(\\\"POST\\\", \\\"\/bitrix\/tools\/conversion\/ajax_counter.php\\\", true);\\n\\t\\t\\t\\t\\t\\t\\trequest.setRequestHeader(\\\"Content-type\\\", \\\"application\/x-www-form-urlencoded\\\");\\n\\t\\t\\t\\t\\t\\t\\trequest.send(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"SITE_ID=\\\"+encodeURIComponent(\\\"s1\\\")+\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"&amp;sessid=\\\"+encodeURIComponent(BX.bitrix_sessid())+\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"&amp;HTTP_REFERER=\\\"+encodeURIComponent(document.referrer)\\n\\t\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t\\t};\\n\\n\\t\\t\\t\\t\\t\\tif (window.frameRequestStart === true)\\n\\t\\t\\t\\t\\t\\t\\tBX.addCustomEvent(\\\"onFrameDataReceived\\\", counter);\\n\\t\\t\\t\\t\\t\\telse\\n\\t\\t\\t\\t\\t\\t\\tBX.ready(counter);\\n\\t\\t\\t\\t\\t})();\\n\\t\\t\\t\\t&lt;\/script>\",         \"&lt;script type=\\\"text\/javascript\\\">(window.BX||top.BX).message({'pull_server_enabled':'Y','pull_config_timestamp':'1671782091','pull_guest_mode':'N','pull_guest_user_id':'0'});(window.BX||top.BX).message({'PULL_OLD_REVISION':'\u0414\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0430\u0439\u0442\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.'});&lt;\/script>\",         \"&lt;script type=\\\"text\/javascript\\\">(window.BX||top.BX).message({'JS_CORE_LOADING':'\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...','JS_CORE_NO_DATA':'- \u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 -','JS_CORE_WINDOW_CLOSE':'\u0417\u0430\u043a\u0440\u044b\u0442\u044c','JS_CORE_WINDOW_EXPAND':'\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c','JS_CORE_WINDOW_NARROW':'\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043e\u043a\u043d\u043e','JS_CORE_WINDOW_SAVE':'\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c','JS_CORE_WINDOW_CANCEL':'\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c','JS_CORE_WINDOW_CONTINUE':'\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c','JS_CORE_H':'\u0447','JS_CORE_M':'\u043c','JS_CORE_S':'\u0441','JSADM_AI_HIDE_EXTRA':'\u0421\u043a\u0440\u044b\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435','JSADM_AI_ALL_NOTIF':'\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435','JSADM_AUTH_REQ':'\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f!','JS_CORE_WINDOW_AUTH':'\u0412\u043e\u0439\u0442\u0438','JS_CORE_IMAGE_FULL':'\u041f\u043e\u043b\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440'});&lt;\/script>\\r\\n\",         \"&lt;script type=\\\"text\/javascript\\\" src=\\\"\/bitrix\/js\/main\/core\/core.js?1713462980487984\\\">&lt;\/script>\\r\\n\",         \"&lt;script>BX.setJSList(['\/bitrix\/js\/main\/core\/core_ajax.js','\/bitrix\/js\/main\/core\/core_promise.js','\/bitrix\/js\/main\/polyfill\/promise\/js\/promise.js','\/bitrix\/js\/main\/loadext\/loadext.js','\/bitrix\/js\/main\/loadext\/extension.js','\/bitrix\/js\/main\/polyfill\/promise\/js\/promise.js','\/bitrix\/js\/main\/polyfill\/find\/js\/find.js','\/bitrix\/js\/main\/polyfill\/includes\/js\/includes.js','\/bitrix\/js\/main\/polyfill\/matches\/js\/matches.js','\/bitrix\/js\/ui\/polyfill\/closest\/js\/closest.js','\/bitrix\/js\/main\/polyfill\/fill\/main.polyfill.fill.js','\/bitrix\/js\/main\/polyfill\/find\/js\/find.js','\/bitrix\/js\/main\/polyfill\/matches\/js\/matches.js','\/bitrix\/js\/main\/polyfill\/core\/dist\/polyfill.bundle.js','\/bitrix\/js\/main\/core\/core.js','\/bitrix\/js\/main\/polyfill\/intersectionobserver\/js\/intersectionobserver.js','\/bitrix\/js\/main\/lazyload\/dist\/lazyload.bundle.js','\/bitrix\/js\/main\/polyfill\/core\/dist\/polyfill.bundle.js','\/bitrix\/js\/main\/parambag\/dist\/parambag.bundle.js']);\\n&lt;\/script>\",         \"&lt;script type=\\\"text\/javascript\\\">\\n\\t\\t\\t\\t\\t(function () {\\n\\t\\t\\t\\t\\t\\t\\\"use strict\\\";\\n\\n\\t\\t\\t\\t\\t\\tvar counter = function ()\\n\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\tvar cookie = (function (name) {\\n\\t\\t\\t\\t\\t\\t\\t\\tvar parts = (\\\"; \\\" + document.cookie).split(\\\"; \\\" + name + \\\"=\\\");\\n\\t\\t\\t\\t\\t\\t\\t\\tif (parts.length == 2) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttry {return JSON.parse(decodeURIComponent(parts.pop().split(\\\";\\\").shift()));}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcatch (e) {}\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t})(\\\"BITRIX_CONVERSION_CONTEXT_s1\\\");\\n\\n\\t\\t\\t\\t\\t\\t\\tif (cookie &amp;&amp; cookie.EXPIRE >= BX.message(\\\"SERVER_TIME\\\"))\\n\\t\\t\\t\\t\\t\\t\\t\\treturn;\\n\\n\\t\\t\\t\\t\\t\\t\\tvar request = new XMLHttpRequest();\\n\\t\\t\\t\\t\\t\\t\\trequest.open(\\\"POST\\\", \\\"\/bitrix\/tools\/conversion\/ajax_counter.php\\\", true);\\n\\t\\t\\t\\t\\t\\t\\trequest.setRequestHeader(\\\"Content-type\\\", \\\"application\/x-www-form-urlencoded\\\");\\n\\t\\t\\t\\t\\t\\t\\trequest.send(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"SITE_ID=\\\"+encodeURIComponent(\\\"s1\\\")+\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"&amp;sessid=\\\"+encodeURIComponent(BX.bitrix_sessid())+\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"&amp;HTTP_REFERER=\\\"+encodeURIComponent(document.referrer)\\n\\t\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t\\t};\\n\\n\\t\\t\\t\\t\\t\\tif (window.frameRequestStart === true)\\n\\t\\t\\t\\t\\t\\t\\tBX.addCustomEvent(\\\"onFrameDataReceived\\\", counter);\\n\\t\\t\\t\\t\\t\\telse\\n\\t\\t\\t\\t\\t\\t\\tBX.ready(counter);\\n\\t\\t\\t\\t\\t})();\\n\\t\\t\\t\\t&lt;\/script>\",         \"\"       ]     },     \"additionalParams\": [],     \"componentResult\": []   },   \"errors\": [] } <\/code><\/pre>\n<h2>\u041a\u0430\u043a \u0436\u0435 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e?<\/h2>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e <code>BX.ajax.runComponentAction<\/code> \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 Ajax, \u0430 \u0432\u043e\u0442 \u0443 \u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435: \u0415\u0441\u043b\u0438 \u0432 response \u0435\u0441\u0442\u044c assets, \u0442\u043e js \u0438 css \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 DOM.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u044f\u0434\u0440\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">var assets = BX.prop.getObject(BX.prop.getObject(response, \"data\", {}), \"assets\", {}); var promise = new Promise(function(resolve, reject) { var css = BX.prop.getArray(assets, \"css\", []); BX.load(css, function(){ BX.loadScript( BX.prop.getArray(assets, \"js\", []), resolve ); }); }); promise.then(function(){ var strings = BX.prop.getArray(assets, \"string\", []); var stringAsset = strings.join('\\n'); BX.html(document.head, stringAsset, { useAdjacentHTML: true }).then(function(){ assetsLoaded.fulfill(response); }); });  return assetsLoaded;<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 core_ajax.js \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 buildAjaxPromiseToRestoreCsrf, \u0430 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c runComponentAction.<\/p>\n<\/div>\n<\/details>\n<p>\u042f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0431\u043e\u0439\u0442\u0438, \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 DOM, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 template.php.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0432 DOM \u043d\u0430\u0448 <strong><em><abbr class=\"habraabbr\" title=\"\u044d\u0442\u043e \u044f\u0437\u044b\u043a \u0433\u0438\u043f\u0435\u0440\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u041e\u043d\u00a0\u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0430\u00a0\u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b: \u0442\u0435\u043a\u0441\u0442, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u00a0\u0432\u0438\u0434\u0435\u043e.\" data-title=\"&lt;p> \u044d\u0442\u043e \u044f\u0437\u044b\u043a \u0433\u0438\u043f\u0435\u0440\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u041e\u043d&amp;nbsp;\u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0430&amp;nbsp;\u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b: \u0442\u0435\u043a\u0441\u0442, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438&amp;nbsp;\u0432\u0438\u0434\u0435\u043e.  &lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b38\/bdb\/a98\/b38bdba98d33c8205f0e66edf4c47a74.png&#187; data-abbr=&#187;HTML&#187; data-image-width=&#187;450&#8243; data-image-height=&#187;450&#8243;>HTML<\/abbr><\/em><\/strong> &#8212; \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>\u0414\u0430 \u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0437\u0430\u0437\u043e\u0440\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0442\u043e \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0441\u0430\u043c\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u044e\u0442. (\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0440\u044b\u0442\u044c\u0441\u044f \u0432 \u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/16f\/68d\/0f3\/16f68d0f3b9d9abe3fb872391fa16d19.png\" alt=\"\u041e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\" title=\"\u041e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\" width=\"538\" height=\"284\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/16f\/68d\/0f3\/16f68d0f3b9d9abe3fb872391fa16d19.png\"\/><\/p>\n<div><figcaption>\u041e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/figcaption><\/div>\n<\/figure>\n<p><strong><em>\u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442!!!<\/em><\/strong><\/p>\n<p><strong><em>\u0421\u041a\u0420\u0418\u041f\u0422 \u0417\u0410\u0413\u0420\u0423\u0417\u0418\u0422\u0421\u042f \u0421\u041e \u0421\u0422\u0418\u041b\u042f\u041c\u0418 \u041e\u0414\u0418\u041d \u0420\u0410\u0417!!!<\/em><\/strong><\/p>\n<p>\u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043d\u0435 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c. \u0427\u0442\u043e\u0431\u044b \u043c\u044b (\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0430\u0439\u0442\u043e\u0432 \u043d\u0430 Bitrix) \u043f\u0438\u0441\u0430\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u043a\u043b\u0430\u0441\u0441\u044b.<\/p>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043f\u043e\u0442\u043e\u043c \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u043d\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f, \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437 \u0442\u043e\u043b\u044c\u043a\u043e HTML.<\/p>\n<p>\u041d\u043e \u0442\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u0431\u044b\u0442\u044c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0442\u0438\u043b\u044f\u043c\u0438 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0441\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0437\u0430 \u043e\u0431\u0449\u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439.<\/p>\n<hr\/>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>\u041c\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u043b\u0438\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043b\u043e\u0442\u043d\u043e \u043a \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u0430\u043a \u044d\u0442\u043e \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Bitrix. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u044f\u0434\u0440\u0430.<\/p>\n<p>\u0418 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043a\u043b\u0430\u0441\u0441, \u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c action \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<p>\u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c unit \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u0444\u0440\u043e\u043d\u0442\u0430. (\u041f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0435, \u043d\u043e \u0434\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443 \u0441\u0430\u043c\u0438 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c, \u044f \u043b\u0438\u0448\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e).<\/p>\n<p>\u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u041c\u043d\u043e\u0433\u0438\u0435 100% \u043d\u0435 \u0437\u043d\u0430\u043b\u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u0442\u0435\u043b\u044c\u043d\u044b\u0435 ajax \u0444\u0430\u0439\u043b\u044b \u0441 \u0432\u0435\u0440\u0441\u0442\u043a\u043e\u0439 \u0438 \u043b\u043e\u0433\u0438\u043a\u043e\u0439.<\/p>\n<p>\u041c\u044b \u043e\u0441\u0432\u043e\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u0432\u0435\u0436\u0438\u0439 \u0438 \u043a\u0440\u0443\u0442\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443.<\/p>\n<p>\u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c JS \u0431\u0430\u043d\u0434\u043b\u044b \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. (\u041d\u0443 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0438\u0442\u044c, \u044f \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043b \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f). \u0410 \u0442\u0430\u043a \u0436\u0435 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0433\u0440\u0443\u0437\u0438\u043b\u0430\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u043a\u043e\u0434 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0431\u044b\u043b \u043c\u0435\u043d\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u0435\u043d. (\u041d\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0438 \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0443 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0432 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e 99% \u0435\u0441\u043b\u0438 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435. GPT 4 &#8212; \u041f\u0440\u0438\u0432\u0435\u0442!!!).<\/p>\n<p>\u041d\u0443 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043c\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b\u0438 Frontend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441 Backend &#8212; \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435. (\u0414\u043b\u044f Bitrix Framework)<\/p>\n<h2>P.S.<\/h2>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0438\u0441\u0430\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e, \u0438 \u0431\u044b\u043b\u043e \u0432 \u043d\u0435\u0451 \u0432\u043b\u043e\u0436\u0435\u043d\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0418 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u0445\u043e\u0434\u0443 \u043a\u043e\u0433\u0434\u0430 \u0447\u0442\u043e \u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u0443 \u043c\u0435\u043d\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c import \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0410 \u043f\u043e\u0442\u043e\u043c \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u044f \u043e\u043f\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043a\u043e\u0441\u044f\u043a\u0438 \u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043e\u0442\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0438\u043b\u0438 \u0432 \u041b\u0421, \u044f \u0432\u0441\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u043b\u044e \u043f\u043e\u0442\u043e\u043c.<\/p>\n<p>\u0418 \u043f\u043e\u043a\u0430 \u0432\u044b \u0447\u0438\u0442\u0430\u043b\u0438 \u044d\u0442\u043e. \u0423\u0436\u0435 \u0438\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0413\u0434\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c SPA \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>\u0431\u0435\u0437 JS \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 (Vue, React, Svelte \u0438 \u0442.\u0434. \u0442.\u043f.).<\/p>\n<\/li>\n<li>\n<p>\u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 SSR.<\/p>\n<\/li>\n<li>\n<p>\u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 SEO.<\/p>\n<\/li>\n<li>\n<p>\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Bitrix.<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0430 \u0442\u0430\u043a \u0436\u0435 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 (\u043d\u0430\u0437\u0430\u0434, \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u0442.\u0434. \u0442.\u043f.)<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u044b\u0442\u043d\u044b\u0435 Backend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Bitrix \u0443\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u044f \u044d\u0442\u043e \u0431\u0443\u0434\u0443 \u0434\u0435\u043b\u0430\u0442\u044c, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0442\u043e \u0447\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\/\u043c\u0435\u0442\u043e\u0434 \u044f \u0443\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b. \u041d\u043e \u0432 \u043f\u043b\u0430\u043d\u0435 \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u044f\u043c SPA \u0438 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 SSR \u0438 SEO \u0432\u0440\u044f\u0434-\u043b\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0442\u0430\u043a \u0436\u0435 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0438 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u044f &#8212; \u043b\u0430\u0439\u043a\u043d\u0438 bro )))).<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043b \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438 \u043c\u043e\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0432 \u043a\u043e\u0434\u0435 &#8212; \u0445\u0432\u0430\u0442\u0438\u043b\u043e.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/815439\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0411\u044b\u043b\u0430 \u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">63.64% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430<\/span><span class=\"tm-article-poll__answer-votes\">14<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 63.64%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">36.36% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442<\/span><span class=\"tm-article-poll__answer-votes\">8<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 36.36%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 22 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.    \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 5 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/815439\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0411\u0443\u0434\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">31.58% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430<\/span><span class=\"tm-article-poll__answer-votes\">6<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 31.58%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">68.42% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442<\/span><span class=\"tm-article-poll__answer-votes\">13<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 68.42%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 19 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 6 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/815439\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u041d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0443\u0442\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 (0-5)<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">28% <\/span><span class=\"tm-article-poll__answer-label\">5 (\u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u0435\u043b\u043e\u2026 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043f*\u0437\u0434\u0435\u0446 \u043a\u0430\u043a \u0441\u043c\u0435\u043b\u043e)<\/span><span class=\"tm-article-poll__answer-votes\">7<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 28%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">16% <\/span><span class=\"tm-article-poll__answer-label\">4 (\u041a\u0440\u0443\u0442\u043e! \u0414\u0430 \u044d\u0442\u043e \u0436 \u043a\u0440\u0443\u0442\u043e)<\/span><span class=\"tm-article-poll__answer-votes\">4<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 16%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">36% <\/span><span class=\"tm-article-poll__answer-label\">3 (\u0421\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u2026 \u041d\u043e \u043e\u043a\u044d\u0439)<\/span><span class=\"tm-article-poll__answer-votes\">9<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 36%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">4% <\/span><span class=\"tm-article-poll__answer-label\">2 (\u042d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e, \u044d\u0442\u043e \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e)<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 4%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">4% <\/span><span class=\"tm-article-poll__answer-label\">1 (\u041d\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u043f*\u0437\u0434\u0435\u0446 \u0442\u0430\u043a\u043e\u0439?)<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 4%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">12% <\/span><span class=\"tm-article-poll__answer-label\">0 (\u041c\u044b \u0432\u0441\u0435 \u0432\u0438\u043d\u043e\u0432\u0430\u0442\u044b \u0432 \u044d\u0442\u043e\u043c \u043f*\u0437\u0434\u0435\u0446\u0435)<\/span><span class=\"tm-article-poll__answer-votes\">3<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 12%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 25 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 4 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \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\/articles\/815439\/\"> https:\/\/habr.com\/ru\/articles\/815439\/<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u044f \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0441\u0430\u043c\u044b\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043d\u043e\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430 D7. \u0412 \u0446\u0435\u043b\u043e\u043c \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438 \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e &#8212; \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c (\u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c).<\/p>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043c\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435, \u043d\u043e \u044f \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0438\u043c \u0434\u043e\u0432\u043e\u043b\u0435\u043d.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0432\u0441\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u043a\u0430\u043a \u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \/ \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435. \u0410 \u0437\u0430\u0442\u0435\u043c \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0441 \u0442\u0435\u043c \u0447\u0442\u043e \u043c\u043e\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0442\u044f\u0436\u0435\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432\u0435\u0434\u044c \u043e\u043d \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0430 JS \/ <s>GayQuery<\/s> JQuery \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0432\u0441\u0435\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c BX, \u0432 \u0446\u0435\u043b\u043e\u043c \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u043b \u0432 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435, \u043d\u043e \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0440\u044f\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0435 \u043d\u0430 20 &#8212; 50% \u0430 \u043d\u0430 \u0432\u0441\u0435 200%. \u0412\u044b\u0436\u0438\u043c\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0442\u043e \u043a\u0440\u0443\u0442\u044b\u0435 \u0448\u0442\u0443\u043a\u0438.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c Bitrix \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430 \u0441\u0430\u043c\u0430 \u0431\u0430\u0437\u0430 \u044f\u0434\u0440\u0430 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 (\u043a\u0430\u043a \u0438 \u0441\u0430\u043c PHP), \u043d\u043e \u0438\u0441\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u043c. \u0414\u0430\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u0440\u0443\u0442\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043d\u0430 Bitrix. \u041d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u0442, \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b (\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0431\u0435\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043a\u0430\u043a \u0431\u043e\u043d\u0443\u0441 \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432 \u044f\u0434\u0440\u0435)<\/p>\n<p>\u0418 \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<blockquote>\n<p>\u041d\u0443 \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u044e\u0442 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0435 \u043f\u0438\u0448\u0438\u0442\u0435 \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443, \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432 \u0442\u0435\u0445. \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0442\u044c, \u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u0443\u044e \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432 \u044f\u0434\u0440\u043e \u0447\u0442\u043e \u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0434\u0435 \u043a\u043e\u0441\u044f\u043a, \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0433-\u0440\u0435\u043f\u043e\u0440\u0442<\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0446\u0438\u0442\u0430\u0442\u0430 \u043d\u0430 17:25<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/664a3449ee339fd48b0cf10b\" data-style=\"\" id=\"664a3449ee339fd48b0cf10b\" width=\"\"><\/div>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u043d\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043a\u0430\u043a \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430. \u041d\u0443 \u0432 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0420\u0435\u0431\u044f\u0442\u0430 \u0434\u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 Bitrix \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0440\u0430\u0441\u0442\u0435\u0442.<\/p>\n<p>P.S. \u0434\u0430 \u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043a\u043e\u043f\u0430\u043b\u0441\u044f \u0434\u043e \u0432\u0438\u0434\u0435\u043e 2018 \u0433\u043e\u0434\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c YouTube \u043a\u0430\u043d\u0430\u043b\u0435 \u0411\u0438\u0442\u0440\u0438\u043a\u044124!!!<\/p>\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/yt3.googleusercontent.com\/Pviiw7oAGwBdEiRgXM52BxoGOPkuu_vRCkXCaLLrm0yybiXAChTuVprpDMaY0oyHBgY7Ea1tKtw=s900-c-k-c0x00ffffff-no-rj&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>\u0411\u0438\u0442\u0440\u0438\u043a\u044124. \u0414\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430<\/span><\/div>\n<p><a href=\"https:\/\/www.youtube.com\/channel\/UCCaFbhrkxpOvVbgewxfjoRg\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">www.youtube.com<\/a><\/div>\n<\/div>\n<p>\u041d\u0443 \u0438 \u0432\u043e\u0442 \u044f \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0438 \u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043d\u0438 \u043a\u043e\u043c\u0443 \u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0443\u0442, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043c\u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0437\u0430 300\u043a \u0432 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0443 (\u043d\u0435\u0442).<\/p>\n<figure class=\"\">\n<div><figcaption>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u043b \u0441\u043e\u0432\u0435\u0442 \u0438 \u0434\u043e\u043f\u0438\u0441\u0430\u043b \u044f\u0434\u0440\u043e \u0438 \u043b\u0438\u0448\u0438\u043b\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u0442\u0435\u0445. \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0434\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u0431\u0435\u0434\u043e\u043b\u0430\u0433\u0438 \u0444\u0440\u043e\u043d\u0442\u044b \u0441\u0438\u0434\u044f\u0442 \u0438 \u0434\u0443\u043c\u0430\u044e\u0442 \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0440\u043e\u043d\u0442 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u0434\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043c\u043e\u0434\u0443\u043b\u044f\u043c Bitrix, \u0438 \u043f\u043e \u0438\u0442\u043e\u0433\u0443 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a\u0443\u044e \u0442\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u0443\u044e API, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u043d\u0435\u0441\u043b\u0438 \u0444\u0440\u043e\u043d\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u0441\u0430\u043c Bitrix \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a backend \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u0432 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c. \u041d\u043e \u0443\u0432\u044b \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043b\u0438\u0448\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0435\u0449\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0435\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438 \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u0438 SPA \u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435:<\/p>\n<div class=\"embed_link embed_layout-right\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7d5\/831\/149\/7d58311491e2b175f2094652e3431cec.jpg&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>Frontend \u0432\u043d\u0443\u0442\u0440\u0438 Bitrix. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 + SPA \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Vue \u0438\u043b\u0438 React<\/span><\/div>\n<div class=\"embed__caption-description\">\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a Frontend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432 Bitrix. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 &#8230;<\/div>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/810581\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">habr.com<\/a><\/div>\n<\/div>\n<\/div>\n<\/details>\n<p>\u0412 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0445 \u0438 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u0442\u0435\u043c\u0443 <strong><em>Bitrix<\/em><\/strong> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 <strong>\u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b,<\/strong> <strong>\u0430 \u0443\u0432\u0438\u0434\u0435\u043b \u043b\u0438\u0448\u044c <em>\u0447\u0430\u0441\u0442\u0438\u0447\u043a\u0438<\/em><\/strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u0442\u043e \u0442\u043e \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b \u0438 \u0441\u0430\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442, \u043d\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u044d\u0442\u043e \u044f \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044f \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 :D, \u043d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u043d\u0435 \u043a\u0438\u0434\u0430\u0439\u0442\u0435 \u0432 \u043c\u0435\u043d\u044f \u043f\u0430\u043b\u043a\u0438, \u044f \u043d\u0435 \u0437\u043d\u0430\u043b.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0447\u0442\u043e \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<h2>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h2>\n<ol>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/introduction.php https:\/\/dev.1c-bitrix.ru\/api_d7\/bitrix\/ui\/index.php\" data-title=\"&lt;p>&lt;a href=&quot;https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/introduction.php&quot;>https:\/\/dev.1c-bitrix.ru\/api_help\/js_lib\/introduction.php&lt;\/a>&lt;\/p>&lt;p>&lt;\/p>&lt;p>&lt;a href=&quot;https:\/\/dev.1c-bitrix.ru\/api_d7\/bitrix\/ui\/index.php&quot;>https:\/\/dev.1c-bitrix.ru\/api_d7\/bitrix\/ui\/index.php&lt;\/a>&lt;\/p>&#187; data-abbr=&#187;JS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Bitrix&#187;>JS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Bitrix<\/abbr><\/em><\/strong> \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"CSS \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 ( CSS preprocessor) - \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e CSS \u043a\u043e\u0434 . \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0441\u0442\u043e\u0433\u043e CSS, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u043a: \u043f\u0440\u0438\u043c\u0435\u0441\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0440. \u042d\u0442\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 CSS: \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443.\" data-title=\"&lt;p>\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u043a: \u043f\u0440\u0438\u043c\u0435\u0441\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0440. \u042d\u0442\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 CSS: \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443.&#187; data-title=&lt;p>CSS \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (&lt;strong>CSS preprocessor&lt;\/strong>) &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e CSS&lt;br> \u043a\u043e\u0434 . \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442&lt;br> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0441\u0442\u043e\u0433\u043e CSS, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u043a: \u043f\u0440\u0438\u043c\u0435\u0441\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435&lt;br> \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0440. \u042d\u0442\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 CSS: \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. &lt;\/p>&lt;p>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/678\/0e9\/b9d\/6780e9b9def990cac1551d99e03d1750.png&#187; data-abbr=&#187; &#187; data-image-width=&#187;640&#8243; data-image-height=&#187;480&#8243;>\u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 SCSS \/ SASS<\/abbr> <\/em><\/strong>\u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f CSS.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0411\u0438\u0442\u0440\u0438\u043a\u0441-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441: \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0421\u0430\u0439\u0442\u043e\u043c \u0438 \u0411\u0438\u0442\u0440\u0438\u043a\u044124.\" data-title=\"&lt;p> \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441: \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0421\u0430\u0439\u0442\u043e\u043c \u0438 \u0411\u0438\u0442\u0440\u0438\u043a\u044124.&#187; data-title=&#187;&lt;p>\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442&lt;br> \u0411\u0438\u0442\u0440\u0438\u043a\u0441-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c&lt;br> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 &lt;em>1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441: \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0421\u0430\u0439\u0442\u043e\u043c&lt;\/em> \u0438 &lt;em>\u0411\u0438\u0442\u0440\u0438\u043a\u044124&lt;\/em>.&lt;\/p>&lt;p>&lt;\/p>&#187; data-abbr=&#187;Bitrix CLI&#187;>Bitrix CLI<\/abbr><\/em><\/strong> \u0434\u043b\u044f <strong><em><abbr class=\"habraabbr\" title=\"\u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u0438\u043b\u0438 \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0441\u0431\u043e\u0440\u043a\u0443, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 (\u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b) \u2013 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041e\u043d\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 JavaScript, \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.\" data-title=\"&lt;p>\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041e\u043d\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 JavaScript, \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.&#187; data-title=&lt;p>\u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u0438\u043b\u0438 \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0441\u0431\u043e\u0440\u043a\u0443, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0421\u0431\u043e\u0440\u0449\u0438\u043a\u0438 (\u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b) \u2013 \u044d\u0442\u043e &lt;strong>\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435&lt;\/strong>. \u041e\u043d\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 JavaScript, \u0441\u0442\u0438\u043b\u0435\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.&lt;\/p>&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u0441\u0431\u043e\u0440\u043a\u0438 \u0432 bundle&#187;>\u0441\u0431\u043e\u0440\u043a\u0438 JS \u0432 bundle<\/abbr><\/em><\/strong> , <strong><em><abbr class=\"habraabbr\" title=\"\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0301\u0446\u0438\u044f ( \u0430\u043d\u0433\u043b. minification) \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0443\u0442\u0451\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, JavaScript), \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b (\u043a\u0430\u0441\u0430\u0435\u043c\u043e \u0441\u0430\u0439\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432).\" data-title=\"&lt;p>\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, JavaScript), \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b (\u043a\u0430\u0441\u0430\u0435\u043c\u043e \u0441\u0430\u0439\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432).&#187; data-title=&#187;&lt;p>&lt;strong>\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0301\u0446\u0438\u044f&lt;\/strong> (&lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA&quot;>\u0430\u043d\u0433\u043b.&lt;\/a>&amp;nbsp;&lt;em>minification&lt;\/em>) \u0432 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&quot;>\u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&lt;\/a>&amp;nbsp;\u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4&quot;>\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430&lt;\/a> \u043f\u0443\u0442\u0451\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&quot;>\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445&lt;\/a> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/JavaScript&quot;>JavaScript&lt;\/a>), \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b (\u043a\u0430\u0441\u0430\u0435\u043c\u043e \u0441\u0430\u0439\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&quot;>\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f&lt;\/a> &lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&quot;>\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432&lt;\/a>). &lt;\/p>&lt;p>&lt;\/p>&#187;>\u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/abbr><\/em><\/strong> JS \u0438 SCSS \u0432 CSS.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"\u0410\u0432\u0442\u043e\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435\u0440, Stylelint, babel-preset-env \u0438 cssnext \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Browserslist, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.\" data-title=\"&lt;p>\u0437\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.&#187; data-title=&lt;p>\u0410\u0432\u0442\u043e\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435\u0440, Stylelint, babel-preset-env \u0438 cssnext \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Browserslist, &lt;strong>\u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.&lt;\/strong>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d9d\/9d2\/513\/d9d9d251329b2e334763050a94b349ac.png&#187; data-abbr=&#187;browserslist&#187; data-image-width=&#187;225&#8243; data-image-height=&#187;225&#8243;>browserslist<\/abbr><\/em><\/strong> \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>(\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u0414\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 <strong><em><abbr class=\"habraabbr\" title=\"\u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 HTML-\u043a\u043e\u0434\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 HTML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0433\u043e\u0432.\" data-title=\"&lt;p>\u0435\u0440\u0432\u0435\u0440\u0430. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 HTML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0433\u043e\u0432.&#187; data-title=&#187;&lt;p>\u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438&lt;br> \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 HTML-\u043a\u043e\u0434\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418\u043d\u044b\u043c\u0438&lt;br> \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 HTML-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u0433\u043e\u0432.&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/011\/fe8\/1c8\/011fe81c8006c5f524250bc6f25340df.png&#187; data-abbr=&#187;DOM&#187; data-image-width=&#187;680&#8243; data-image-height=&#187;340&#8243;>DOM<\/abbr><\/em><\/strong> \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong><em><abbr class=\"habraabbr\" title=\"\u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 DOM. \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e-\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0441\u0435\u0431\u0435 \u043a\u0430\u043a \u0432\u0435\u0434\u0440\u043e. \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e.\" data-title=\"&lt;p>\u0440\u043e. \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e.&#187; data-title=&lt;p>\u044d\u0442\u043e &lt;strong>\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 DOM&lt;\/strong>.&lt;br> \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e-\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0441\u0435\u0431\u0435 \u043a\u0430\u043a \u0432\u0435\u0434\u0440\u043e.&lt;br> \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u043c&lt;br> \u0432\u044b\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e.&lt;\/p>&#187; data-abbr=&#187;DocumentFragment&#187;>DocumentFragment<\/abbr> <\/em><\/strong>\u0438\u043b\u0438 <a href=\"https:\/\/learn.javascript.ru\/template-tag\" rel=\"noopener noreferrer nofollow\"><strong><em>template<\/em><\/strong><\/a> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438<strong><em> DocumentFragment<\/em><\/strong>. <\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"Unit-\u0442\u0435\u0441\u0442 - \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\" data-title=\"&lt;p>\u0439. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.&#187; data-title=&lt;p>Unit-\u0442\u0435\u0441\u0442 &#8212; \u044d\u0442\u043e &lt;strong>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b&lt;\/strong>.&lt;br> \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439, \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c&lt;br> \u0432\u0430\u0436\u043d\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c&lt;br> \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.&lt;\/p>&lt;p>&lt;\/p>&#187; data-image=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a0\/18c\/035\/4a018c035d66bb6bd8ab995deb866914.jpeg&#187; data-image-width=&#187;238&#8243; data-image-height=&#187;147&#8243;>unit \u0442\u0435\u0441\u0442\u043e\u0432<\/abbr><\/em><\/strong> \u0434\u043b\u044f <a href=\"https:\/\/dev.1c-bitrix.ru\/learning\/course\/index.php?COURSE_ID=43&amp;LESSON_ID=11981\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/a>.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f<\/h2>\n<ol>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong><em><abbr class=\"habraabbr\" title=\"\u041e\u0431\u044a\u0435\u0301\u043a\u0442\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u043b\u0438 \u0441\u0442\u0438\u043b\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432\/\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 \u043a\u0430\u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\" data-title=\"&lt;p>\u0439\u0441\u0442\u0432\u0438\u044f, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 \u043a\u0430\u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f&#187; data-title=&#187;&lt;p>&lt;strong>\u041e\u0431\u044a\u0435\u0301\u043a\u0442\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 &lt;\/strong>&lt;a href=&quot;https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&quot;>&lt;strong>\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0301\u0440\u043e\u0432\u0430\u043d\u0438\u0435&lt;\/strong>&lt;\/a> &amp;nbsp;\u2014 &lt;<\/abbr><\/em><\/strong><\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-378425","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/378425","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=378425"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/378425\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=378425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=378425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=378425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}