{"id":333949,"date":"2022-06-02T09:00:23","date_gmt":"2022-06-02T09:00:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=333949"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=333949","title":{"rendered":"<span>\u041f\u0430\u043c\u044f\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0438 \u0432 Node.js: \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0443\u0442\u0435\u0447\u043a\u0438 \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2 id=\"intro-pochemu-ya-napisal-etu-statyu\">\u0418\u043d\u0442\u0440\u043e: \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e<\/h2>\n<p>  <\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u042f\u043d\u0434\u0435\u043a\u0441\u0430. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0430\u044f \u0432\u044b\u0434\u0430\u0447\u0430 \u2014 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430: \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a \u041a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u041a\u0430\u0440\u0442\u044b, \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a, \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/l1\/1r\/xy\/l11rxyoyarh2sk26elmh94mlan0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/l1\/1r\/xy\/l11rxyoyarh2sk26elmh94mlan0.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0432\u043e\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0441\u0443\u0442\u043a\u0438 \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 JavaScript (TypeScript, ClojureScript \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0432 JavaScript), \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0432\u0438\u0434\u0430\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0438 \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c. \u0412 \u043e\u0442\u0432\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u043a\u0430\u0436\u0443\u0442 \u0432\u0430\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e.<a name=\"habracut\"><\/a><\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"#1\">\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/a><\/li>\n<li><a href=\"#2\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><br \/>  \u3000<a href=\"#21\">Heap<\/a><br \/>  \u3000<a href=\"#22\">Buffer, TypedArray<\/a><br \/>  \u3000<a href=\"#23\">String<\/a><br \/>  \u3000<a href=\"#24\">Map, Set<\/a><br \/>  \u3000<a href=\"#25\">Call stack<\/a><br \/>  \u3000<a href=\"#26\">\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/li>\n<li><a href=\"#3\">Soft-\u0443\u0442\u0435\u0447\u043a\u0438<\/a><br \/>  \u3000<a href=\"#31\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430<\/a><br \/>  \u3000<a href=\"#32\">\u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f soft-\u0443\u0442\u0435\u0447\u043a\u0438 <\/a><br \/>  \u3000<a href=\"#33\">\u041a\u0430\u043a \u0438\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c<\/a><br \/>  \u3000<a href=\"#34\">\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443<\/a><br \/>  \u3000\u3000<a href=\"#341\">1. Memory Allocation Timeline<\/a><br \/>  \u3000\u3000<a href=\"#342\">2. \u0422\u0435\u0445\u043d\u0438\u043a\u0430 \u0442\u0440\u0451\u0445 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432<\/a><br \/>  \u3000\u3000<a href=\"#343\">3. queryObjects<\/a><br \/>  \u3000\u3000<a href=\"#344\">\u0422\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0438<\/a><\/li>\n<li><a href=\"#4\">Hard-\u0443\u0442\u0435\u0447\u043a\u0438<\/a><br \/>  \u3000<a href=\"#41\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430<\/a><br \/>  \u3000<a href=\"#42\">\u041a\u0430\u043a \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f<\/a><\/li>\n<li><a href=\"#5\">\u041d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 Node.js<\/a><br \/>  \u3000<a href=\"#51\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/a><br \/>  \u3000<a href=\"#52\">Module._pathCache<\/a><br \/>  \u3000<a href=\"#53\">\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 node_modules<\/a><br \/>  \u3000<a href=\"#54\">require(&#8216;.\/data.json&#8217;)<\/a><\/li>\n<li><a href=\"#6\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/li>\n<\/ul>\n<p>  <a name=\"1\"><\/a>  <\/p>\n<h2 id=\"kategorii-problem-s-pamyatyu\">\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h2>\n<p>  <\/p>\n<p>JavaScript \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 Java, C# \u0438 Python \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043a \u044f\u0437\u044b\u043a\u0430\u043c \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BC%D1%83%D1%81%D0%BE%D1%80%D0%B0\">\u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 \u0442\u0430\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0442\u0440\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041d\u0435-\u0443\u0442\u0435\u0447\u043a\u0438: \u043a\u043e\u0434 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u2014 \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u044f\u0437\u044b\u043a \u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0431\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u2014 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0438\u0437 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u0436\u0435\u043b\u0435\u0437\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0434.<\/li>\n<li>Soft-\u0443\u0442\u0435\u0447\u043a\u0438 (\u043c\u044f\u0433\u043a\u0438\u0435, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0435\u0447\u043a\u0438): \u0447\u0442\u043e-\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.<\/li>\n<li>Hard-\u0443\u0442\u0435\u0447\u043a\u0438 (\u0436\u0451\u0441\u0442\u043a\u0438\u0435, \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0435\u0447\u043a\u0438): \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438 \u0432\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0438 \u043e\u0442 \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438: \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u0432\u0430 \u00ab\u0443 \u043c\u0435\u043d\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0442\u0435\u0447\u0451\u0442\u00bb \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e \u0436\u0430\u0434\u043d\u043e\u0435 \u0434\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u043e \u0443\u0442\u0435\u0447\u043a\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439: \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u0435\u0451 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c, \u043a\u0430\u043a \u0441 \u043d\u0435\u0439 \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f.<\/p>\n<p>  <a name=\"2\"><\/a>  <\/p>\n<h2 id=\"ogranicheniya-po-pamyati-dlya-raznyh-tipov-dannyh\">\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>  <\/p>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0437\u043d\u0430\u043d\u0438\u044f \u043f\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c \u043c\u0435\u043d\u044f \u043f\u043e\u0431\u0443\u0434\u0438\u043b\u0430 <a href=\"https:\/\/t.me\/gorshochekvarit\/29\">\u044d\u0442\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0430<\/a> \u0420\u043e\u043c\u0430\u043d\u0430 \u0414\u0432\u043e\u0440\u043d\u043e\u0432\u0430.<\/p>\n<p>  <a name=\"21\"><\/a>  <\/p>\n<h3 id=\"heap\">Heap<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430 \u2014 \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u2014 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D1%83%D1%87%D0%B0_(%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C)\">\u043a\u0443\u0447\u0430<\/a>, \u043e\u043d\u0430 \u0436\u0435 heap. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u044f\u0437\u044b\u043a\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 JVM \u2014 Java, Kotlin \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u0443\u0447\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438 \u0434\u0432\u0438\u0436\u043e\u043a JavaScript V8. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0447\u0438 \u2014 \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432 V8 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0438 \u043a\u0443\u0447\u0430 \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/deepu.tech\/memory-management-in-v8\/\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u0412\u043e\u0442 \u0441\u0430\u043c\u0430\u044f \u0446\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043e\u0442\u0442\u0443\u0434\u0430:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zq\/np\/ns\/zqnpnsxj4dqluylrrfyllzchj3q.png\" alt=\"V8 RSS and heap\" data-src=\"https:\/\/habrastorage.org\/webt\/zq\/np\/ns\/zqnpnsxj4dqluylrrfyllzchj3q.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412 Chrome \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Chromium, \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0445\u0438\u043f\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 <code>performance.memory<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">> console.log(performance.memory) MemoryInfo\u00a0{totalJSHeapSize: 10000000, usedJSHeapSize: 10000000, jsHeapSizeLimit: 3760000000}<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Performance\/memory\">\u043d\u0430 MDN<\/a>.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 <a href=\"https:\/\/caniuse.com\/mdn-api_performance_memory\">\u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Can I use<\/a>.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0421 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c <code>performance.memory<\/code> \u0432 Chrome \u0441\u0432\u044f\u0437\u0430\u043d\u0430 <a href=\"https:\/\/www.html5rocks.com\/en\/tutorials\/memory\/effectivemanagement\/\">\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f<\/a>. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u043e\u0441\u0442\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 Gmail \u0432 2010-2012 \u0433\u043e\u0434\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0432\u0441\u0451 \u0447\u0430\u0449\u0435 \u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c. \u0412 Google \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Gmail \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c Chrome \u0438 \u0443\u0431\u0435\u0434\u0438\u043b\u0438 \u0442\u0435\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0437 JS \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 DevTools. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Gmail \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432 \u0441\u0432\u043e\u0451 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0448\u043b\u0438 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0442\u0435\u0447\u0435\u043a. \u0418 \u0432\u043e\u043e\u0431\u0449\u0435 \u2014 \u0432 \u0440\u0430\u0437\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438: \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043d\u0430 \u043c\u0435\u0434\u0438\u0430\u043d\u0435 \u0438 \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u043d\u0430 99-\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0438\u043b\u0438. \u041a\u0440\u043e\u043c\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u0430\u0433\u043e\u0432, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 Gmail \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0430\u0436\u0435 \u0431\u0430\u0433\u0438 \u0432 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0435 \u043c\u0443\u0441\u043e\u0440\u0430 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Chrome (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043d\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445, \u0430 \u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0435 x):<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zx\/r1\/bu\/zxr1bu3lo8wp6ksykkq1b-h6nzs.png\" alt=\"Gmail memory consumption\" data-src=\"https:\/\/habrastorage.org\/webt\/zx\/r1\/bu\/zxr1bu3lo8wp6ksykkq1b-h6nzs.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u2014 Firefox, Safari \u2014 \u043f\u0430\u043c\u044f\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e. \u0412 Firefox \u0434\u0430\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 <code>about:memory<\/code>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u044d\u0442\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0437 \u043a\u043e\u0434\u0430 \u043d\u0430 JS \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0445\u0438\u043f\u0430. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p>  <\/p>\n<p>\u0412 Node.js \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>process.memoryUsage()<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$ node Welcome to Node.js v16.8.0. Type \".help\" for more information. > console.log(process.memoryUsage()) {   rss: 26689536,   heapTotal: 6656000,   heapUsed: 4633936,   external: 893129,   arrayBuffers: 11158 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e <code>process.memoryUsage()<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <a href=\"https:\/\/nodejs.org\/api\/process.html#process_process_memoryusage\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0421 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0445\u0438\u043f\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u0442\u0435\u043f\u0435\u0440\u044c \u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c. \u0412 Chrome \u0438 Node.js \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0438\u043f\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0415\u0441\u043b\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0438\u043f\u0430, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043e\u0442\u0442\u0443\u0434\u0430.<\/li>\n<li>\u0418\u043d\u0430\u0447\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b (32- \u0438\u043b\u0438 64-\u0431\u0438\u0442\u043d\u0430\u044f) \u0438 \u043e\u0431\u044a\u0451\u043c\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0438\u043f\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a (\u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u2014 \u043f\u0438\u0448\u0438\u0442\u0435, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044e):<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u0412\u0435\u0440\u0441\u0438\u044f<\/th>\n<th>Heap size 32-bit<\/th>\n<th>Heap size 64-bit<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js &lt;= 11<\/td>\n<td>700 \u041c\u0411<\/td>\n<td>1400 \u041c\u0411<\/td>\n<\/tr>\n<tr>\n<td>Chrome &lt;= 82, Node.js 12<\/td>\n<td>\u0424\u0438\u0437. \u043f\u0430\u043c\u044f\u0442\u044c \/ 4, \u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 128 \u041c\u0411 \u0438 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 1 \u0413\u0411<\/td>\n<td>\u0424\u0438\u0437. \u043f\u0430\u043c\u044f\u0442\u044c \/ 2, \u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 256 \u041c\u0411 \u0438 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 2 \u0413\u0411<\/td>\n<\/tr>\n<tr>\n<td>Chrome >= 83, Node.js >= 14<\/td>\n<td>\u0421\u043c. \u0432\u044b\u0448\u0435<\/td>\n<td>\u0421\u043c. \u0432\u044b\u0448\u0435. \u0415\u0441\u043b\u0438 \u0444\u0438\u0437. \u043f\u0430\u043c\u044f\u0442\u0438 >= 16 \u0413\u0411, \u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 4 \u0413\u0411<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u0438 \u043b\u043e\u0433\u0438\u043a\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0432 Node.js \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/github.com\/nodejs\/node\/pull\/25576#issuecomment-455737693\">\u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0443<\/a>. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 \u0434\u0432\u0438\u0436\u043a\u0435 V8: <a href=\"https:\/\/source.chromium.org\/chromium\/chromium\/src\/+\/main:v8\/src\/heap\/heap.cc;l=259;drc=18e03c38bb106648f1403e7030161b1c2aaaeb61\">Heap::HeapSizeFromPhysicalMemory<\/a>, <a href=\"https:\/\/source.chromium.org\/chromium\/chromium\/src\/+\/main:v8\/src\/api\/api.cc;l=824;drc=2ffc79b7d4790b7893ecf86bbfd9e3d0153e10b6\">ResourceConstraints::ConfigureDefaults<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f V8, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0445\u0438\u043f\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$ node --v8-options | grep -- -size   \u2026   --min-semi-space-size (min size of a semi-space (in MBytes), the new space consists of two semi-spaces)   --max-semi-space-size (max size of a semi-space (in MBytes), the new space consists of two semi-spaces)   --max-old-space-size (max size of the old space (in Mbytes))   --max-heap-size (max size of the heap (in Mbytes) both max_semi_space_size and max_old_space_size take precedence. All three flags cannot be specified at the same time.)   --initial-heap-size (initial size of the heap (in Mbytes))   --huge-max-old-generation-size (Increase max size of the old space to 4 GB for x64 systems withthe physical memory bigger than 16 GB)   --initial-old-space-size (initial old space size (in Mbytes))   \u2026   --stack-size (default size of stack region v8 is allowed to use (in kBytes))<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0438 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2014 \u044d\u0442\u043e <code>--max-old-space-size<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 Old Space. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 32 \u0413\u0411) \u0438 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 4 \u0413\u0411, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0435\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">node --max-old-space-size=8000 index.js<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0435\u0441\u043b\u0438 Node.js \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 Docker, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/454522\/\">\u0432 \u044d\u0442\u043e\u0439 \u0445\u0430\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<p>  <a name=\"22\"><\/a>  <\/p>\n<h3 id=\"buffer-typedarray\">Buffer, TypedArray<\/h3>\n<p>  <\/p>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0438\u043b\u0438 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 Node.js \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 <a href=\"https:\/\/nodejs.org\/api\/buffer.html#buffer_buffer_constants\">\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439<\/a>. \u0421\u0430\u043c\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 Node.js v8.2.0, \u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u0437\u043d\u0430\u044e.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">require('buffer').constants.MAX_LENGTH<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438 Node.js:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u0412\u0435\u0440\u0441\u0438\u044f Node.js<\/th>\n<th>32-bit<\/th>\n<th>64-bit<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>8.2.0\u202613<\/td>\n<td>2**30-1 (~1 \u0413\u0411)<\/td>\n<td>2**31-1 (~2 \u0413\u0411)<\/td>\n<\/tr>\n<tr>\n<td>14<\/td>\n<td>2**30-1 (~1 \u0413\u0411)<\/td>\n<td>2**32-1 (~4 \u0413\u0411)<\/td>\n<\/tr>\n<tr>\n<td>15\u202616<\/td>\n<td>2**30-1 (~1 \u0413\u0411)<\/td>\n<td>2**32 (4 \u0413\u0411)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">\/\/ Node.js v12 64-bit  new Int8Array(2**31-1) \/\/ Int8Array(2147483647)  new Int8Array(2**31) \/\/ Uncaught RangeError: Invalid typed array length: 2147483648 \/\/     at new Int8Array (&lt;anonymous>)  new Uint32Array(2**31-1) \/\/ Uint32Array(2147483647)  new Uint32Array(2**31) \/\/ Uncaught RangeError: Invalid typed array length: 2147483648 \/\/     at new Uint32Array (&lt;anonymous>)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 Chrome. \u0412 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 V8 \u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u044b \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <a href=\"https:\/\/source.chromium.org\/chromium\/chromium\/src\/+\/main:v8\/include\/v8-typed-array.h;l=25\">v8::TypedArray::kMaxLength<\/a>:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">  \/*    * The largest typed array size that can be constructed using New.    *\/   static constexpr size_t kMaxLength =       internal::kApiSystemPointerSize == 4           ? internal::kSmiMaxValue                  \/\/ 2147483647 (\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e)           : static_cast&lt;size_t>(uint64_t{1} &lt;&lt; 32); \/\/ 4294967296<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, <code>v8::TypedArray::kMaxLength<\/code> \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 JS. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u044f \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438: \u0432 Node.js \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 14 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>JSArrayBuffer::kMaxByteLength<\/code> \u0438 <code>JSTypedArray::kMaxLength<\/code> (\u043e\u043d\u043e \u0440\u0430\u0432\u043d\u043e <code>v8::TypedArray::kMaxLength<\/code>) <a href=\"https:\/\/github.com\/nodejs\/node\/blob\/8a3f28a05cd22dbdeb9233386344c47c936896e2\/deps\/v8\/src\/runtime\/runtime-test.cc#L1376-L1386\">\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b<\/a> \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 <code>--allow-natives-syntax<\/code> \u0432 \u0432\u0438\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>%ArrayBufferMaxByteLength()<\/code> \u0438 <code>%TypedArrayMaxLength()<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$ nvm use v16 &amp;&amp; node --allow-natives-syntax Welcome to Node.js v16.8.0. Type \".help\" for more information. > %ArrayBufferMaxByteLength() 9007199254740991 > %TypedArrayMaxLength() 4294967296 > .exit  $ nvm use v14 &amp;&amp; node --allow-natives-syntax Welcome to Node.js v14.17.5. Type \".help\" for more information. > %ArrayBufferMaxByteLength() 9007199254740991 > %TypedArrayMaxLength() 4294967295 > .exit  $ nvm use v12 &amp;&amp; node --allow-natives-syntax Welcome to Node.js v12.18.1. Type \".help\" for more information. > %ArrayBufferMaxByteLength() %ArrayBufferMaxByteLength()                           ^ Uncaught SyntaxError: ArrayBufferMaxByteLength is not defined > %TypedArrayMaxLength() %TypedArrayMaxLength()                      ^ Uncaught SyntaxError: TypedArrayMaxLength is not defined > .exit<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0443 Chrome. \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439, \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u044e\u0449\u0435\u0439 <code>v8::TypedArray::kMaxLength<\/code>, \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">> new Int8Array(2**33) Uncaught RangeError: Invalid typed array length: 8589934592<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439, \u043d\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">> new Int8Array(2**32) Uncaught RangeError: Array buffer allocation failed<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 Firefox \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 <a href=\"https:\/\/searchfox.org\/mozilla-central\/rev\/da6a85e615827d353e5ca0e05770d8d346b761a9\/js\/src\/vm\/TypedArrayObject.h#135\"><code>maxByteLength()<\/code><\/a> \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0432\u043d\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 <a href=\"https:\/\/searchfox.org\/mozilla-central\/rev\/da6a85e615827d353e5ca0e05770d8d346b761a9\/js\/src\/vm\/ArrayBufferObject.h#191\">ArrayBufferObject::maxBufferByteLength()<\/a>. \u0412 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043e\u043d \u0440\u0430\u0432\u0435\u043d 8 \u0413\u0411, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u2014 2 \u0413\u0411 (2147483647, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 <code>INT32_MAX<\/code>). \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a <code>maxByteLength() \/ BYTES_PER_ELEMENT<\/code>, \u043f\u0440\u0438\u0447\u0451\u043c \u044d\u0442\u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u044b \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/searchfox.org\/mozilla-central\/rev\/da6a85e615827d353e5ca0e05770d8d346b761a9\/js\/src\/vm\/TypedArrayObject.cpp#431\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/searchfox.org\/mozilla-central\/rev\/da6a85e615827d353e5ca0e05770d8d346b761a9\/js\/src\/vm\/TypedArrayObject.cpp#512\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u041a\u0430\u043a \u0438 \u0432 Chrome, \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438\u0437 JS.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u0434\u043b\u0438\u043d\u044b <code>N<\/code> \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 Node.js \u0438 Chrome \u0447\u0438\u0441\u043b\u043e <code>N<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u0448\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0435 \u0438 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0443 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a):<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/th>\n<th>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js<\/td>\n<td>RangeError: Invalid typed array length: N<\/td>\n<\/tr>\n<tr>\n<td>Chrome<\/td>\n<td>RangeError: Invalid typed array length: N<\/td>\n<\/tr>\n<tr>\n<td>Chrome<\/td>\n<td>RangeError: Array buffer allocation failed<\/td>\n<\/tr>\n<tr>\n<td>Safari<\/td>\n<td>Error: Out of memory<\/td>\n<\/tr>\n<tr>\n<td>Firefox<\/td>\n<td>RangeError: invalid array length<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/jsfiddle.net\/woscyp86\/3\/\">\u044d\u0442\u043e\u0433\u043e<\/a> \u0438 <a href=\"https:\/\/jsfiddle.net\/5a4r9j3y\/\">\u044d\u0442\u043e\u0433\u043e<\/a> \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b <code>Int8Array<\/code> \u0438 <code>Int32Array<\/code>:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u0412\u0435\u0440\u0441\u0438\u044f<\/th>\n<th>\u041c\u0430\u043a\u0441. \u0434\u043b\u0438\u043d\u0430 <code>Int8Array<\/code><\/th>\n<th>\u041c\u0430\u043a\u0441. \u0434\u043b\u0438\u043d\u0430 <code>Int32Array<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Chrome 99\u2026102 MacOS \u0438 Windows<\/td>\n<td>2_145_386_496 (2**31-2_097_152, ~2 \u0413\u0411)<\/td>\n<td>536_346_624 (2**29-524_288, ~512 \u041c\u0411)<\/td>\n<\/tr>\n<tr>\n<td>Chrome 99 Android<\/td>\n<td>1_073_741_823 (2**30-1, ~1 \u0413\u0411)<\/td>\n<td>334_082_048<\/td>\n<\/tr>\n<tr>\n<td>Safari 13 MacOS<\/td>\n<td>2_147_483_647 (2**31-1, ~2 \u0413\u0411)<\/td>\n<td>536_870_911 (2**29-1, ~512 \u041c\u0411)<\/td>\n<\/tr>\n<tr>\n<td>Firefox 96\u2026100 MacOS \u0438 Windows<\/td>\n<td>8_589_934_592 (2**33, 8 \u0413\u0411)<\/td>\n<td>2_147_483_648 (2**31, 2 \u0413\u0411)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u043a\u0440\u043e\u043c\u0435 Chrome Android \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 <code>Int32Array<\/code> \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u043b\u0438\u043d\u044b <code>Int8Array<\/code> (Int8 \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, Int32 \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 Int32 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 Int8). \u0412 Chrome Android \u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.<\/p>\n<p>  <a name=\"23\"><\/a>  <\/p>\n<h3 id=\"string\">String<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/String\/length\">length<\/a>. \u0412 Node.js \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>length<\/code> \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e <a href=\"https:\/\/nodejs.org\/api\/buffer.html#buffer_buffer_constants\">\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439<\/a>.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">require('buffer').constants.MAX_STRING_LENGTH<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u043a\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0438\u0441\u043b\u043e \u0432 \u043f\u043e\u043b\u0435 <code>length<\/code> (\u0432 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0435 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e UTF-16 code units). \u0420\u0430\u0437\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 code units:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">console.log('Z'.length); \/\/ 1 console.log('\u042f'.length); \/\/ 1 console.log('?'.length); \/\/ 2<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043e\u0434\u0438\u043d code point (\u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0430) \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 code unit, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/262.ecma-international.org\/7.0\/#sec-utf16encoding\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 ES2016<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/jsfiddle.net\/2mL7os5r\/5\/\">\u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/a> \u0438 \u0441\u0432\u0451\u043b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u0412\u0435\u0440\u0441\u0438\u044f<\/th>\n<th><code>string.length<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js 12<\/td>\n<td>1_073_741_799 (2**30-25, ~1 \u0413\u0411)<\/td>\n<\/tr>\n<tr>\n<td>Node.js 16<\/td>\n<td>536_870_888 (2**29-24, ~512 \u041c\u0411)<\/td>\n<\/tr>\n<tr>\n<td>Chrome 94\u2026101 MacOS \u0438 Windows<\/td>\n<td>536_870_888 (2**29-24, ~512 \u041c\u0411)<\/td>\n<\/tr>\n<tr>\n<td>Chrome 94 Android<\/td>\n<td>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 250 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445 \u043d\u0430 \u043c\u043e\u0451\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u043a\u043b\u0430\u0434\u043a\u0430 \u0438\u043b\u0438 \u0432\u0435\u0441\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/td>\n<\/tr>\n<tr>\n<td>Safari 13<\/td>\n<td>2_147_483_647 (2**31-1, ~2 \u0413\u0411)<\/td>\n<\/tr>\n<tr>\n<td>Firefox &lt;= 64<\/td>\n<td>268_435_455 (2**28-1, ~256 \u041c\u0411)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/searchfox.org\/mozilla-central\/rev\/da6a85e615827d353e5ca0e05770d8d346b761a9\/js\/public\/String.h#330\">Firefox >= 65<\/a><\/td>\n<td>1_073_741_822 (2**30-2, ~1 \u0413\u0411)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/262.ecma-international.org\/7.0\/#sec-ecmascript-language-types-string-type\">\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f ES2016<\/a><\/td>\n<td>9_007_199_254_740_991 (2**53-1)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u0414\u0432\u0430 \u0432\u0430\u0436\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0412 Node.js 16 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 <strong>\u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0430\u0441\u044c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430<\/strong> \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u2014 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 Node.js.<\/li>\n<li><a href=\"https:\/\/262.ecma-international.org\/7.0\/#sec-ecmascript-language-types-string-type\">\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f ES2016<\/a> \u044f\u0432\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0447\u0438\u0441\u043b\u043e\u043c, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u043c \u0441 <a href=\"https:\/\/262.ecma-international.org\/7.0\/#sec-number.max_safe_integer\">Number.MAX_SAFE_INTEGER<\/a>.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 Node.js \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0432\u044b\u0434\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/th>\n<th>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js, Chrome<\/td>\n<td>RangeError: Invalid string length<\/td>\n<\/tr>\n<tr>\n<td>Safari<\/td>\n<td>Error: Out of memory<\/td>\n<\/tr>\n<tr>\n<td>Firefox<\/td>\n<td>InternalError: allocation size overflow<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <a name=\"24\"><\/a>  <\/p>\n<h3 id=\"map-set\">Map, Set<\/h3>\n<p>  <\/p>\n<p>\u0412 V8 (\u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0435\u0433\u043e Node.js \u0438 Chrome) \u0435\u0441\u0442\u044c \u0436\u0451\u0441\u0442\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 <code>Map<\/code> \u0438 <code>Set<\/code>. \u041f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0412 Node.js \u0435\u0451 \u0442\u0435\u043a\u0441\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u2014 \u0441\u043c. \u0434\u0430\u043b\u0435\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<\/p>\n<p>  <\/p>\n<p>\u0411\u0440\u0430\u0443\u0437\u0435\u0440 Firefox \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043b\u0438\u043c\u0438\u0442\u043e\u0432 <a href=\"https:\/\/searchfox.org\/mozilla-central\/rev\/da6a85e615827d353e5ca0e05770d8d346b761a9\/js\/src\/ds\/OrderedHashTable.h#189\">\u043d\u0435 \u0438\u043c\u0435\u0435\u0442<\/a>. \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <code>Map<\/code> \u0438 <code>Set<\/code> \u043e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0441\u0451 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u00about of memory\u00bb. \u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u0434\u0430 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043e\u043a\u043d\u0435 \u043e\u043d \u0435\u0449\u0451 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442, \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041a\u0441\u0442\u0430\u0442\u0438, \u00about of memory\u00bb \u2014 \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>Error<\/code> \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a&#8230;<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">throw new Error(\"out of memory\");<\/code><\/pre>\n<p>  <\/p>\n<p>\u2026 \u0430 <a href=\"https:\/\/searchfox.org\/mozilla-central\/rev\/da6a85e615827d353e5ca0e05770d8d346b761a9\/js\/src\/vm\/JSContext.cpp#265\">\u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 JavaScript \u043c\u043e\u0436\u043d\u043e \u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">throw \"out of memory\";<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0438\u0437 \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0435\u043a \u0438 \u043f\u0440\u0438\u0439\u0442\u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u2014 \u043f\u043e\u043b\u0435 <code>stack<\/code> \u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0411\u0440\u0430\u0443\u0437\u0435\u0440 Safari \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 Firefox \u2014 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043b\u0438\u043c\u0438\u0442\u043e\u0432, \u0442\u043e\u0436\u0435 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <code>Map<\/code> \u0438 <code>Set<\/code> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0441\u0451 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u044f \u0442\u0430\u043a \u043d\u0438 \u0440\u0430\u0437\u0443 \u0438 \u043d\u0435 \u0441\u043c\u043e\u0433.<\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0438\u0437 JS \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0439 \u044f \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/jsfiddle.net\/p4krbzdt\/\">\u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/a>:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u0412\u0435\u0440\u0441\u0438\u044f<\/th>\n<th>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 Map \u0438 Set<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js 12\u202616<\/td>\n<td>16_777_216 (2**24)<\/td>\n<\/tr>\n<tr>\n<td>Chrome 94\u2026101 MacOS \u0438 Windows<\/td>\n<td>16_777_216 (2**24)<\/td>\n<\/tr>\n<tr>\n<td>Chrome 101 Android<\/td>\n<td>16_777_216 (2**24)<\/td>\n<\/tr>\n<tr>\n<td>Safari 13<\/td>\n<td>>15_000_000 (\u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442)<\/td>\n<\/tr>\n<tr>\n<td>Firefox 92\u202696 MacOS \u0438 Windows<\/td>\n<td>>131_000_000 (\u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 Node.js \u0438 Chrome \u0438 \u043f\u0440\u0438 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 Firefox \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/th>\n<th>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js<\/td>\n<td>RangeError: Value undefined out of range for undefined options property undefined<\/td>\n<\/tr>\n<tr>\n<td>Chrome<\/td>\n<td>RangeError: Map maximum size exceeded<\/td>\n<\/tr>\n<tr>\n<td>Chrome<\/td>\n<td>RangeError: Set maximum size exceeded<\/td>\n<\/tr>\n<tr>\n<td>Safari<\/td>\n<td>(\u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442, \u043d\u0435 \u0434\u043e\u0436\u0434\u0430\u043b\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438)<\/td>\n<\/tr>\n<tr>\n<td>Firefox<\/td>\n<td>out of memory<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <a name=\"25\"><\/a>  <\/p>\n<h3 id=\"call-stack\">Call stack<\/h3>\n<p>  <\/p>\n<p>\u0413\u043b\u0443\u0431\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 (\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c) \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0436\u0451\u0441\u0442\u043a\u043e \u043d\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041e\u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u2014 \u043e\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0441\u0442\u0435\u043a\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 Chrome \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 small int \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441 13 000 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u043e 9000 (\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043b\u0430\u0432\u0430\u044e\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u00b110% \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443).<\/li>\n<li>\u041e\u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (<code>fn()<\/code>, <code>fn.call()<\/code>, <code>fn.apply()<\/code>). \u0412 <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=966173#c20\">\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442\u0443 \u0432 Firefox<\/a> \u043e\u0442\u043c\u0435\u0447\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u043d\u043e\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 Firefox \u043f\u043e\u0434 Linux \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>fn.call()<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>fn()<\/code> \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441 7000-40 000 \u0432\u0441\u0435\u0433\u043e \u0434\u043e 500. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 <code>fn.call()<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>fn()<\/code>.<\/li>\n<li>\u0412 Firefox \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 (\u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438) \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u0435\u043d\u044c\u0448\u0435. \u041f\u043e\u0442\u043e\u043c (\u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438) \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u0432 <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=966173#c24\">\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/a>). \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u2014 Firefox \u0432\u0438\u0434\u0438\u0442 \u043a\u043e\u0434 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438, \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0431\u0430\u0433.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 Node.js \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0432\u044b\u0434\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/th>\n<th>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js, Chrome<\/td>\n<td>RangeError: Maximum call stack size exceeded<\/td>\n<\/tr>\n<tr>\n<td>Safari<\/td>\n<td>RangeError: Maximum call stack size exceeded<\/td>\n<\/tr>\n<tr>\n<td>Firefox<\/td>\n<td>InternalError: too much recursion<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430 \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/jsfiddle.net\/zw8fdh0q\/1\/\">\u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/a> \u0438, \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u0432 (\u043f\u043e\u0432\u0442\u043e\u0440\u044e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443), \u0441\u0432\u0451\u043b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>\u0411\u0440\u0430\u0443\u0437\u0435\u0440<\/th>\n<th><code>fn()<\/code> \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/th>\n<th><code>fn(a, b, c, d, e)<\/code><\/th>\n<th><code>fn.call(this)<\/code> \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/th>\n<th><code>fn.call(this, a, b, c, d, e)<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Node.js 12 MacOS 10.15<\/td>\n<td>15 700<\/td>\n<td>7000<\/td>\n<td>14 000<\/td>\n<td>6300<\/td>\n<\/tr>\n<tr>\n<td>Node.js 16 MacOS 10.15<\/td>\n<td>14 000<\/td>\n<td>6600<\/td>\n<td>12 600<\/td>\n<td>6000<\/td>\n<\/tr>\n<tr>\n<td>Chrome 97 Android<\/td>\n<td>24 500<\/td>\n<td>11 600<\/td>\n<td>22 100<\/td>\n<td>10 500<\/td>\n<\/tr>\n<tr>\n<td>Chrome 96 \u0438 97 MacOS 10.15<\/td>\n<td>13 900<\/td>\n<td>6600<\/td>\n<td>12 500<\/td>\n<td>6000<\/td>\n<\/tr>\n<tr>\n<td>Chrome 96 \u0438 97 Windows 10<\/td>\n<td>13 900<\/td>\n<td>6600<\/td>\n<td>12 500<\/td>\n<td>6000<\/td>\n<\/tr>\n<tr>\n<td>Safari 13 MacOS<\/td>\n<td>36 000<\/td>\n<td>25 000<\/td>\n<td>28 000<\/td>\n<td>23 000<\/td>\n<\/tr>\n<tr>\n<td>Safari 15 iOS<\/td>\n<td>7900<\/td>\n<td>5500<\/td>\n<td>6200<\/td>\n<td>5000<\/td>\n<\/tr>\n<tr>\n<td>Firefox 96 MacOS 10.15 (\u043d\u0435\u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044b\u0439 \u043a\u043e\u0434)<\/td>\n<td>25 100<\/td>\n<td>11 500<\/td>\n<td>18 400<\/td>\n<td>12 100<\/td>\n<\/tr>\n<tr>\n<td>Firefox 96 MacOS 10.15 (\u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044b\u0439 \u043a\u043e\u0434)<\/td>\n<td>39 400<\/td>\n<td>23 600<\/td>\n<td>29 600<\/td>\n<td>19 700<\/td>\n<\/tr>\n<tr>\n<td>Firefox 96 Windows 10 (\u043d\u0435\u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044b\u0439 \u043a\u043e\u0434)<\/td>\n<td>26 500<\/td>\n<td>10 100<\/td>\n<td>9700<\/td>\n<td>8700<\/td>\n<\/tr>\n<tr>\n<td>Firefox 96 Windows 10 (\u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044b\u0439 \u043a\u043e\u0434)<\/td>\n<td>39 400<\/td>\n<td>23 600<\/td>\n<td>29 500<\/td>\n<td>19 700<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u044b, \u0432\u0430\u0436\u043d\u0435\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0447\u0438\u0441\u0435\u043b \u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0441\u0447\u0451\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438\u0434\u0451\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432 (\u0432\u0440\u043e\u0434\u0435 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u0432 Firefox) \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0430\u0439\u0442\u044b \u0438 SPA \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 500.<\/p>\n<p>  <\/p>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f X \u043d\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Y \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 N. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u0438\u043a\u0440\u0430\u0442\u043d\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432: \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 > \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 > \u0448\u0430\u043f\u043a\u0430 > \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e > \u043f\u043e\u043f\u0430\u043f > \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u043f\u0446\u0438\u0439 > \u043e\u043f\u0446\u0438\u044f > \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u043d\u044e > \u043f\u043e\u043f\u0430\u043f > \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0440\u0435\u043d\u0434\u0435\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Y \u0442\u0440\u0435\u0431\u0443\u044e\u0442 M \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <code>N*M<\/code> \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u0425\u0430\u0431\u0440\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f N \u0438 M \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0435\u0441\u044f\u0442\u0438\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0437\u0430\u043f\u0430\u0441 \u043f\u043e \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430, \u043d\u043e \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u043b\u0438 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u0434) \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u044a\u0435\u0441\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0430\u0441. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430. \u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043c\u043e\u0438\u0445 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u043c\u0435\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0441\u043b\u0443\u0436\u0431\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0433 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448\u0435 SPA \u0432 Internet Explorer. \u042f \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0432 \u043b\u043e\u0433\u0430\u0445 \u0443\u0432\u0438\u0434\u0435\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430, \u0438\u0437\u043c\u0435\u0440\u0438\u043b \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2014 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u043a\u043e\u043b\u043e 270 (\u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u2014 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Windows). \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430: \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u043b\u043e\u0433\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430\u0445. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0430\u043c\u044b\u0445 \u043d\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0432\u0440\u043e\u0434\u0435 Huawei Y5 Lite, Huawei Honor 6A, Samsung Galaxy J2, Samsung Galaxy J5, Alcatel 1 5033D, BQ BQ-5035, BQ BQ-5514 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u043f\u0440\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0444\u0442\u043e\u043f\u0438\u043a: \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043c\u0435\u0434\u0438\u0430\u043d\u043d\u0430\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u0430, \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432) \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b DOM-\u0434\u0435\u0440\u0435\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0451\u0440\u0441\u0442\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>  <a name=\"26\"><\/a>  <\/p>\n<h3 id=\"tipichnye-zadachi-v-kotoryh-mozhno-natknutsya-na-ogranicheniya-po-pamyati\">\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>  <\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435 \u043f\u043e\u043b\u043e\u043d. \u0421\u0432\u043e\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p>  <\/p>\n<ol>\n<li>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0432 Node.js \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041d\u0430\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438,<\/li>\n<li>\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0447\u0438\u0442\u0430\u0435\u043c \u0444\u0430\u0439\u043b (<code>Buffer<\/code> \u0438\u043b\u0438 <code>String<\/code>).<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438 \u0438\/\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 (\u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438, \u0447\u0430\u043d\u043a\u0430\u043c\u0438).<\/p>\n<p>  <\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 JSON \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>JSON.stringify()<\/code> \u0438 <code>JSON.parse()<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0438\u043b\u0438, \u043a\u0430\u043a \u0435\u0449\u0451 \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f. \u041d\u0430\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0439 \u0443\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f),<\/li>\n<li>\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 Node.js 16 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 600 \u041c\u0411 \u0434\u0430\u043d\u043d\u044b\u0445).<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0443\u043d\u043a\u0442\u0435, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b <a href=\"https:\/\/www.npmjs.com\/package\/@discoveryjs\/json-ext\">@discoveryjs\/json-ext<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/json-stream-stringify\">json-stream-stringify<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/big-json\">big-json<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0432 Webpack 4 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>webpack-cli<\/code> \u0432\u0435\u0440\u0441\u0438\u0439 4.2.0 \u0438 \u043d\u0438\u0436\u0435 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0431\u043e\u0440\u043a\u0435 (\u0444\u0430\u0439\u043b <code>stats.json<\/code>). \u041a\u043e\u0434 \u0437\u0430\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u0430 <code>fs.writeFileSync(dest, JSON.stringify(stats.toJson(\u2026)))<\/code> \u0443\u043f\u0438\u0440\u0430\u043b\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 <code>JSON.stringify()<\/code>. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 <code>webpack-cli@4.3.0<\/code> <a href=\"https:\/\/github.com\/webpack\/webpack-cli\/pull\/2190\">\u0432 \u044d\u0442\u043e\u043c \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0435<\/a>.<\/p>\n<p>  <\/li>\n<li>\n<p>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">const parentObj = {value: 'long string'}; const items = [    {parent: parentObj, data: 1},    {parent: parentObj, data: 2},    {parent: parentObj, data: 3} ];<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u0430\u0441\u0441\u0438\u0432 <code>items<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u0432 \u043f\u043e\u043b\u0435 <code>parent<\/code> \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 <code>parentObj<\/code>, \u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438: \u0432\u0441\u0435 <code>parent<\/code> \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 <code>parentObj<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442 <code>parentObj<\/code> \u0438 <code>items.length<\/code> \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043d\u0435\u0433\u043e. \u041f\u0440\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u00ab\u0432\u0437\u0440\u044b\u0432\u00bb: \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>parentObj<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">JSON.stringify(items); \/\/ '[{\"parent\":{\"value\":\"long string\"},\"data\":1},{\"parent\":{\"value\":\"long string\"},\"data\":2},{\"parent\":{\"value\":\"long string\"},\"data\":3}]'<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0432\u043c\u0435\u0441\u0442\u0435: \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0438 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435. \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043e\u0442\u0434\u0430\u0451\u043c \u0438 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443, \u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0433\u0438\u0434\u0440\u0430\u0446\u0438\u044e \u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430,<\/li>\n<li>\u0432 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u043e\u043c \u043a\u043e\u0434\u0435 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0438 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435,<\/li>\n<li>\u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0433\u0438\u0434\u0440\u0430\u0446\u0438\u0438 \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 AJAX \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e JSON \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c (\u043f\u043e\u0441\u043b\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 AJAX-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f JSON \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442).<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>map(function(element, index, array) { \/* \u2026 *\/ })<\/code> \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <code>array<\/code> \u0432 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441 \u043d\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0427\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">const array = [\/* \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0445 *\/]; for (let i = 0; i &lt; array.length; i++) {    \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0438\u0448\u0435\u043c \u0432 \u0442\u043e\u0442 \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430    array[i] = processElement(array[i], i); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u044e\u0434\u0430 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 spread <code>const array2 = [...array]<\/code> \u0438 rest <code>const [a0, a1, ...array2] = array<\/code> \u2014 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <code>array<\/code> \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 <code>array2<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f: \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043d\u0435 \u0441\u043f\u0435\u0448\u0430 \u0434\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0447\u0435\u043d\u044c, \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u041d\u0435 \u043d\u0430\u0434\u043e \u0441\u0440\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0435 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0422\u0432\u0438\u0442\u0442\u0435\u0440\u0435, \u0447\u0442\u043e \u00abmap() \u0441\u0436\u0438\u0440\u0430\u0435\u0442 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 \u0446\u0438\u043a\u043b for(;;)\u00bb. \u041d\u0435 \u043d\u0430\u0434\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>map<\/code>, <code>filter<\/code>, <code>reduce<\/code> \u0438 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438. \u041d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 in-place, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430,<\/li>\n<li>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 (\u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438),<\/li>\n<li>\u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u0435\u043a <code>.map().filter().reduce()<\/code> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434,<\/li>\n<li>\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0438\u0437 \u0442\u0430\u043a\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/lodash.com\/docs\/4.17.15#lodash\">\u043b\u0435\u043d\u0438\u0432\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438\u0437 Lodash<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/simplectic.com\/blog\/2015\/ramda-transducers-logs\/\">\u0442\u0440\u0430\u043d\u0441\u0434\u044c\u044e\u0441\u0435\u0440\u044b \u0438\u0437 Ramda<\/a>.<\/li>\n<\/ul>\n<p>  <\/li>\n<\/ol>\n<p>  <a name=\"3\"><\/a>  <\/p>\n<h2 id=\"soft-utechki\">Soft-\u0443\u0442\u0435\u0447\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430, \u0447\u0442\u043e \u0432 \u043a\u043e\u0434\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u043c\u0435\u043d\u043d\u043e soft-\u0443\u0442\u0435\u0447\u043a\u0430:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u0442\u0451\u0442. \u042d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a: \u043a\u043e\u0434 \u0431\u0435\u0437 \u0443\u0442\u0435\u0447\u043a\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0432\u0441\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u0431\u0440\u0430\u043b, \u0430 \u043a\u043e\u0434 \u0441 \u0443\u0442\u0435\u0447\u043a\u043e\u0439 \u2014 \u043d\u0435\u0442. \u0420\u043e\u0441\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u043e \u043f\u0440\u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u043c \u043d\u0430\u0432\u044b\u043a\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0438\u0436\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u044a\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u0430\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430, \u0438 \u044d\u0442\u043e\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438. \u0414\u043b\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0443 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li>\u0423\u0442\u0435\u0447\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430 \u0436\u0438\u0432\u0451\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c node \u2014 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f. \u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 soft-\u0443\u0442\u0435\u0447\u0435\u043a \u043e\u0442 hard-\u0443\u0442\u0435\u0447\u0435\u043a, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435.<br \/>  <a name=\"31\"><\/a><br \/> <br \/>\n<h3 id=\"primer-iz-prodakshena\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430<\/h3>\n<\/li>\n<\/ol>\n<p>  <\/p>\n<p>20 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0440\u0435\u043b\u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043f\u0430\u043b \u043a\u043e\u0434 \u0441 \u0443\u0442\u0435\u0447\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 Node.js. \u0423\u0442\u0435\u0447\u043a\u0430 \u0431\u044b\u043b\u0430 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043b\u044c\u043d\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u0443\u0441\u043f\u0435\u0432\u0430\u043b \u0441\u044a\u0435\u0441\u0442\u044c \u0432\u0441\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0443\u043f\u0430\u0441\u0442\u044c \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043b\u0438\u0437\u0430, \u0438 \u0441\u0442\u0430\u043b\u0430 \u0437\u0430\u043c\u0435\u0442\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0431\u043e\u0435\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445. \u041e\u043d\u0430 \u043f\u0440\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u0442\u0440\u0451\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jj\/nq\/wi\/jjnqwi_bagq3l3b_z9ajmgsbl4i.png\" alt=\"Worker exit events\" data-src=\"https:\/\/habrastorage.org\/webt\/jj\/nq\/wi\/jjnqwi_bagq3l3b_z9ajmgsbl4i.png\"\/><br \/>  <sup>\u0413\u0440\u0430\u0444\u0438\u043a 1. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u044b\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0439 Node.js \u0432 \u0447\u0430\u0441<\/sup><\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0434\u0435\u0436\u0443\u0440\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0430\u0434\u0435\u043d\u0438\u0439 Node.js. \u041f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0431\u044b\u043b\u0438 \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u043f\u0438\u043a\u043e\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0435\u0441\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 node \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043c\u044b \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c) \u0438 \u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0431\u043e\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0441\u044f\u0442 \u0432\u044b\u0434\u0430\u0447\u0443 \u042f\u043d\u0434\u0435\u043a\u0441\u0430, \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u043f\u043e 50-100 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443), \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b Node.js \u0441\u0442\u0430\u043b\u0438 \u043f\u0430\u0434\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u0436\u0435 \u043d\u043e\u0447\u044c\u044e, \u043a\u043e\u0433\u0434\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/up\/jw\/ml\/upjwmlwe_6jqd4divnecssnm1us.png\" alt=\"GC minor count\" data-src=\"https:\/\/habrastorage.org\/webt\/up\/jw\/ml\/upjwmlwe_6jqd4divnecssnm1us.png\"\/><br \/>  <sup>\u0413\u0440\u0430\u0444\u0438\u043a 2. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a \u043c\u0443\u0441\u043e\u0440\u0430 (minor GC) \u0432 \u0447\u0430\u0441<\/sup><\/p>\n<p>  <\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0438\u043d\u043e\u0440\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430 \u0441\u0442\u0430\u043b\u0438 \u0447\u0430\u0449\u0435. Minor GC \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0432 young space \u2014 \u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0443\u0447\u0438, \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0441\u0432\u0435\u0436\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0413\u0440\u0430\u0444\u0438\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043d\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 (\u0440\u043e\u0441\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0443\u0442\u0435\u0447\u043a\u0430).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/1t\/pw\/6v\/1tpw6vi79qxlchwd6yyhqkjg-ou.png\" alt=\"Heap used p95\" data-src=\"https:\/\/habrastorage.org\/webt\/1t\/pw\/6v\/1tpw6vi79qxlchwd6yyhqkjg-ou.png\"\/><br \/>  <sup>\u0413\u0440\u0430\u0444\u0438\u043a 3. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0443\u0447\u0438 (<code>process.memoryUsage().heapUsed<\/code>) \u043d\u0430 \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 Node.js, 95-\u044f \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0438\u043b\u044c, \u0432 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445<\/sup><\/p>\n<p>  <\/p>\n<p>\u0418\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0443\u0442\u0435\u0447\u043a\u0435, \u0430 \u043d\u0435 \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u044b \u0438 \u0441\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 (\u043b\u044e\u0434\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u043d\u0451\u043c \u0438 \u0441\u043f\u044f\u0442 \u043d\u043e\u0447\u044c\u044e), \u0438 \u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0435 (\u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u2014 \u043b\u044e\u0434\u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u0442\u0434\u044b\u0445\u0430\u044e\u0442, \u0441\u043c\u043e\u0442\u0440\u044f\u0442 \u0432\u0438\u0434\u0435\u043e, \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0435\u0434\u044b&#8230;), \u0438 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f \u0438\u0437-\u0437\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437, \u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u044b \u043f\u043e \u043d\u043e\u0447\u0430\u043c, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432 \u043d\u043e\u0447\u044c \u043d\u0430 21 \u0447\u0438\u0441\u043b\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u0442\u0430\u043b \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0432\u044b\u0448\u0435 \u0438 \u043a\u043e\u0440\u043e\u0447\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0430\u0441\u044c, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u2014 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0443\u0442\u0435\u0447\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <a name=\"32\"><\/a>  <\/p>\n<h3 id=\"kak-poluchayutsya-soft-utechki\">\u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f soft-\u0443\u0442\u0435\u0447\u043a\u0438<\/h3>\n<p>  <\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e: \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0441\u0440\u043e\u043a\u043e\u0432 \u0436\u0438\u0437\u043d\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 (\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u0443\u0434\u0430\u043b\u0438\u0442\u044c). \u042d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<p>  <\/p>\n<ol>\n<li><em>\u041d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439<\/em> \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/li>\n<li>\u0414\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <em>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f<\/em> \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0443\u0442\u0435\u0447\u0435\u043a, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0437\u043d\u0430\u044e:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (<code>window<\/code> \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, <code>global<\/code> \u0432 Node.js) \u2014 \u043a\u0430\u043a \u043f\u0440\u044f\u043c\u0430\u044f, \u0442\u0430\u043a \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/li>\n<li>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u043b\u0431\u044d\u043a\u0430 (<code>setInterval<\/code>, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435). \u0415\u0441\u043b\u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>setInterval<\/code>, \u0435\u0433\u043e \u043a\u043e\u043b\u0431\u044d\u043a \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043e\u0442\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 <code>DOMContentLoaded<\/code> \u0438 <code>load<\/code>. \u042d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0442 \u043d\u0438\u0445 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f.<\/li>\n<li>\u041d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u0437 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0438, \u0438 \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0438 \u043b\u0435\u0436\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u043e\u0442 <a href=\"https:\/\/blog.meteor.com\/an-interesting-kind-of-javascript-memory-leak-8b47d2e7f156\">\u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0442\u0435\u0447\u043a\u0438<\/a> \u0438\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 Meteor. \u0411\u043e\u043b\u044c\u0448\u0435 \u043e \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/mrale.ph\/blog\/2012\/09\/23\/grokking-v8-closures-for-fun.html\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/li>\n<li>\u041d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u0432 \u043a\u044d\u0448\u0435 \u0438\u043b\u0438 \u043c\u0435\u043c\u043e\u0438\u0437\u0430\u0442\u043e\u0440\u0435. \u042d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0432\u0441\u0435\u0433\u043e \u0438\u0445 \u0434\u0432\u0435: \u0432\u044b\u0431\u043e\u0440 \u0438\u043c\u0451\u043d, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u044d\u0448\u0430 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443). \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u043a\u044d\u0448 \u0438\u043b\u0438 \u043c\u0435\u043c\u043e\u0438\u0437\u0430\u0446\u0438\u044e \u2014 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435, \u043a\u0430\u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0438\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0432 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0441\u0442\u0438\u0442\u044c\u0441\u044f. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0435\u0441\u043b\u0438 \u044d\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a: \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0443\u0440\u043e\u0432\u043d\u044f \u00abHello, world!\u00bb \u0443\u0442\u0435\u0447\u043a\u0438 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f, \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0435\u0451 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u044d\u0448\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 WeakMap \u0438 WeakSet, \u0432\u044b\u0431\u043e\u0440 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/surfingbird\/blog\/306252\/\">\u043d\u0430 \u0425\u0430\u0431\u0440\u0435<\/a> \u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cache_replacement_policies\">\u0432 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438<\/a>).<\/li>\n<\/ol>\n<p>  <a name=\"33\"><\/a>  <\/p>\n<h3 id=\"kak-ih-obnaruzhit\">\u041a\u0430\u043a \u0438\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c<\/h3>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 Chrome \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>performance.memory<\/code>, \u0430 \u0432 Node.js \u2014 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>process.memoryUsage()<\/code>. \u041f\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0438 \u043e\u0447\u0435\u043d\u044c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043b\u0435\u0440\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0436\u0443\u0440\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0440\u0438 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u043c \u0440\u043e\u0441\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u0447\u0435\u043c \u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0448\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u2014 \u0442\u0435\u043c \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443. \u041e\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435: \u0447\u0430\u0441\u0442\u044c \u0443\u0442\u0435\u0447\u0435\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0449\u0451 \u0434\u043e \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043b\u0438\u0437\u0430.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0410\/\u0411-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 (\u0434\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0442\u043e\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/company\/rambler_and_co\/blog\/544904\/\">Core Web Vitals<\/a>). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u0439\u0442\u0438 \u0438 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0443 \u0435\u0449\u0451 \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043e\u043d\u0443\u0441: \u043f\u0440\u0438 \u0410\/\u0411-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0443\u0436\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u044d\u0442\u0430\u043f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0443\u0442\u0435\u0447\u043a\u0443, \u2014 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043b\u0438\u0437\u0430. \u0414\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Puppeteer \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f <a href=\"https:\/\/media-codings.com\/articles\/automatically-detect-memory-leaks-with-puppeteer\">\u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0442\u0435\u0447\u0435\u043a<\/a>. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 Chrome DevTools (\u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438 \u0432 Puppeteer) \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <a href=\"https:\/\/developer.chrome.com\/docs\/devtools\/console\/utilities\/#queryObjects-function\">queryObjects()<\/a> \u2014 \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0436\u0438\u0432\u044b (\u043d\u0430 \u043d\u0438\u0445 \u043a\u0442\u043e-\u0442\u043e \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f) \u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443. \u0415\u0441\u043b\u0438 \u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0430 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0436\u0438\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438. \u0422\u0435\u0441\u0442\u044b <a href=\"https:\/\/github.com\/chrisguttandin\/standardized-audio-context\/blob\/1a2f86afb87dbd5de3db7a3057e74ba67ac54bcd\/test\/memory\/module.js#L111\">\u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u043b\u0438\u0437\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0443\u0442\u0435\u0447\u0435\u043a:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0434\u0432\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043e\u0434\u0438\u043d \u2014 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0443\u0436\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0440\u0435\u043b\u0438\u0437\u043e\u043c, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0440\u0435\u043b\u0438\u0437\u043e\u043c.<\/li>\n<li>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043e\u0431\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0438 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439, \u0438 \u043d\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440).<\/li>\n<li>\u0421\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u043e\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u0430\u043c\u044f\u0442\u0438).<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u2014 \u0440\u043e\u043d\u044f\u0435\u043c \u0442\u0435\u0441\u0442.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0432\u043e\u043e\u0431\u0449\u0435, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0440\u043e\u0433\u0438 \u0434\u043b\u044f \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430, \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0434 \u0443\u0442\u0435\u0447\u043a\u0443 \u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043d\u0430 \u043d\u0435\u0439. \u0415\u0441\u043b\u0438 \u0442\u0435\u0441\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u043c \u2014 \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0435, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0435\u043b\u0438\u0437\u0435.<\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 70 000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 50 000. \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0447\u0438 <code>heapTotal<\/code>, \u043d\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f <code>rss<\/code>, <code>heapUsed<\/code> \u0438 <code>external<\/code> \u0442\u043e\u0436\u0435 \u0441\u0442\u0440\u043e\u0438\u043c \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430 \u043d\u0438\u0445 \u0441\u043c\u043e\u0442\u0440\u0438\u043c. \u0422\u0435\u0441\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 45-55 \u043c\u0438\u043d\u0443\u0442. \u0414\u043b\u044f \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430 \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0435\u0441\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0440\u0435\u043b\u0438\u0437\u0430, \u043d\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432. \u041a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d <code>heapTotal<\/code> \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430, \u0441\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u2014 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/eg\/ci\/im\/egciim9sgerz4pi162hl1vktgf8.png\" alt=\"Heap Total no leak\" data-src=\"https:\/\/habrastorage.org\/webt\/eg\/ci\/im\/egciim9sgerz4pi162hl1vktgf8.png\"\/><br \/>  <sup>\u041f\u0440\u0438\u043c\u0435\u0440 1. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442<\/sup><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ai\/gf\/fz\/aigffzaascmhpwbjutrpk9uwyws.png\" alt=\"Heap Total with leak\" data-src=\"https:\/\/habrastorage.org\/webt\/ai\/gf\/fz\/aigffzaascmhpwbjutrpk9uwyws.png\"\/><br \/>  <sup>\u041f\u0440\u0438\u043c\u0435\u0440 2. \u041f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0441 \u0443\u0442\u0435\u0447\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/sup><\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e: \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f, \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0435\u0443\u043a\u043b\u043e\u043d\u043d\u043e \u043f\u043e\u043b\u0437\u0451\u0442 \u0432\u0432\u0435\u0440\u0445 \u0438 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  <a name=\"34\"><\/a>  <\/p>\n<h3 id=\"kak-nayti-prichinu\">\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443<\/h3>\n<p>  <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0433\u0434\u0435-\u0442\u043e \u0432 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0430, \u2014 \u043b\u0438\u0448\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0434\u0435\u043b\u0430. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0433\u0434\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438 \u043a\u0430\u043a\u043e\u0432 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0435\u0451 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u044f \u0443\u0442\u0435\u0447\u043a\u0443, \u043d\u0430\u0439\u0434\u044f \u0432 Chrome DevTools \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0432 \u043f\u0443\u0442\u044c \u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043b.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u2014 \u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0432 Chrome DevTools. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 node \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u044e <code>--inspect<\/code> (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/nodejs.org\/en\/docs\/guides\/debugging-getting-started\/\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u043f\u043e Node.js \u0438 <a href=\"https:\/\/medium.com\/@paul_irish\/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u041f\u043e\u043b\u0430 \u0410\u0439\u0440\u0438\u0448\u0430):<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">node --inspect &lt;\u0432\u0430\u0448_\u0441\u043a\u0440\u0438\u043f\u0442>.js<\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0437\u043d\u0430\u044e \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043a\u0430\u043a \u0432 Chrome DevTools \u043d\u0430\u0439\u0442\u0438 \u0443\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<p>  <a name=\"341\"><\/a>  <\/p>\n<h4 id=\"1-poisk-utechek-s-pomoschyu-memory-allocation-timeline\">1. \u041f\u043e\u0438\u0441\u043a \u0443\u0442\u0435\u0447\u0435\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Memory Allocation Timeline<\/h4>\n<p>  <\/p>\n<p>Memory Allocation Timeline \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 Chrome DevTools, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0435\u0451 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435. \u041e\u043d \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d\u043d\u044b\u043c\u0438 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0438\u0445 \u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0443\u0442\u0435\u0447\u043a\u0438 (\u0430 \u043c\u043e\u0433\u0443\u0442 \u0438 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f). \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0443\u0442\u0435\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043d\u0443\u0442 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0441\u0442\u043e\u043b\u044c\u043a\u043e DevTools \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/developer.chrome.com\/docs\/devtools\/memory-problems\/allocation-profiler\/\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430 (\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0432\u043a\u043b\u0430\u0434\u043a\u0443, \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f), \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0443\u0442\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0435\u0451 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c (\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u044f Chrome 97 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f):<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 Chrome \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0443.<\/li>\n<li>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c Chrome DevTools.<\/li>\n<li>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 Memory (\u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0430 Profiles).<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c Allocation instrumentation on timeline (\u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u2014 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0432 Chrome 97).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ap\/ku\/ut\/apkuutxhsu_vco4goqe_cbhkqkw.png\" alt=\"Allocation timeline initial\" data-src=\"https:\/\/habrastorage.org\/webt\/ap\/ku\/ut\/apkuutxhsu_vco4goqe_cbhkqkw.png\"\/><\/p>\n<p>  <\/li>\n<li>\u041f\u0440\u043e\u0433\u0440\u0435\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0443\u0442\u0435\u0447\u043a\u0435.<\/li>\n<li>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u043d\u043e\u043f\u043a\u043e\u0439 Start.<\/li>\n<li>\u00ab\u041f\u043e\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u00bb \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0442\u0435 \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/li>\n<li>\n<p>\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 (\u00ab\u043f\u0430\u043b\u043e\u0447\u043a\u0438\u00bb) \u043d\u0430 \u0442\u0430\u0439\u043c\u043b\u0430\u0439\u043d\u0435 \u2014 \u044d\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c. \u0421\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442 \u2014 \u043f\u0430\u043c\u044f\u0442\u044c \u0443\u0436\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0430, \u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442 \u2014 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0437\u0430\u043d\u044f\u0442\u0430. \u041f\u043e\u043b\u043e\u0441\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u0438\u043d\u0435\u0439, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pi\/l4\/mx\/pil4mxm-amqiimwus83h1yzazm0.png\" alt=\"Allocation timeline started\" data-src=\"https:\/\/habrastorage.org\/webt\/pi\/l4\/mx\/pil4mxm-amqiimwus83h1yzazm0.png\"\/><\/p>\n<p>  <\/li>\n<li>\u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u0440\u0443\u0433\u043b\u043e\u0439 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043b\u0435\u0432\u043e\u043c \u0443\u0433\u043b\u0443.<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 DevTools \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0436\u0438\u0432\u044b. \u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0442\u0438\u043f\u0430\u043c (\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u043c).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/re\/tw\/8r\/retw8rklkzeq7qm-zdw3v8ttorg.png\" alt=\"Allocation timeline stopped\" data-src=\"https:\/\/habrastorage.org\/webt\/re\/tw\/8r\/retw8rklkzeq7qm-zdw3v8ttorg.png\"\/><\/p>\n<p>  <\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0440\u0443\u0433\u043b\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u2014 <code>(compiled code)<\/code>, <code>(array)<\/code>, <code>(system)<\/code>, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u2014 \u043c\u043e\u0436\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0432\u0438\u0436\u043a\u0430 V8, \u043d\u0430\u0448\u0438\u0445 \u0443\u0442\u0435\u0447\u0435\u043a \u0442\u0430\u043c \u043d\u0435\u0442. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>(string)<\/code> \u2014 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u0442\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438. \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430\u043d\u044f\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438 (\u043a\u043e\u043b\u043e\u043d\u043a\u0438 Shallow Size \u0438 Retained Size), \u0442\u043e \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/li>\n<li><code>(closure)<\/code> \u2014 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u041e\u043d\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0430\u043b\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0438, \u0442\u043e \u0438\u0445 \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0449\u0435\u043c \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0430\u043c \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. \u042d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u044f \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62875e5dde22274fb4bad977\" data-style=\"\" id=\"62875e5dde22274fb4bad977\" width=\"\"><\/div>\n<\/div>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Memory allocation timeline \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0441 \u0443\u0442\u0435\u0447\u043a\u0430\u043c\u0438 \u0438 \u0431\u0435\u0437 \u043d\u0438\u0445 \u2014 \u043a \u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u044f \u0432\u0435\u0440\u043d\u0443\u0441\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  <a name=\"342\"><\/a>  <\/p>\n<h4 id=\"2-poisk-utechek-s-pomoschyu-tehniki-tryoh-snapshotov\">2. \u041f\u043e\u0438\u0441\u043a \u0443\u0442\u0435\u0447\u0435\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0442\u0440\u0451\u0445 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432<\/h4>\n<p>  <\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b Chrome DevTools, \u043a\u0440\u043e\u043c\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439, \u0443\u043c\u0435\u044e\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0441\u043d\u0438\u043c\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 (heap snapshot, \u0434\u0430\u043b\u0435\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b) \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>Memory Allocation Timeline, \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u0434\u043e\u043c, \u0430 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0442\u044c \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 \u0447\u0430\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0442\u0440\u0451\u0445 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432 \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u0430 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0440\u0435\u0434\u043a\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0445 \u0443\u0442\u0435\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430 \u043e\u0434\u043d\u0443-\u0434\u0432\u0435 \u043c\u0438\u043d\u0443\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e (\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 Facebook \u2014 \u043a \u0444\u0438\u0434\u0443 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439, \u0432 Gmail \u2014 \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0438\u0441\u0435\u043c \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435).<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041f\u0440\u043e\u0433\u0440\u0435\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0443\u0442\u0435\u0447\u043a\u0435. \u041f\u0440\u043e\u0433\u0440\u0435\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c memo \u0438 lazy, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044d\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u043b\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443.<\/li>\n<li>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/mw\/vk\/eq\/mwvkeq1u2z4ku4uvly7rcv5cyr8.png\" alt=\"Memory snapshot 1\" data-src=\"https:\/\/habrastorage.org\/webt\/mw\/vk\/eq\/mwvkeq1u2z4ku4uvly7rcv5cyr8.png\"\/><\/p>\n<p>  <\/li>\n<li>\u0421\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0443\u0442\u0435\u0447\u043a\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043f\u0430\u043f), \u043f\u043e\u0442\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 1 (\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043f\u0430\u043f). \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b, \u0430 \u043a\u0440\u0443\u0433\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0430\u0437, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0435\u0441\u044f\u0442\u044c.<\/li>\n<li>\u0414\u0435\u043b\u0430\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442.<\/li>\n<li>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 3 (\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c-\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043f\u0430\u043f). \u0417\u0434\u0435\u0441\u044c \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u0443\u0436\u0435 \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u0440\u043e\u043b\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u0440\u0430\u0437.<\/li>\n<li>\u0414\u0435\u043b\u0430\u0435\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442.<\/li>\n<li>\n<p>\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u0432\u0442\u043e\u0440\u044b\u043c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u043c (Objects allocated between Snapshot 1 and Snapshot 2). \u042d\u0442\u043e <strong>\u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439<\/strong> \u043c\u043e\u043c\u0435\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0447\u0430\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u044e \u0435\u0449\u0451 \u0440\u0430\u0437: <strong>\u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u0432\u0442\u043e\u0440\u044b\u043c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438<\/strong>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0l\/yo\/bo\/0lyoboocr3ja2lphnycchbexbvy.png\" alt=\"Memory snapshot 3\" data-src=\"https:\/\/habrastorage.org\/webt\/0l\/yo\/bo\/0lyoboocr3ja2lphnycchbexbvy.png\"\/><\/p>\n<p>  <\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0443\u0442\u0435\u0447\u043a\u0443. \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 (\u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u044b\u0435),<\/li>\n<li>\u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 (\u0436\u0438\u0432\u044b\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043d\u044f\u0442\u0438\u044f \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430),<\/li>\n<li>\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u0432\u0442\u043e\u0440\u044b\u043c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438 \u2014 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 5 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043c\u0435\u043c\u043e\u0438\u0437\u0430\u0446\u0438\u044f.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0438\u0434\u0435\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0442\u0440\u0451\u0445 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432: \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0443\u0442\u0435\u0447\u043a\u0438 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u0432\u0442\u043e\u0440\u044b\u043c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438 (\u0432 \u043f\u0443\u043d\u043a\u0442\u0435 3), \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 5 \u0438 \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442\u044c \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0440\u0430\u0432\u043d\u043e\u0435 \u0438\u043b\u0438 \u043a\u0440\u0430\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 3 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432\u0438\u0434\u043d\u043e \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 Constructor). \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0437 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430: \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 c \u0443\u0442\u0435\u0447\u043a\u043e\u0439 16 \u0440\u0430\u0437 \u0438 \u0432\u0438\u0434\u0438\u043c \u00abChild x16\u00bb, \u00absystem \/ Context x16\u00bb, \u00ab(closure) x160\u00bb \u2014 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u043d\u0430\u0448\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 \u043a\u043b\u0430\u0441\u0441\u0430 <code>Child<\/code> \u0438 \u043f\u043e 10 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439 <code>(closure)<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0440\u0443\u0433\u043b\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 <code>(compiled code)<\/code> (\u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u043f\u0440\u043e \u043d\u0438\u0445 \u0432\u044b\u0448\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443) \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c, \u043a\u0440\u043e\u043c\u0435 <code>(string)<\/code> \u0438 <code>(closure)<\/code>. \u0412 <code>(closure)<\/code> \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0434\u043b\u044f \u043a\u0430\u043a\u0438\u0445 \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f: \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0430. \u041f\u0440\u0438\u043c\u0435\u0440: \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043d\u0438\u0436\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u0432\u0442\u043e\u0440\u044b\u043c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430\u043c\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 11 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>init()<\/code>, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 119-\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 <code>index.js<\/code>. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0443\u0442\u0435\u0447\u043a\u0443. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043a\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u044d\u0442\u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vj\/xl\/e0\/vjxle03rbhg8vq1zhainszqjop8.png\" alt=\"Closure leak\" data-src=\"https:\/\/habrastorage.org\/webt\/vj\/xl\/e0\/vjxle03rbhg8vq1zhainszqjop8.png\"\/><\/p>\n<p>  <a name=\"343\"><\/a>  <\/p>\n<h4 id=\"3-poisk-utechek-s-pomoschyu-queryobjects\">3. \u041f\u043e\u0438\u0441\u043a \u0443\u0442\u0435\u0447\u0435\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e queryObjects<\/h4>\n<p>  <\/p>\n<p>\u042f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0447\u0442\u043e \u0432 Chrome DevTools \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <a href=\"https:\/\/developer.chrome.com\/docs\/devtools\/console\/utilities\/#queryObjects-function\">queryObjects()<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0436\u0438\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (\u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c).<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043b\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0438 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">> queryObjects(Object)   Array(54700) > queryObjects(Object)   Array(54892) > queryObjects(Object)   Array(55080)             \/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0441\u0442\u0451\u0442 > queryObjects(Function)   Array(34232) > queryObjects(Function)   Array(34302) > queryObjects(Function)   Array(34347)             \/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0440\u0430\u0441\u0442\u0451\u0442 > queryObjects(HTMLElement)   Array(79) > queryObjects(HTMLElement)   Array(79) > queryObjects(HTMLElement)   Array(79)                \/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e DOM-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0451\u043c. \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 DevTools (\u0438 \u0438\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u044e\u0442 \u0432 <a href=\"https:\/\/github.com\/ChromeDevTools\/devtools-protocol\">Chrome DevTools Protocol<\/a>), \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438) \u2014 \u0437\u0430\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0443\u0442\u0435\u0447\u0435\u043a (\u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043b\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 detached DOM-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b) \u0438 \u0442\u0443\u0442 \u0436\u0435 \u043f\u0440\u043e\u0438\u043d\u0441\u043f\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<p>  <a name=\"344\"><\/a>  <\/p>\n<h4 id=\"treniruemsya-nahodit-utechki\">\u0422\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0438<\/h4>\n<p>  <\/p>\n<p>\u041d\u0430 \u0447\u0451\u043c \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0412\u043e\u0442 <a href=\"https:\/\/codesandbox.io\/s\/autobind-debounce-memory-leak-jezks?file=\/src\/Child.js\">\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0430. \u041e\u0442\u0432\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u0432 <a href=\"https:\/\/github.com\/andreypopp\/autobind-decorator\/issues\/76#issuecomment-719563300\">\u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/a>.<\/li>\n<li>\u0412 <a href=\"https:\/\/developer.chrome.com\/docs\/devtools\/memory-problems\/\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0443\u0442\u0435\u0447\u043a\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u041c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432 Chrome \u0438 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/li>\n<li>\u0412 <a href=\"https:\/\/nodesource.com\/blog\/memory-leaks-demystified\">\u044d\u0442\u043e\u0439<\/a> \u0438 <a href=\"https:\/\/blog.logrocket.com\/understanding-memory-leaks-node-js-apps\/\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u0441 \u0443\u0442\u0435\u0447\u043a\u043e\u0439 \u0434\u043b\u044f Node.js.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439 \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443: \u043e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0442\u0435\u0447\u043a\u0443 \u0432 \u0432\u0430\u0448\u0443 \u0432\u0435\u0442\u043a\u0443 \u043a\u043e\u0434\u0430 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0432\u044b \u2014 \u0432 \u0435\u0433\u043e \u0432\u0435\u0442\u043a\u0443, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0449\u0435\u0442 \u0443\u0442\u0435\u0447\u043a\u0443 \u0443 \u0441\u0435\u0431\u044f \u0432 \u0432\u0435\u0442\u043a\u0435, \u043d\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044f \u0432 \u043a\u043e\u043c\u043c\u0438\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437 \u0443\u0442\u0435\u0447\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0432 Chrome DevTools \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u00ab\u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u0440\u0430\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 <a href=\"https:\/\/www.html5rocks.com\/en\/tutorials\/memory\/effectivemanagement\/\">\u0441\u0442\u0430\u0442\u044c\u044e<\/a> \u0438 <a href=\"https:\/\/www.youtube.com\/watch?v=x9Jlu_h_Lyw\">\u0432\u0438\u0434\u0435\u043e<\/a> \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Google \u043f\u0440\u043e \u0443\u0442\u0435\u0447\u043a\u0438 \u0432 Gmail \u2014 \u0442\u0430\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u0438\u0441\u043a\u0435 \u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0443\u0442\u0435\u0447\u0435\u043a. \u041c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0441\u0442\u0430\u0440\u044b\u0435, \u043d\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u0433\u043e\u0434\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438: <a href=\"https:\/\/newrelic.com\/blog\/best-practices\/using-chrome-developer-tools-to-find-memory-leaks\">\u044d\u0442\u0430<\/a> \u0438 <a href=\"https:\/\/addyosmani.com\/blog\/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools\/\">\u044d\u0442\u0430<\/a>. \u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e soft-\u0443\u0442\u0435\u0447\u043a\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/309318\/\">\u0435\u0441\u0442\u044c<\/a> \u043d\u0430 \u0425\u0430\u0431\u0440\u0435.<\/p>\n<p>  <a name=\"4\"><\/a>  <\/p>\n<h2 id=\"hard-utechki\">Hard-\u0443\u0442\u0435\u0447\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 hard-\u0443\u0442\u0435\u0447\u0435\u043a \u043e\u0442 soft-\u0443\u0442\u0435\u0447\u0435\u043a: \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0443\u0442\u0451\u043a\u0448\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438 Node.js) \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<p>  <a name=\"41\"><\/a>  <\/p>\n<h3 id=\"primer-iz-prodakshena\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430<\/h3>\n<p>  <\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u0435\u0442 \u043d\u0430 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0441\u0442\u0430\u0440\u0443\u044e \u0437\u0430\u0433\u0430\u0434\u043a\u0443, \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u043c\u0443\u0447\u0438\u0432\u0448\u0443\u044e \u0432\u0435\u0440\u0441\u0442\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u0431\u044b\u043b \u0442\u0430\u043a\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440: Internet Explorer 7. \u041e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c IE7 \u0431\u044b\u043b\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c (\u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0435\u0439) \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u2014 \u043f\u0440\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0442\u0438\u043b\u0430\u0441\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u043b\u043e\u0441\u044c \u0447\u0435\u0440\u0442\u0435\u0436\u0435\u0439 \u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u043d\u043a\u0438\u0445 \u0447\u0451\u0442\u043a\u0438\u0445 \u043b\u0438\u043d\u0438\u0439.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c\u043e. \u0412 CSS \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>-ms-interpolation-mode<\/code>, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438. \u041e\u043d\u043e \u0438\u043c\u0435\u043b\u043e \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: <code>bicubic<\/code> (\u0431\u0438\u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f) \u0438 <code>nearest-neighbor<\/code> (\u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c), \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043b\u0443\u0436\u0438\u043b\u043e \u0438\u043c\u0435\u043d\u043d\u043e <code>nearest-neighbor<\/code>. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 CSS:<\/p>\n<p>  <\/p>\n<pre><code class=\"css\">img {     -ms-interpolation-mode: bicubic; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u0431\u0435\u0437 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f: \u043d\u0443 \u043f\u043e\u0447\u0435\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 IE7, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0435\u0433\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e?!<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/u9\/ti\/qo\/u9tiqojdsmqzfki2uhf7aysxnuu.jpeg\" alt=\"ie7 u no bicubic\" data-src=\"https:\/\/habrastorage.org\/webt\/u9\/ti\/qo\/u9tiqojdsmqzfki2uhf7aysxnuu.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043c\u043e\u0438 \u043a\u043e\u043b\u043b\u0435\u0433\u0438, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a \u043e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b\u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0441 IE7. \u041e\u043d\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0442\u0435\u0436\u0435\u0439 \u0438 \u0441\u0445\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0430 A0, \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0448\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 CSS, \u043f\u043e\u0442\u0440\u043e\u043b\u043b\u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 IE7, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 <code>-ms-interpolation-mode: bicubic<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0437\u0430\u0440\u0435\u043b\u0438\u0437\u0438\u043b\u0438 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a\u0430&#8230;<\/p>\n<p>  <\/p>\n<p>\u2026 \u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442\u044b \u043e\u0442 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430: \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442, \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u043a \u043a\u043e\u043d\u0446\u0443 \u0434\u043d\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043a\u043e\u043b\u043e\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Windows \u043f\u043e\u043c\u043e\u0433\u0430\u043b\u0430, \u043d\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0432\u0441\u0451 \u043e\u043f\u044f\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c. \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0443 \u0441\u0435\u0431\u044f \u0432 \u043e\u0444\u0438\u0441\u0435 \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435 \u0437\u0430\u0434\u0430\u0447, \u0447\u0442\u043e \u0443 IE7 \u043f\u0440\u0438 \u043b\u0438\u0441\u0442\u0430\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a\u0435 \u0440\u0430\u0441\u0442\u0451\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u2014 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u0443\u0442\u0435\u0447\u043a\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u043b\u043e \u2014 \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0441 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a\u043e\u043c \u2014 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u0430\u0432\u043d\u043e, \u044f \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043c\u043d\u044e). \u041f\u0435\u0440\u0435\u0431\u0440\u0430\u0432 \u0432\u0441\u0435 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0435 \u0432 \u0440\u0435\u043b\u0438\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043e\u043d\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0438\u0437 CSS \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u043e <code>-ms-interpolation-mode<\/code> \u0438\u043b\u0438 \u043f\u0440\u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u043d\u0430 <code>-ms-interpolation-mode: nearest-neighbor<\/code> \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0431\u0438\u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e, \u043d\u043e \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0435\u0451 \u0432 IE7 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043d\u0438 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043a \u0440\u0435\u043b\u0438\u0437\u0443 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0443 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0435\u0435 \u043a \u0443\u0442\u0435\u0447\u043a\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>  <a name=\"42\"><\/a>  <\/p>\n<h3 id=\"kak-borotsya\">\u041a\u0430\u043a \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f<\/h3>\n<p>  <\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0437\u0434\u0435\u0441\u044c \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 hard-\u0443\u0442\u0435\u0447\u043a\u0435.<\/li>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0433\u0434\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 (\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0432 \u0441\u0430\u043c\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0432 \u041e\u0421, \u0433\u0434\u0435-\u0442\u043e \u0435\u0449\u0451) \u0438 \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043e\u0444\u0442\u0430 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u044b \u0443\u0442\u0435\u0447\u043a\u0435. \u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u043e\u0444\u0442\u0430.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043c\u043e\u0436\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043e\u0444\u0442\u0430 \u0438 \u0435\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u044b\u0435 \u0443\u0442\u0435\u0447\u043a\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u2014 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f\/\u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0435\u0437 \u0443\u0442\u0435\u0447\u043a\u0438.<\/li>\n<li>\u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043e\u0444\u0442\u0430 \u0438\u043b\u0438 \u0436\u0434\u0451\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u044b \u0432 \u043d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0442\u043e\u043a.<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0442\u0435\u0447\u043a\u0430\u043c\u0438 \u0432 \u041e\u0421 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0438\u043b\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u2014 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\/\u041e\u0421 \u0435\u0441\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438.<\/li>\n<\/ol>\n<p>  <a name=\"5\"><\/a>  <\/p>\n<h2 id=\"nestandartnye-optimizacii-pamyati-v-nodejs\">\u041d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 Node.js<\/h2>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u044f \u0438 \u0434\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0434\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e. \u041d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u044b, \u043d\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0441 Node.js \u043d\u0430\u0434\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>Node.js \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0438\u0431\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043b\u0438\u0431\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0441\u0430\u043c.<\/p>\n<p>  <a name=\"51\"><\/a>  <\/p>\n<h3 id=\"ishodnyy-kod\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/h3>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 Node.js \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u044f \u0447\u0435\u0440\u0435\u0437 <code>require<\/code> \u0438\u043b\u0438 <code>import<\/code>, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u0430\u043c \u0434\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0446\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0434\u043d\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0442\u0440\u0438 \u0431\u0430\u043d\u0434\u043b\u0430:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0441\u0430\u043c \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430,<\/li>\n<li>\u043d\u0430\u0448\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438,<\/li>\n<li>\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (Lodash \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435).<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043a\u043e\u043b\u043e 28 \u041c\u0411 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/x8\/wb\/yk\/x8wbyktn7wwd1xzepjk3ma1fif4.jpeg\" alt=\"Memory consumption\" data-src=\"https:\/\/habrastorage.org\/webt\/x8\/wb\/yk\/x8wbyktn7wwd1xzepjk3ma1fif4.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u043e\u0442\u0441\u0442\u0443\u043f\u044b, \u043e\u0431\u0451\u0440\u0442\u043a\u0438 <code>function (exports, require, module, __filename, __dirname)<\/code> \u0432\u043e\u043a\u0440\u0443\u0433 CommonJS-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0410 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0438 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u2014 \u0443\u0431\u0440\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u0441\u0442\u0440\u043e\u043a, \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441\u044b \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0430\u043d\u0434\u043b \u00ab\u043f\u043e\u0445\u0443\u0434\u0435\u043b\u00bb \u0441 23 \u0434\u043e 15 \u041c\u0411.<\/p>\n<p>  <\/p>\n<p>\u041f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0441 \u0442\u0430\u043a\u0438\u043c \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lw\/0e\/bg\/lw0ebg9hbiyz8oc4v7-pbk2rrfi.png\" alt=\"Heap Total\" data-src=\"https:\/\/habrastorage.org\/webt\/lw\/0e\/bg\/lw0ebg9hbiyz8oc4v7-pbk2rrfi.png\"\/><\/p>\n<p>  <a name=\"52\"><\/a>  <\/p>\n<h3 id=\"module_pathcache\"><code>Module._pathCache<\/code><\/h3>\n<p>  <\/p>\n<p>Node.js \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441\u0442\u0440\u043e\u0438\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 (\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439) \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u0437 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>require()<\/code> \u0438 <code>import<\/code>. \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0430 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u0432 \u043a\u043e\u0434\u0435. \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0438 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u044d\u0448\u0435 \u0441 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>Module._pathCache<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0434 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>Node.js <a href=\"https:\/\/github.com\/nodejs\/node\/blob\/v12.18.1\/lib\/internal\/modules\/cjs\/loader.js#L178\">v12.18.1<\/a><\/li>\n<li>Node.js <a href=\"https:\/\/github.com\/nodejs\/node\/blob\/v16.11.0\/lib\/internal\/modules\/cjs\/loader.js#L194\">v16.11.0<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0443\u0442\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438, \u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u044d\u0448 \u043f\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/wk\/by\/ry\/wkbyryiq2f40iurhobetc7tandc.jpeg\" alt=\"Memory consumption\" data-src=\"https:\/\/habrastorage.org\/webt\/wk\/by\/ry\/wkbyryiq2f40iurhobetc7tandc.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0443\u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u044d\u0442\u043e\u0442 \u043a\u044d\u0448 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">Object.keys(Module._pathCache)   .forEach(key => delete Module._pathCache[key]);<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u2014 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u0443\u0442\u0438 \u0432 \u043a\u044d\u0448\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0435\u0449\u0451 \u0440\u0430\u0437.<\/p>\n<p>  <a name=\"53\"><\/a>  <\/p>\n<h3 id=\"neskolko-versiy-paketa-v-node_modules\">\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 node_modules<\/h3>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432 node_modules \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>lodash@4.17.21<\/code> \u0438 <code>lodash@4.17.15<\/code> \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Moment.js \u0441 \u0435\u0433\u043e \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u043c\u0438 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u0435\u0439 \u0438 \u0442\u0430\u0439\u043c\u0437\u043e\u043d), \u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b. \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0443\u0431\u043b\u0435\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0435\u0451 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0434\u0443\u0431\u043b\u0438, \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0434\u0432\u0443\u043c\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 <a href=\"https:\/\/docs.npmjs.com\/cli\/v8\/commands\/npm-find-dupes\">npm find-dupes<\/a> \u2014 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439, \u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439.<\/li>\n<li>\u041f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/github.com\/itwillwork\/dependencies-tree-builder\">dependencies-tree-builder<\/a>.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e dependencies-tree-builder \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">const chalk = require('chalk'); const buildTreeAsync = require('dependencies-tree-builder');  \/**  * \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0432 \u0441\u0431\u043e\u0440\u043a\u0443.  * \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 12 \u0432\u0435\u0440\u0441\u0438\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430  * \u0438\u043b\u0438 4 \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0440\u0451\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439.  *  * @type {number}  *\/ const MAX_COUNT_OF_DUPLICATED_PACKAGES = 12;  async function check({log}) {     const packageJson = require('.\/package.json');      let tree;     try {         tree = await buildTreeAsync(packageJson);     } catch (e) {         \/\/ \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0447\u0438\u0441\u0442\u0438\u043c \u043a\u044d\u0448 \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043d\u043e\u0432\u0430         \/\/ \u041a\u043e\u0434 \u0432 catch \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 https:\/\/github.com\/itwillwork\/dependencies-tree-builder\/pull\/4         const fs = require('fs');         const path = require('path');         const CACHE_FILE = path.resolve(__dirname, '.\/node_modules\/dependencies-tree-builder\/.packages.cache.json');         log(chalk.gray('\u0427\u0438\u0441\u0442\u0438\u043c \u043a\u044d\u0448 ' + CACHE_FILE));         fs.unlinkSync(CACHE_FILE);          const PackageCollector = require('dependencies-tree-builder\/src\/package_collector');         PackageCollector._cacheInstance = {};          \/\/ \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043d\u043e\u0432\u0430         tree = await buildTreeAsync(packageJson);     }      const packages = Object.entries(tree.scoupe)         .filter(([, versions]) => Object.keys(versions).length > 1);      const countOfDuplicates = packages         .reduce((count, [, versions]) => count + Object.keys(versions).length, 0);      const pl = new Intl.PluralRules('ru');     const packagePlural = {one: '\u043f\u0430\u043a\u0435\u0442', few: '\u043f\u0430\u043a\u0435\u0442\u0430', many: '\u043f\u0430\u043a\u0435\u0442\u043e\u0432'};     const versionPlural = {one: '\u0432\u0435\u0440\u0441\u0438\u044f', few: '\u0432\u0435\u0440\u0441\u0438\u0438', many: '\u0432\u0435\u0440\u0441\u0438\u0439'};      if (countOfDuplicates &lt;= MAX_COUNT_OF_DUPLICATED_PACKAGES) {         log(chalk.gray(             `\u0412 package.json \u0435\u0441\u0442\u044c ${packages.length} ${packagePlural[pl.select(packages.length)]} \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 ` +             `(\u0432\u0441\u0435\u0433\u043e ${countOfDuplicates} ${versionPlural[pl.select(countOfDuplicates)]})`         ));         return;     }      log(chalk.red.bold(         `\u0412 package.json \u0435\u0441\u0442\u044c ${packages.length} ${packagePlural[pl.select(packages.length)]} \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 ` +         `(\u0432\u0441\u0435\u0433\u043e ${countOfDuplicates} ${versionPlural[pl.select(countOfDuplicates)]}):`     ));      for (const [packageName, versions] of packages) {         log(chalk.blue(packageName) + ' ' + Object.keys(versions).join(', '));         Object.entries(versions).forEach(([version, {usages}]) => {             usages = usages.map(usage => (usage.length > 1) ? usage.slice(1).join('->') : usage[0]);             log('  ' + chalk.green(version) + ': ' + usages.join(', '));         });     } }  check(console);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0443\u0431\u043b\u0435\u0439 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u0443\u0431\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0427\u0435\u0440\u0435\u0437 <a href=\"https:\/\/docs.npmjs.com\/cli\/v8\/commands\/npm-dedupe\">npm dedupe<\/a>.<\/li>\n<li>\u0412\u0440\u0443\u0447\u043d\u0443\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 package.json \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0442\u043e\u0447\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 <code>\"lodash\": \"4.17.15\"<\/code>, \u0430 \u0443 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0435\u0440\u0441\u0438\u0439 <code>\"lodash\": \"^4.17.0\"<\/code>, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c npm \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0442\u0430\u043c \u0438 \u0442\u0430\u043c \u043e\u0434\u043d\u0443 \u0432\u0435\u0440\u0441\u0438\u044e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u044f\u0432\u043d\u0443\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c <code>\"lodash\": \"4.17.15\"<\/code>.<\/li>\n<li>\u0427\u0435\u0440\u0435\u0437 <a href=\"https:\/\/yarnpkg.com\/configuration\/manifest\/#resolutions\">yarn resolutions<\/a>.<\/li>\n<li>\u0427\u0435\u0440\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 <a href=\"https:\/\/webpack.js.org\/configuration\/resolve\/#resolvealias\"><code>alias<\/code><\/a> \u0432 webpack.config.js, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 webpack.<\/li>\n<\/ul>\n<p>  <a name=\"54\"><\/a>  <\/p>\n<h3 id=\"requiredatajson\"><code>require('.\/data.json')<\/code><\/h3>\n<p>  <\/p>\n<p>\u0412 Node.js \u0435\u0441\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b JSON \u043a\u0430\u043a CommonJS-\u043c\u043e\u0434\u0443\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 <code>require()<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">const data = require('.\/data.json');<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043b\u044e\u0441 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u044c. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0434\u0432\u0430 \u043c\u0438\u043d\u0443\u0441\u0430:<\/p>\n<p>  <\/p>\n<ol>\n<li>Node.js \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Module<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b JSON. \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430 <code>data.json<\/code> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 10 \u041c\u0411 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043d\u043e \u043e\u043a\u043e\u043b\u043e 15 \u041c\u0411 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u044d\u0448\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043d\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b Node.js, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0430\u0434\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 JSON&#8217;\u044b (\u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043b\u043a\u0438\u0445), \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0432 \u0438\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">\/\/ \u041f\u043b\u043e\u0445\u043e: const data = require('.\/data.json');  \/\/ \u041b\u0443\u0447\u0448\u0435: const data = JSON.parse(fs.readFileSync('.\/data.json', 'utf-8'));  \/\/ \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 JSON'\u043e\u0432 \u0442\u0430\u043a \u0435\u0449\u0451 \u043b\u0443\u0447\u0448\u0435: const {parseChunked} = require('@discoveryjs\/json-ext'); const data = await parseChunked(fs.createReadStream('data.json'));<\/code><\/pre>\n<p>  <a name=\"6\"><\/a>  <\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u042f \u0431\u044b \u0445\u043e\u0442\u0435\u043b, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0432\u0430\u043c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043a\u043e\u0434,<\/li>\n<li>\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u044d\u0448\u0430\u043c\u0438 \u0438 \u043c\u0435\u043c\u043e\u0438\u0437\u0430\u0446\u0438\u0435\u0439,<\/li>\n<li>\u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0443\u0442\u0435\u0447\u043a\u0430\u043c\u0438,<\/li>\n<li>\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0435, \u0440\u0435\u043b\u0438\u0437\u0435, \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 (\u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0448\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u2014 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430\u0439\u0434\u0451\u0448\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443),<\/li>\n<li>\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/666870\/\"> https:\/\/habr.com\/ru\/company\/yandex\/blog\/666870\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2 id=\"intro-pochemu-ya-napisal-etu-statyu\">\u0418\u043d\u0442\u0440\u043e: \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e<\/h2>\n<p>  <\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u042f\u043d\u0434\u0435\u043a\u0441\u0430. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0430\u044f \u0432\u044b\u0434\u0430\u0447\u0430 \u2014 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430: \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a \u041a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u041a\u0430\u0440\u0442\u044b, \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a, \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/l1\/1r\/xy\/l11rxyoyarh2sk26elmh94mlan0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/l1\/1r\/xy\/l11rxyoyarh2sk26elmh94mlan0.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0432\u043e\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0441\u0443\u0442\u043a\u0438 \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 JavaScript (TypeScript, ClojureScript \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0432 JavaScript), \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0432\u0438\u0434\u0430\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0438 \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c. \u0412 \u043e\u0442\u0432\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u043a\u0430\u0436\u0443\u0442 \u0432\u0430\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-333949","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/333949","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=333949"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/333949\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=333949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=333949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=333949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}