{"id":498088,"date":"2026-10-09T22:46:15","date_gmt":"2026-10-09T19:46:15","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=498088"},"modified":"2026-10-09T22:46:15","modified_gmt":"2026-10-09T19:46:15","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=498088","title":{"rendered":"WASM vs JavaScript 2026 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 Flutter Web"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u041a\u043e\u0433\u0434\u0430 Flutter \u043d\u0430 WebAssembly \u0431\u044b\u0441\u0442\u0440\u0435\u0435 JavaScript: \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c 46 \u0442\u0435\u0441\u0442\u043e\u0432.<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0443\u044e \u043d\u0430\u043c \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u0436\u0435\u043b\u0435\u0437\u043e\u043c, \u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u0436\u0435 \u0441 5 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432, \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f FPS \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0433\u0440\u0435. 10 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u2014 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e, 15 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u2014 \u0435\u0449\u0451 \u0437\u0430\u043c\u0435\u0442\u043d\u0435\u0435. \u0410 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 50 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u044f \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 WebAssembly-\u043a\u043e\u0434 \u0432\u043c\u0435\u0441\u0442\u043e JavaScript. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, \u043d\u0443, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442 5 \u0434\u043e 10 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432. \u0425\u043e\u0442\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 50. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e.<\/p>\n<p>\u042f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0441\u043a\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0432\u0435\u0431 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0432 WASM \u0432\u043c\u0435\u0441\u0442\u043e JS, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0446\u0438\u0444\u0440 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0446\u0438\u0444\u0440\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 Wasm \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u042f \u0441\u043e\u0431\u0440\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Flutter-\u0441\u0442\u0435\u043d\u0434, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u043a\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0442\u0441\u044f, \u0433\u0434\u0435 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 JavaScript \u0438 \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/p>\n<h3>\u041d\u0430 \u0447\u0451\u043c \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442<\/h3>\n<p><strong>\u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440:<\/strong> Apple M4, 16 \u0413\u0438\u0411 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, arm64, Darwin 24.3.0.<\/p>\n<p><strong>\u0411\u0440\u0430\u0443\u0437\u0435\u0440:<\/strong> Chrome\/154.0.8037.98, \u0434\u0432\u0438\u0436\u043e\u043a V8 15.4.80.20.<\/p>\n<p><strong>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430:<\/strong> Flutter 3.47.1, Dart 3.13.1, \u0441\u0431\u043e\u0440\u043a\u0438 release.<\/p>\n<p><strong>\u0413\u0440\u0430\u0444\u0438\u043a\u0430:<\/strong> ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Version 15.3.1 (Build 24D70)). \u041e\u043a\u043d\u043e 1280 \u00d7 900 CSS-\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, DPR 1.<\/p>\n<p><strong>\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435:<\/strong> \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0412\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u043c Chrome.<\/p>\n<p>\u0418\u0437 \u043e\u0434\u043d\u043e\u0433\u043e Dart-\u043a\u043e\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0434\u0432\u0435 \u0432\u0435\u0431-\u0441\u0431\u043e\u0440\u043a\u0438. \u0412 JavaScript-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 Flutter \u0440\u0438\u0441\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 CanvasKit. Wasm-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Skwasm; \u0435\u0433\u043e \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u0441 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0435. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u043e\u043d\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b <strong>JavaScript<\/strong>, <strong>Wasm ST<\/strong> \u0438 <strong>Wasm MT<\/strong>.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0448\u0435\u0441\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0438 \u0441\u0435\u043c\u044c \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043c\u0435\u043d\u044f\u043b\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0435\u0440\u0432\u044b\u043c \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0414\u043b\u044f \u0441\u0435\u043c\u0438 \u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0441\u0435\u0440\u0438\u044e: 12 \u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c, 15 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0437\u0430\u0442\u0435\u043c 21 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0437\u0430\u043c\u0435\u0440 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0438 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043f\u0430\u043c\u044f\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u0435\u043a\u0441\u0442, \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u0438 Flutter-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u0435\u0439\u0441\u043e\u043c \u0435\u0441\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430. \u041e\u0431\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u0412\u0441\u0435 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u043f\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0437\u0430\u043c\u0435\u0440\u0430\u043c.<\/p>\n<h3>\u041a\u0430\u043a \u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<p>\u0412\u0440\u0435\u043c\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0432\u0442\u043e\u0440 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0422\u0438\u043f\u0438\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043c\u0435\u0434\u0438\u0430\u043d\u043e\u0439: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0441\u0441\u0438\u0438, \u0437\u0430\u0442\u0435\u043c \u043f\u043e \u0441\u0435\u0441\u0441\u0438\u044f\u043c. \u041e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435; \u0435\u0433\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043b\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 <strong>JS \/ Wasm<\/strong> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 2 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e Wasm \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u0434\u0432\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 0,5 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 JavaScript. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u0430\u0440\u043d\u044b\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0435\u0433\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<\/p>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<ol>\n<li>\n<p><a href=\"#numbers\" rel=\"noopener nofollow\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: \u0447\u0438\u0441\u043b\u0430, \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0437\u0432\u0443\u043a<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#memory\" rel=\"noopener nofollow\">\u041f\u0430\u043c\u044f\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#text\" rel=\"noopener nofollow\">\u0422\u0435\u043a\u0441\u0442 \u0438 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#integration\" rel=\"noopener nofollow\">\u0412\u044b\u0437\u043e\u0432\u044b JavaScript \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#browser\" rel=\"noopener nofollow\">\u0420\u0430\u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#flutter\" rel=\"noopener nofollow\">Flutter: \u0442\u0435\u043a\u0441\u0442, \u0432\u0438\u0434\u0436\u0435\u0442\u044b, \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#modules\" rel=\"noopener nofollow\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a href=\"#frames\" rel=\"noopener nofollow\">\u041f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u0434\u0440\u0430<\/a> \u00b7 <a href=\"#startup\" rel=\"noopener nofollow\">\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a> \u00b7 <a href=\"#conclusion\" rel=\"noopener nofollow\">\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b<\/a> \u00b7 <a href=\"#method\" rel=\"noopener nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439<\/a> \u00b7 <a href=\"#measurements\" rel=\"noopener nofollow\">\u0421\u0432\u043e\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430<\/a> \u00b7 <a href=\"#source-code\" rel=\"noopener nofollow\">\u041f\u043e\u043b\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438<\/a><\/p>\n<h3>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: \u0447\u0438\u0441\u043b\u0430, \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0437\u0432\u0443\u043a<\/h3>\n<h4>1. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438<\/h4>\n<p>\u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0431\u0438\u0442\u044b, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0430\u0441\u043a\u0438 \u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0431\u0440\u0430\u043d xorshift \u2014 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f 300 000 \u0448\u0430\u0433\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f 32 \u0431\u0438\u0442\u0430\u043c\u0438. \u042d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0441\u043c\u044b\u0441\u043b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u0435\u0438\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439; \u043f\u043e\u043b\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 54 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,678<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,617<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,615<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,72 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 2,72\u00d7 [2,71; 2,72].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">int bitMix(int seed, int count) {  var x = seed;  for (var i = 0; i &lt; count; i++) {    x = (x ^ (x &lt;&lt; 13)) &amp; 0xffffffff;    x = (x ^ (x &gt;&gt; 17)) &amp; 0xffffffff;    x = (x ^ (x &lt;&lt; 5)) &amp; 0xffffffff;  }  return x;}Kernel(      'int32',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0426\u0435\u043b\u044b\u0435: xorshift \/ \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438',      '300 000 \u0448\u0430\u0433\u043e\u0432; u32',      () =&gt; bitMix(data.seed, 300000),    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>2. \u041f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b<\/h4>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u0432\u0443\u0445 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0432\u043a\u043b\u0430\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u044e\u0442 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442.<\/p>\n<p>\u0412 \u0442\u0435\u0441\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f 65 536 \u043f\u0430\u0440 \u0447\u0438\u0441\u0435\u043b \u0438\u0437 Float64List, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c. \u041c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 143 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,078<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,241<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,239<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,09 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,32\u00d7 [0,32; 0,34].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">double dot(List&lt;double&gt; a, List&lt;double&gt; b) {  var sum = 0.0;  for (var i = 0; i &lt; a.length; i++) {    sum += a[i] * b[i];  }  return sum;}Kernel(      'double_dot',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      'Float64: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435',      '65 536 \u043f\u0430\u0440',      () =&gt; dot(a, b),    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>3. \u0421\u0438\u043d\u0443\u0441\u044b, \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u044b \u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u043a\u043e\u0440\u043d\u0438<\/h4>\n<p>\u0421\u0438\u043d\u0443\u0441\u044b \u0438 \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u041a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u0440\u0435\u043d\u044c \u043d\u0443\u0436\u0435\u043d, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 30 000 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 sin(x) \u00d7 cos(x) + sqrt(x). \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 77 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,252<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,255<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,254<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,00\u00d7 [0,99; 1,01].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'transcendental',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      'sin \/ cos \/ sqrt',      '30 000 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432',      () {        var sum = 0.0;        for (var i = 0; i &lt; 30000; i++) {          final x = a[i];          sum += math.sin(x) * math.cos(x) + math.sqrt(x);        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>4. \u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446<\/h4>\n<p>\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445. \u0412 \u044d\u0442\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 64 \u00d7 64.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u0430 \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0446\u0438\u043a\u043b\u043e\u0432 i\u2013k\u2013j \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 63 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,307<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,443<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,443<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,44 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,69\u00d7 [0,67; 0,72].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Float64List multiply(List&lt;double&gt; a, List&lt;double&gt; b, int n) {  final out = Float64List(n * n);  for (var i = 0; i &lt; n; i++) {    for (var k = 0; k &lt; n; k++) {      final v = a[i * n + k];      for (var j = 0; j &lt; n; j++) {        out[i * n + j] += v * b[k * n + j];      }    }  }  return out;}Kernel(      'matrix',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u041c\u0430\u0442\u0440\u0438\u0446\u044b: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0440\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b',      '64\u00d764; Float64; \u0432\u043a\u043b\u044e\u0447\u0430\u044f output',      () =&gt; multiply(matrixA, matrixB, 64).fold(0.0, (x, y) =&gt; x + y),    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>5. \u0424\u0438\u043b\u044c\u0442\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h4>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0417\u0434\u0435\u0441\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442 3 \u00d7 3.<\/p>\n<p>\u0422\u0435\u0441\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 256 \u00d7 256 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u0413\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f; \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443. \u0417\u0430\u043c\u0435\u0440 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0412 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043a \u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u043e\u043a\u0430\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 34 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,349<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,184<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,182<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,88 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 1,88\u00d7 [1,86; 1,97].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">int stencil(Uint32List image, int width) {  var sum = 0;  for (var y = 1; y &lt; width - 1; y++) {    for (var x = 1; x &lt; width - 1; x++) {      final p = y * width + x;      sum +=          (image[p - width - 1] +              image[p - width] +              image[p - width + 1] +              image[p - 1] +              image[p] +              image[p + 1] +              image[p + width - 1] +              image[p + width] +              image[p + width + 1]) ~\/          9;    }  }  return sum;}Kernel(      'image_stencil',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: box-filter 3\u00d73',      '256\u00d7256; \u0431\u0435\u0437 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430\/GPU',      () =&gt; stencil(data.values, 256),    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>6. \u0424\u0438\u043b\u044c\u0442\u0440 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430<\/h4>\n<p>\u041f\u0440\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0432\u0443\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0442\u0441\u0447\u0451\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430 FIR-\u0444\u0438\u043b\u044c\u0442\u0440\u0430.<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438\u0437 8 192 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0438 32 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432. \u0426\u0438\u043a\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 32, \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u0435\u0442 \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443. \u0420\u0430\u0431\u043e\u0442\u0430 \u0430\u0443\u0434\u0438\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 50 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,163<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,169<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,168<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 0,96\u00d7 [0,95; 1,03].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'audio_fir',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0410\u0443\u0434\u0438\u043e: FIR-\u0444\u0438\u043b\u044c\u0442\u0440',      '8 192 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u00d7 32 taps',      () {        var sum = 0.0;        for (var i = 32; i &lt; 8192; i++) {          for (var j = 0; j &lt; 32; j++) {            sum += a[i - j] * b[j];          }        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>7. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438<\/h4>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0447\u0430\u0441\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b: \u0434\u043b\u044f \u043c\u0430\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0434\u043b\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u0445 \u0434\u0440\u0443\u0433\u043e\u0435, \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0440\u0435\u0442\u044c\u0435. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b.<\/p>\n<p>262 144 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0438 \u0432\u0435\u0442\u0432\u0438 if\/else. \u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043e\u0432 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u043a \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0432\u0435\u0442\u0432\u0435\u0439 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 19 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,631<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,809<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,654<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,564<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,712<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,795<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/strong> JS \/ Wasm ST: 0,77\u00d7 [0,69; 0,97].<\/p>\n<p><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/strong> JS \/ Wasm ST: 0,81\u00d7 [0,71; 1,00].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'branch',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c',      '262 144 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',      () {        var sum = 0;        for (var i = 0; i &lt; 262144; i++) {          final v = data.values[i];          if (v &lt; 20000) {            sum += v * 3;          } else if (v &lt; 40000) {            sum -= v;          } else {            sum += v ~\/ 3;          }        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>8. \u041c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u0441\u0435\u0431\u044f. \u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432\u044b\u0431\u0440\u0430\u043d \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 Fibonacci(25).<\/p>\n<p>\u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430. \u0414\u043b\u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u0440\u0430\u0437\u0443\u043c\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0417\u0434\u0435\u0441\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0443\u0436\u0438\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043d\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 48 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,505<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,130<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,128<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,89 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 3,89\u00d7 [3,84; 3,90].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">int fibonacci(int n) =&gt; n &lt; 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);Kernel(      'recursion',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b: Fibonacci',      'n=25',      () =&gt; fibonacci(25),    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>9. \u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438<\/h4>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0431\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043b\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u0447\u043d\u0430\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0446\u0435\u043b\u044b\u043c\u0438. Dart \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e BigInt.<\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f 1 000 \u0448\u0430\u0433\u043e\u0432: \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0448\u0430\u0433\u0430 \u0438 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 2\u00b9\u00b2\u2077 \u2212 1. \u0412 \u043e\u0431\u0435\u0438\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 Dart-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 15 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,319<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,475<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,475<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,78 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 2,78\u00d7 [2,75; 2,84].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'bigint',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      'BigInt: \u0442\u043e\u0447\u043d\u0430\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430',      '1 000 modular multiply; 127 \u0431\u0438\u0442',      () {        var x = BigInt.from(data.seed);        for (var i = 0; i &lt; 1000; i++) {          x = (x * x + BigInt.from(i)) % big;        }        return (x &amp; BigInt.from(0x7fffffff)).toInt();      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>10. \u0422\u0430 \u0436\u0435 \u0441\u0443\u043c\u043c\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c<\/h4>\n<p>\u042d\u0442\u043e\u0442 \u0442\u0435\u0441\u0442 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c.<\/p>\n<p>\u041c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 262 144 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u043a\u043e\u0439 4095. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0432 int. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 Int32x4 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0435 \u0436\u0435 \u0447\u0438\u0441\u043b\u0430 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 105 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,100<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,108<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,108<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 0,92\u00d7 [0,91; 0,95].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel('dart_scalar_vector','\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f','Dart int: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0443\u043c\u043c\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432','262 144 \u0446\u0435\u043b\u044b\u0445; \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442',(){      var sum=0;for(var i=0;i&lt;scalarLanes.length;i++) {sum+=scalarLanes[i];}return sum;    })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>11. \u0421\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u0435\u043b \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435<\/h4>\n<p>Int32x4 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0430\u0434 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0412 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f 65 536 \u0442\u0430\u043a\u0438\u0445 \u0433\u0440\u0443\u043f\u043f.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0441\u0443\u043c\u043c\u0443. \u0412 Wasm-\u0441\u0431\u043e\u0440\u043a\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432 JavaScript-\u0441\u0431\u043e\u0440\u043a\u0435. \u041f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 Wasm \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b: \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0438 \u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 48 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,349<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,190<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,187<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,85 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 1,85\u00d7 [1,74; 1,89].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel('dart_vector','\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f','Dart Int32x4: \u0441\u0443\u043c\u043c\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432','65 536 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432; API \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 SIMD',(){      var sum=Int32x4(0,0,0,0);for(var i=0;i&lt;lanes.length;i++) {sum=sum+lanes[i];}return sum.x+sum.y+sum.z+sum.w;    })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u041f\u0430\u043c\u044f\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438<\/h3>\n<h4>12. \u0427\u0442\u0435\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438<\/h4>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u0430\u0445. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 16 \u041a\u0438\u0411 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412\u0441\u0435 4 096 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0443\u043c\u043c\u0443. \u041e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442\u0435. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u044b \u043f\u0440\u043e\u0433\u0440\u0435\u0432, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0446\u0438\u043a\u043b\u0430 \u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 512 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,003<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,002<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,002<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,003<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,003<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,003<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/strong> JS \/ Wasm ST: 1,23\u00d7 [1,00; 1,25].<\/p>\n<p><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 0,97\u00d7 [0,96; 1,00].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for (final length in [4096, 1048576])      Kernel(        'memory_$length',        '\u041f\u0430\u043c\u044f\u0442\u044c',        '\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 ${length == 4096 ? '16 KiB' : '4 MiB'}',        '$length \u00d7 Uint32',        () {          var sum = 0;          for (var i = 0; i &lt; length; i++) {            sum += data.values[i];          }          return sum;        },      )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>13. \u0427\u0442\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438<\/h4>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043f\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443: 4 \u041c\u0438\u0411, \u0438\u043b\u0438 1 048 576 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b.<\/p>\n<p>\u0412\u0440\u0435\u043c\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041e\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443; \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u043d\u044b\u0435 \u043e\u0431\u044a\u0451\u043c\u044b \u0438 \u0441\u0445\u0435\u043c\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 35 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,642<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,531<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,529<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,20 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 1,20\u00d7 [1,20; 1,22].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for (final length in [4096, 1048576])      Kernel(        'memory_$length',        '\u041f\u0430\u043c\u044f\u0442\u044c',        '\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 ${length == 4096 ? '16 KiB' : '4 MiB'}',        '$length \u00d7 Uint32',        () {          var sum = 0;          for (var i = 0; i &lt; length; i++) {            sum += data.values[i];          }          return sum;        },      )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>14. \u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435<\/h4>\n<p>\u041f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u043f\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u0437\u0430\u0431\u043b\u0430\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c.<\/p>\n<p>\u0412 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1 \u041c\u0438\u0411 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b 262 144 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0441\u044b\u043b\u043e\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e \u0438 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 17 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,388<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,471<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,487<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,249<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,562<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,534<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/strong> JS \/ Wasm ST: 0,90\u00d7 [0,78; 0,97].<\/p>\n<p><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,17 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,85\u00d7 [0,72; 0,91].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'random_memory',      '\u041f\u0430\u043c\u044f\u0442\u044c',      '\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435',      '1 MiB; 262 144 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432',      () {        var p = data.seed &amp; (links.length - 1), sum = 0;        for (var i = 0; i &lt; links.length; i++) {          p = links[p];          sum += p;        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>15. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0431\u0443\u0444\u0435\u0440. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 4 \u041c\u0438\u0411 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>\u041f\u0440\u0438\u0451\u043c\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0412\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u043c\u0435\u0440\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f setAll, \u0437\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 278 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,059<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,070<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,070<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,20 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,83\u00d7 [0,83; 0,84].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'bulk_copy',      '\u041f\u0430\u043c\u044f\u0442\u044c',      'TypedData.setAll: \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435',      '4 MiB; \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 output',      () {        copy.setAll(0, data.values);        return copy[0] + copy[copy.length - 1];      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>16. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/h4>\n<p>\u041f\u0440\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432: \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u0441\u0442\u0440\u043e\u043a, \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041e\u043d\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0435\u0441\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 32 \u043f\u0430\u0440\u0442\u0438\u0438 \u043f\u043e 1 024 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 Cell \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u0440\u0435\u043c\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043e\u0431\u0445\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0438. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 91 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,101<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,169<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,169<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,68 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,59\u00d7 [0,59; 0,60].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'allocation_short',      '\u041e\u0431\u044a\u0435\u043a\u0442\u044b',      '\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b',      '32 \u043f\u0430\u0440\u0442\u0438\u0438 \u00d7 1 024 Cell',      () {        var sum = 0;        for (var round = 0; round &lt; 32; round++) {          final cells = List.generate(            1024,            (i) =&gt; Cell(data.values[i + round]),          );          for (final c in cells) {            sum += c.value;          }        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>17. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043d\u0435\u0439<\/h4>\n<p>\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0445\u0440\u0430\u043d\u044f\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0438\u0437 32 768 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0437\u0434\u0435\u0441\u044c \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 91 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,078<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,084<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,084<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,078<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,087<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,086<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/strong> JS \/ Wasm ST: 0,92\u00d7 [0,91; 0,94].<\/p>\n<p><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,13 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,88\u00d7 [0,88; 0,90].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'allocation_graph',      '\u041e\u0431\u044a\u0435\u043a\u0442\u044b',      '\u041e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c',      '32 768 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 Cell; allocation \u0432\u043a\u043b\u044e\u0447\u0451\u043d',      () {        Cell? head;        for (var i = 0; i &lt; 32768; i++) {          head = Cell(data.values[i], head);        }        var sum = 0;        while (head != null) {          sum += head.value;          head = head.next;        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>18. \u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/h4>\n<p>\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u0412\u044b\u0437\u043e\u0432 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0449\u0438\u0439 \u0442\u0438\u043f, \u0430 \u043d\u0443\u0436\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0435\u0441\u0442 300 000 \u0440\u0430\u0437 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 apply \u0443 \u0442\u0440\u0451\u0445 \u0447\u0435\u0440\u0435\u0434\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439. \u041a\u0430\u0436\u0434\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u0422\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u0430, \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u043e\u0432. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 22 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,553<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,486<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,484<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,13 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 1,13\u00d7 [1,11; 1,14].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'dispatch',      '\u041e\u0431\u044a\u0435\u043a\u0442\u044b',      '\u041f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b',      '300 000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432; 3 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438',      () {        var x = data.seed &amp; 65535;        for (var i = 0; i &lt; 300000; i++) {          x = operations[i % 3].apply(x);        }        return x;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>19. \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430<\/h4>\n<p>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430\u043c, \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043f\u043e\u0438\u0441\u043a\u0430. \u0414\u043b\u044f \u043e\u043f\u044b\u0442\u0430 \u0432\u0437\u044f\u0442\u044b 20 000 \u0446\u0435\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c.<\/p>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043f\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f sort. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0430\u044f \u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0418\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 7 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,441<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,679<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,738<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,308<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,650<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,670<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/strong> JS \/ Wasm ST: 0,94\u00d7 [0,88; 1,40].<\/p>\n<p><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/strong> JS \/ Wasm ST: 0,91\u00d7 [0,89; 0,93].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'sort',      '\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438',      '\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0438\u0441\u0435\u043b',      '20 000 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e',      () {        final out = data.values.take(20000).toList()..sort();        var sum = 0;        for (var i = 0; i &lt; out.length; i++) {          sum = (sum + out[i] * (i + 1)) % 1000000007;        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>20. \u041f\u043e\u0438\u0441\u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443<\/h4>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443. \u0412 Dart \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Map.<\/p>\n<p>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0438 \u043a\u043b\u044e\u0447\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f 20 000 \u043f\u043e\u0438\u0441\u043a\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0443\u043c\u043c\u0443. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 77 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,258<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,395<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,421<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,54 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,65\u00d7 [0,61; 0,68].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'map',      '\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438',      '\u0425\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430: \u043f\u043e\u0438\u0441\u043a \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439',      '20 000 \u043f\u043e\u0438\u0441\u043a\u043e\u0432; Map \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d',      () {        var sum = 0;        for (final k in keys) {          sum += map[k]!;        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u0422\u0435\u043a\u0441\u0442 \u0438 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/h3>\n<h4>21. \u0421\u0431\u043e\u0440\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0437 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432<\/h4>\n<p>\u0412 \u0436\u0443\u0440\u043d\u0430\u043b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f StringBuffer.<\/p>\n<p>\u0412 \u0431\u0443\u0444\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f 2 000 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0438 \u0447\u0438\u0441\u043b\u043e\u043c, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438 \u0435\u0451 \u0434\u043b\u0438\u043d\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 313 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,039<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,089<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,090<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,30 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,43\u00d7 [0,43; 0,44].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'string_build',      '\u0422\u0435\u043a\u0441\u0442',      'StringBuffer \/ \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435',      '2 000 \u0441\u0442\u0440\u043e\u043a',      () {        final out = StringBuffer();        for (var i = 0; i &lt; 2000; i++) {          out.write('item_$i:${data.values[i]};');        }        return out.toString().length;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>22. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0431\u0430\u0439\u0442\u044b<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043f\u043e \u0441\u0435\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u0447\u0430\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442 \u0432 \u0431\u0430\u0439\u0442\u044b UTF-8. \u0412\u0445\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u0443, \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0443, \u044f\u043f\u043e\u043d\u0441\u043a\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u044d\u043c\u043e\u0434\u0437\u0438.<\/p>\n<p>\u041a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u0438\u0437 2 000 \u0441\u0442\u0440\u043e\u043a. \u0417\u0430\u0442\u0435\u043c \u0431\u0430\u0439\u0442\u044b \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u044f \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 25 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,661<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,216<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,215<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,08 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 3,08\u00d7 [1,86; 4,37].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'utf8_encode',      '\u0422\u0435\u043a\u0441\u0442',      'UTF-8: \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Unicode',      '2 000 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a',      () =&gt; utf8.encode(data.text).fold&lt;int&gt;(0, (a, b) =&gt; a + b),    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>23. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0442\u0435\u043a\u0441\u0442<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0431\u0430\u0439\u0442\u044b UTF-8 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443. \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0435 \u0436\u0435 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0417\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 2 000 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f utf8.decode \u0438 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e: \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0435\u0439. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 358 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,055<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,174<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,174<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,14 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,32\u00d7 [0,32; 0,33].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'utf8_decode',      '\u0422\u0435\u043a\u0441\u0442',      'UTF-8: \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Unicode',      '2 000 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a',      () =&gt; utf8.decode(encoded).length,    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>24. \u041f\u043e\u0438\u0441\u043a \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443<\/h4>\n<p>\u0418\u0437 \u0442\u0435\u043a\u0441\u0442\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043d\u043e\u043c\u0435\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u0438\u0434\u0430 item_123. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 \u0437\u0430\u0445\u0432\u0430\u0442\u0430.<\/p>\n<p>\u041f\u043e\u0438\u0441\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442 2 000 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0446\u0438\u0444\u0440\u044b, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 int \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 114 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,153<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,284<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,286<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,85 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,54\u00d7 [0,53; 0,55].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel('regexp', '\u0422\u0435\u043a\u0441\u0442', 'RegExp: \u043f\u043e\u0438\u0441\u043a \u0438 \u0433\u0440\u0443\u043f\u043f\u044b', '2 000 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439', () {      var sum = 0;      for (final m in regular.allMatches(data.text)) {        sum += int.parse(m.group(1)!);      }      return sum;    })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>25. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 JSON \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430\u0431\u043e\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 API \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 JSON. \u0412 \u0442\u0435\u0441\u0442\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 2 000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u043b\u044f: id, name, value \u0438 active.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. jsonEncode \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u0437\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0451 \u0434\u043b\u0438\u043d\u0430. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 JSON \u0432 \u043f\u0430\u043c\u044f\u0442\u0438; \u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 46 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,470<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,340<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,341<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,38 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 1,38\u00d7 [1,36; 1,40].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'json_encode',      '\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f',      'JSON: encode',      '2 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u00d7 4 \u043f\u043e\u043b\u044f',      () =&gt; jsonEncode(data.records).length,    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>26. \u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e JSON<\/h4>\n<p>\u041f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 JSON \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 2 000 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<p>jsonDecode \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043a\u043e\u0434 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435 value. \u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0437\u0431\u043e\u0440, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c. \u042d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 JSON, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u0432\u0443\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 87 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,211<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,321<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,325<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,53 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,65\u00d7 [0,65; 0,66].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Kernel(      'json_decode',      '\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f',      'JSON: decode \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f',      '2 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u00d7 4 \u043f\u043e\u043b\u044f',      () {        final rows = jsonDecode(data.json) as List;        var sum = 0;        for (final r in rows) {          sum += (r['value'] as num).toInt();        }        return sum;      },    )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u0412\u044b\u0437\u043e\u0432\u044b JavaScript \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/h3>\n<h4>27. \u041c\u043d\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 Dart \u043a JavaScript<\/h4>\n<p>Flutter-\u043a\u043e\u0434 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c JavaScript-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u0443.<\/p>\n<p>20 000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u0446\u0438\u043a\u043b. V8 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 228 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,006<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,197<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,197<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 33,52 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,03\u00d7 [0,03; 0,03].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Workload('interop_scalar','\u0413\u0440\u0430\u043d\u0438\u0446\u0430 JS','Dart \u2192 JS: \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b','20 000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432',sync:(){      var sum=0.0; for(var i=0;i&lt;20000;i++) {sum+=bridge.scalar(i.toDouble());} return sum;    })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>28. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 Dart \u0432 JavaScript<\/h4>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c. JavaScript \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 65 536 \u0447\u0438\u0441\u0435\u043b \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u0438\u0445.<\/p>\n<p>\u0412\u0440\u0435\u043c\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 toJS \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0433\u043e \u043e\u0431\u044a\u0451\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u0435\u0440\u0438\u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 512 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,079<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,155<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,155<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,98 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,51\u00d7 [0,50; 0,52].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Workload('interop_batch','\u0413\u0440\u0430\u043d\u0438\u0446\u0430 JS','Dart \u2192 JS: \u043e\u0434\u0438\u043d \u043f\u0430\u043a\u0435\u0442','65 536 \u0447\u0438\u0441\u0435\u043b; toJS + sum',sync:()=&gt;bridge.sum(interop.toJS))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>29. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 JavaScript \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/h4>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 JavaScript-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u043e\u0432\u0430 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0438\u0437 Dart. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u043f\u0443\u0442\u044c.<\/p>\n<p>\u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 JavaScript-\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0432 JavaScript, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 toDart \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u0440\u0435\u0434\u044b \u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u0438\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 417 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,078<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,155<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,154<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,98 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 0,50\u00d7 [0,50; 0,51].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Workload('interop_roundtrip','\u0413\u0440\u0430\u043d\u0438\u0446\u0430 JS','TypedData: toJS \u2192 toDart','65 536 \u0447\u0438\u0441\u0435\u043b; \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f JS',sync:(){      final js=interop.toJS; final sum=bridge.sum(js); return sum+js.toDart.last;    })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>30. \u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0439<\/h4>\n<p>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0439 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0430\u0445 Future \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<p>\u0422\u0435\u0441\u0442 1 000 \u0440\u0430\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 await Future.value(i) \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0439. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 109 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,103<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,057<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,056<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,80 \u0440\u0430\u0437\u0430.<\/strong> JS \/ Wasm ST: 1,80\u00d7 [1,77; 1,85].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Workload('microtasks','\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c','Future \/ microtasks','1 000 await Future.value',async:()async{      var sum=0;for(var i=0;i&lt;1000;i++) {sum+=await Future.value(i);}return sum;    })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/h3>\n<h4>31. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/h4>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c SHA-256 \u0447\u0435\u0440\u0435\u0437 WebCrypto. \u041e\u0431\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0432 \u043d\u0435\u0433\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 64 \u041a\u0438\u0411.<\/p>\n<p>\u0417\u0430\u043c\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0445\u0435\u0448\u0430 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0431\u0430\u0439\u0442\u043e\u0432. \u041a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 512 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,024<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,024<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,024<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,02\u00d7 [1,01; 1,03].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['webcrypto','WebCrypto: SHA-256','64 KiB; \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 native API'],      ['timer_wait','\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430','15 ms requested; elapsed measured'],      ['local_fetch','\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 HTTP fetch','64 KiB; no-store; \u0431\u0435\u0437 WAN'],      ['indexeddb','IndexedDB: put\/get\/delete','64 KiB; \u043e\u0434\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f'],      ['worker_transfer','Web Worker: transfer + \u043e\u0442\u0432\u0435\u0442','64 KiB; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'],    ]) Workload(c[0],'\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O',c[1],c[2],async:()async=&gt;(await bridge.nativeAsync(c[0].toJS).toDart).toDartDouble),@JS('bench.nativeAsync') external JSPromise&lt;JSNumber&gt; nativeAsync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'webcrypto':return [...new Uint8Array(await crypto.subtle.digest('SHA-256',bench.bytes))].reduce((a,b)=&gt;a+b,0);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>32. \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430<\/h4>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 15 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>\u0412\u0440\u0435\u043c\u044f \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043f\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0439. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 2 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">16,766<\/p>\n<\/td>\n<td>\n<p align=\"left\">17,044<\/p>\n<\/td>\n<td>\n<p align=\"left\">16,672<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 0,98\u00d7 [0,92; 1,03].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['webcrypto','WebCrypto: SHA-256','64 KiB; \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 native API'],      ['timer_wait','\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430','15 ms requested; elapsed measured'],      ['local_fetch','\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 HTTP fetch','64 KiB; no-store; \u0431\u0435\u0437 WAN'],      ['indexeddb','IndexedDB: put\/get\/delete','64 KiB; \u043e\u0434\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f'],      ['worker_transfer','Web Worker: transfer + \u043e\u0442\u0432\u0435\u0442','64 KiB; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'],    ]) Workload(c[0],'\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O',c[1],c[2],async:()async=&gt;(await bridge.nativeAsync(c[0].toJS).toDart).toDartDouble),@JS('bench.nativeAsync') external JSPromise&lt;JSNumber&gt; nativeAsync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'timer_wait':await new Promise(r=&gt;setTimeout(r,15));return 15;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>33. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h4>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 fetch \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 64 \u041a\u0438\u0411 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c HTTP-\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0439\u0442\u044b. \u0421\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 32 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,565<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,523<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,498<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,07\u00d7 [1,00; 1,10].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['webcrypto','WebCrypto: SHA-256','64 KiB; \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 native API'],      ['timer_wait','\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430','15 ms requested; elapsed measured'],      ['local_fetch','\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 HTTP fetch','64 KiB; no-store; \u0431\u0435\u0437 WAN'],      ['indexeddb','IndexedDB: put\/get\/delete','64 KiB; \u043e\u0434\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f'],      ['worker_transfer','Web Worker: transfer + \u043e\u0442\u0432\u0435\u0442','64 KiB; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'],    ]) Workload(c[0],'\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O',c[1],c[2],async:()async=&gt;(await bridge.nativeAsync(c[0].toJS).toDart).toDartDouble),@JS('bench.nativeAsync') external JSPromise&lt;JSNumber&gt; nativeAsync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'local_fetch':{const r=await fetch('payload.bin',{cache:'no-store'});if(!r.ok)throw Error('fetch '+r.status);return bench.sum(new Uint8Array(await r.arrayBuffer()));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>34. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/h4>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u044d\u0448 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440\u044b \u0432 IndexedDB. \u0412 \u043e\u043f\u044b\u0442\u0435 \u043e\u0434\u0438\u043d \u0431\u0443\u0444\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0422\u0430\u0439\u043c\u0435\u0440 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f; \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0441\u0443\u043c\u043c\u043e\u0439. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 73 \u0440\u0430\u0437\u0430.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,264<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,253<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,244<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,05\u00d7 [1,02; 1,07].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['webcrypto','WebCrypto: SHA-256','64 KiB; \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 native API'],      ['timer_wait','\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430','15 ms requested; elapsed measured'],      ['local_fetch','\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 HTTP fetch','64 KiB; no-store; \u0431\u0435\u0437 WAN'],      ['indexeddb','IndexedDB: put\/get\/delete','64 KiB; \u043e\u0434\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f'],      ['worker_transfer','Web Worker: transfer + \u043e\u0442\u0432\u0435\u0442','64 KiB; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'],    ]) Workload(c[0],'\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O',c[1],c[2],async:()async=&gt;(await bridge.nativeAsync(c[0].toJS).toDart).toDartDouble),@JS('bench.nativeAsync') external JSPromise&lt;JSNumber&gt; nativeAsync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'indexeddb':return await new Promise((resolve,reject)=&gt;{const tx=bench.db.transaction('scratch','readwrite');const store=tx.objectStore('scratch');    store.put(bench.bytes,'sample');let sum;store.get('sample').onsuccess=e=&gt;{sum=bench.sum(e.target.result);};store.delete('sample');    tx.oncomplete=()=&gt;resolve(sum);tx.&gt;reject(tx.error);tx.onabort=()=&gt;reject(tx.error);});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>35. \u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c<\/h4>\n<p>\u0424\u043e\u043d\u043e\u0432\u044b\u0439 Web Worker \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0417\u0434\u0435\u0441\u044c \u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440, \u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u0443\u043c\u043c\u0430 \u0431\u0430\u0439\u0442\u043e\u0432.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043f\u0438\u044f 64 \u041a\u0438\u0411, \u0437\u0430\u0442\u0435\u043c \u0435\u0451 ArrayBuffer \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f. Worker \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442. \u041f\u043e\u043b\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443, \u043e\u0431\u043c\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438, \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 76 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,046<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,045<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,045<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,046<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,048<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,048<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/strong> JS \/ Wasm ST: 0,99\u00d7 [0,95; 1,16].<\/p>\n<p><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 0,96\u00d7 [0,93; 0,97].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['webcrypto','WebCrypto: SHA-256','64 KiB; \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 native API'],      ['timer_wait','\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430','15 ms requested; elapsed measured'],      ['local_fetch','\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 HTTP fetch','64 KiB; no-store; \u0431\u0435\u0437 WAN'],      ['indexeddb','IndexedDB: put\/get\/delete','64 KiB; \u043e\u0434\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f'],      ['worker_transfer','Web Worker: transfer + \u043e\u0442\u0432\u0435\u0442','64 KiB; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'],    ]) Workload(c[0],'\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O',c[1],c[2],async:()async=&gt;(await bridge.nativeAsync(c[0].toJS).toDart).toDartDouble),@JS('bench.nativeAsync') external JSPromise&lt;JSNumber&gt; nativeAsync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'worker_transfer':return await new Promise((resolve,reject)=&gt;{const copy=bench.bytes.slice().buffer;bench.worker.onmessage=e=&gt;resolve(e.data);bench.worker.onmessage = ({data}) =&gt; {  let sum=0; for(const v of new Uint32Array(data)) sum+=v;  postMessage(sum);};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>36. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/h4>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439.<\/p>\n<p>JavaScript-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a 100 \u0440\u0430\u0437 \u043c\u0435\u043d\u044f\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 offsetWidth. \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442. \u0412 \u043e\u0431\u0435\u0438\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u043c\u0443 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0443 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 46 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,576<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,553<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,549<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,04\u00d7 [1,00; 1,06].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Workload('dom_layout','\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O','DOM: \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0442\u0438\u043b\u044f + forced layout','100 layout flushes; \u043e\u0431\u0449\u0438\u0439 JS helper',sync:()=&gt;bridge.nativeSync('dom_layout'.toJS))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'dom_layout':{let sum=0;for(let i=0;i&lt;100;i++){bench.dom.style.width=`${200+(i%17)}px`;sum+=bench.dom.offsetWidth;}return sum;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>Flutter: \u0442\u0435\u043a\u0441\u0442, \u0432\u0438\u0434\u0436\u0435\u0442\u044b, \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430<\/h3>\n<h4>37. \u0420\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043e Flutter<\/h4>\n<p>\u0412 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Flutter \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0430\u0431\u0437\u0430\u0446\u0435\u0432 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a. \u042d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f 100 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0431\u0437\u0430\u0446\u0435\u0432 Roboto \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 14 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438 \u0448\u0438\u0440\u0438\u043d\u043e\u0439 300 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 Paragraph \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 layout, \u0435\u0433\u043e \u0432\u044b\u0441\u043e\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443, \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f. \u0412\u043b\u0438\u044f\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 6 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,473<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,226<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,194<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,318<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,121<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,098<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/strong> JS \/ Wasm ST: 1,08\u00d7 [1,05; 1,13].<\/p>\n<p><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,06\u00d7 [1,05; 1,07].<\/p>\n<p>\u0412 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0430\u0431\u0437\u0430\u0446\u0435\u0432. \u042f \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Workload('text_layout','Flutter', 'Paragraph: \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 layout','100 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0431\u0437\u0430\u0446\u0435\u0432',sync:(){      var height=0.0;      for(var i=0;i&lt;100;i++) {        final builder=ui.ParagraphBuilder(ui.ParagraphStyle(fontFamily:'Roboto',fontSize:14))          ..addText('Paragraph $i: Flutter text layout and measurement. ' * 3);        final p=builder.build()..layout(const ui.ParagraphConstraints(width:300));height+=p.height;p.dispose();      }return height;    })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>38. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438<\/h4>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043b\u043e\u0442\u043d\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u0437 600 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0438 \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u043c\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 Flutter \u0437\u0430\u043d\u043e\u0432\u043e \u0433\u043e\u0442\u043e\u0432\u0438\u0442 \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0438 \u0441\u0446\u0435\u043d\u0443.<\/p>\n<p>\u0422\u0435\u0441\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0434\u0440 \u0438 24 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0434\u0451\u0442 endOfFrame. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u044b \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0434\u0440\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u0435\u043d \u0437\u0430\u043f\u0430\u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441\u0446\u0435\u043d\u044b. \u0412 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043c\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0435\u0440\u0438\u044f.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">427,875<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,513<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,495<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,04\u00d7 [1,04; 1,05].<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430: JavaScript \u2014 <strong>15,31 \u043c\u0441<\/strong>, Wasm ST \u2014 <strong>7,92 \u043c\u0441<\/strong>, Wasm MT \u2014 <strong>7,94 \u043c\u0441<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Future&lt;num&gt; runScene(String id)async{    setState((){scene=id;tick=0;});    await SchedulerBinding.instance.endOfFrame;    num checksum=0;    for(var i=0;i&lt;uiFrames;i++){      setState(()=&gt;tick=i+1);      if(id=='ui_scroll'&amp;&amp;scroll.hasClients){scroll.jumpTo((i*127.0)%scroll.position.maxScrollExtent);}      await SchedulerBinding.instance.endOfFrame;      checksum+=i+1;    }    return checksum;  }Widget sceneWidget(){    switch(scene){      case 'ui_widgets':return Wrap(children:List.generate(600,(i)=&gt;SizedBox(width:34,height:20,        child:ColoredBox(color:Color(0xff17304b+((i+tick)%12)*512),child:Text('${(i+tick)%99}',style:const TextStyle(fontSize:10))))));      case 'ui_scroll':return ListView.builder(controller:scroll,itemCount:50000,itemExtent:42,        itemBuilder:(context,i)=&gt;ListTile(dense:true,leading:const Icon(Icons.data_object),title:Text('Record $i'),trailing:Text('${i*17}')));      case 'ui_paint':case 'ui_layers':return CustomPaint(painter:StressPainter(tick,scene=='ui_layers'),size:Size.infinite);      default:return Center(child:Column(mainAxisSize:MainAxisSize.min,children:[        const Icon(Icons.science_outlined,size:48,color:Color(0xff38bdf8)),const SizedBox(height:12),        Text('${cases.length} \u0437\u0430\u0434\u0430\u0447 \u00b7 3 \u0440\u0435\u0436\u0438\u043c\u0430',style:Theme.of(context).textTheme.titleLarge),        const SizedBox(height:8),const Text('\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u00b7 \u043f\u0430\u043c\u044f\u0442\u044c \u00b7 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u00b7 Flutter'),      ]));    }  }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>39. \u041f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430<\/h4>\n<p>\u0412 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u0432\u0430\u0436\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ListView.builder \u0441 50 000 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f 24 \u0440\u0430\u0437\u0430 \u043f\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0447\u0435\u0440\u0435\u0437 jumpTo. Flutter \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0438 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0422\u0430\u043a\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u043c\u0435\u043d\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0435, \u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c\u0438 \u0448\u0430\u0433\u0430\u043c\u0438. \u0412 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043c\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0435\u0440\u0438\u044f.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,195<\/p>\n<\/td>\n<td>\n<p align=\"left\">409,913<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,355<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,00\u00d7 [1,00; 1,00].<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430: JavaScript \u2014 <strong>5,33 \u043c\u0441<\/strong>, Wasm ST \u2014 <strong>3,23 \u043c\u0441<\/strong>, Wasm MT \u2014 <strong>3,17 \u043c\u0441<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Future&lt;num&gt; runScene(String id)async{    setState((){scene=id;tick=0;});    await SchedulerBinding.instance.endOfFrame;    num checksum=0;    for(var i=0;i&lt;uiFrames;i++){      setState(()=&gt;tick=i+1);      if(id=='ui_scroll'&amp;&amp;scroll.hasClients){scroll.jumpTo((i*127.0)%scroll.position.maxScrollExtent);}      await SchedulerBinding.instance.endOfFrame;      checksum+=i+1;    }    return checksum;  }Widget sceneWidget(){    switch(scene){      case 'ui_widgets':return Wrap(children:List.generate(600,(i)=&gt;SizedBox(width:34,height:20,        child:ColoredBox(color:Color(0xff17304b+((i+tick)%12)*512),child:Text('${(i+tick)%99}',style:const TextStyle(fontSize:10))))));      case 'ui_scroll':return ListView.builder(controller:scroll,itemCount:50000,itemExtent:42,        itemBuilder:(context,i)=&gt;ListTile(dense:true,leading:const Icon(Icons.data_object),title:Text('Record $i'),trailing:Text('${i*17}')));      case 'ui_paint':case 'ui_layers':return CustomPaint(painter:StressPainter(tick,scene=='ui_layers'),size:Size.infinite);      default:return Center(child:Column(mainAxisSize:MainAxisSize.min,children:[        const Icon(Icons.science_outlined,size:48,color:Color(0xff38bdf8)),const SizedBox(height:12),        Text('${cases.length} \u0437\u0430\u0434\u0430\u0447 \u00b7 3 \u0440\u0435\u0436\u0438\u043c\u0430',style:Theme.of(context).textTheme.titleLarge),        const SizedBox(height:8),const Text('\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u00b7 \u043f\u0430\u043c\u044f\u0442\u044c \u00b7 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u00b7 Flutter'),      ]));    }  }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>40. \u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0438\u0433\u0443\u0440<\/h4>\n<p>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u043b\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u044b\u0441\u044f\u0447\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u0438\u0433\u0443\u0440 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440. \u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0432\u044b\u0431\u0440\u0430\u043d CustomPainter \u0441 2 000 \u043a\u0440\u0443\u0433\u0430\u043c\u0438.<\/p>\n<p>\u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 24 \u043a\u0430\u0434\u0440\u043e\u0432 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0444\u0438\u0433\u0443\u0440. \u0417\u0430\u043c\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u043e\u0432; \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 FrameTiming \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u0430\u043f\u044b Flutter. \u0418\u0442\u043e\u0433 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442 Dart-\u043a\u043e\u0434\u0430, \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0430 \u0438 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043c\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0435\u0440\u0438\u044f.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,127<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,448<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,475<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,00\u00d7 [1,00; 1,00].<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430: JavaScript \u2014 <strong>5,13 \u043c\u0441<\/strong>, Wasm ST \u2014 <strong>2,00 \u043c\u0441<\/strong>, Wasm MT \u2014 <strong>2,03 \u043c\u0441<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Future&lt;num&gt; runScene(String id)async{    setState((){scene=id;tick=0;});    await SchedulerBinding.instance.endOfFrame;    num checksum=0;    for(var i=0;i&lt;uiFrames;i++){      setState(()=&gt;tick=i+1);      if(id=='ui_scroll'&amp;&amp;scroll.hasClients){scroll.jumpTo((i*127.0)%scroll.position.maxScrollExtent);}      await SchedulerBinding.instance.endOfFrame;      checksum+=i+1;    }    return checksum;  }Widget sceneWidget(){    switch(scene){      case 'ui_widgets':return Wrap(children:List.generate(600,(i)=&gt;SizedBox(width:34,height:20,        child:ColoredBox(color:Color(0xff17304b+((i+tick)%12)*512),child:Text('${(i+tick)%99}',style:const TextStyle(fontSize:10))))));      case 'ui_scroll':return ListView.builder(controller:scroll,itemCount:50000,itemExtent:42,        itemBuilder:(context,i)=&gt;ListTile(dense:true,leading:const Icon(Icons.data_object),title:Text('Record $i'),trailing:Text('${i*17}')));      case 'ui_paint':case 'ui_layers':return CustomPaint(painter:StressPainter(tick,scene=='ui_layers'),size:Size.infinite);      default:return Center(child:Column(mainAxisSize:MainAxisSize.min,children:[        const Icon(Icons.science_outlined,size:48,color:Color(0xff38bdf8)),const SizedBox(height:12),        Text('${cases.length} \u0437\u0430\u0434\u0430\u0447 \u00b7 3 \u0440\u0435\u0436\u0438\u043c\u0430',style:Theme.of(context).textTheme.titleLarge),        const SizedBox(height:8),const Text('\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u00b7 \u043f\u0430\u043c\u044f\u0442\u044c \u00b7 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u00b7 Flutter'),      ]));    }  }class StressPainter extends CustomPainter {  StressPainter(this.tick,this.layers);final int tick;final bool layers;  @override void paint(Canvas canvas,Size size){    final paint=Paint();    if(layers){      for(var i=0;i&lt;100;i++){        final x=(i*31+tick*2)%size.width,y=(i*17)%size.height;        final r=Rect.fromLTWH(x,y,72,60);canvas.saveLayer(r,Paint()..color=const Color(0xaaeeeeee));        canvas.clipRRect(RRect.fromRectAndRadius(r,const Radius.circular(14)));        canvas.drawRect(r,paint..color=const Color(0xff38bdf8));        canvas.drawCircle(Offset(x+24,y+24),22,paint..color=const Color(0xffa78bfa));canvas.restore();      }    }else{      for(var i=0;i&lt;2000;i++){        paint.color=Color.fromARGB(160,(i*17)%256,(i*31)%256,190);        canvas.drawCircle(Offset((i*37+tick*3)%size.width,(i*19)%size.height),3+(i%7).toDouble(),paint);      }    }  }  @override bool shouldRepaint(StressPainter old)=&gt;old.tick!=tick||old.layers!=layers;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>41. \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441 \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438<\/h4>\n<p>\u041f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c, \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u0430\u044f \u043e\u0431\u0440\u0435\u0437\u043a\u0430 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u043b\u043e\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443. \u0417\u0434\u0435\u0441\u044c \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f 100 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 saveLayer, clipRRect, \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0438 \u043a\u0440\u0443\u0433\u0430, \u0437\u0430\u0442\u0435\u043c restore. \u041f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 JavaScript \u0438 Wasm \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Dart \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 Flutter-\u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440. \u0412 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043c\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0435\u0440\u0438\u044f.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,485<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,653<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,580<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/strong> JS \/ Wasm ST: 1,00\u00d7 [1,00; 1,00].<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430: JavaScript \u2014 <strong>3,41 \u043c\u0441<\/strong>, Wasm ST \u2014 <strong>1,76 \u043c\u0441<\/strong>, Wasm MT \u2014 <strong>1,69 \u043c\u0441<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">Future&lt;num&gt; runScene(String id)async{    setState((){scene=id;tick=0;});    await SchedulerBinding.instance.endOfFrame;    num checksum=0;    for(var i=0;i&lt;uiFrames;i++){      setState(()=&gt;tick=i+1);      if(id=='ui_scroll'&amp;&amp;scroll.hasClients){scroll.jumpTo((i*127.0)%scroll.position.maxScrollExtent);}      await SchedulerBinding.instance.endOfFrame;      checksum+=i+1;    }    return checksum;  }Widget sceneWidget(){    switch(scene){      case 'ui_widgets':return Wrap(children:List.generate(600,(i)=&gt;SizedBox(width:34,height:20,        child:ColoredBox(color:Color(0xff17304b+((i+tick)%12)*512),child:Text('${(i+tick)%99}',style:const TextStyle(fontSize:10))))));      case 'ui_scroll':return ListView.builder(controller:scroll,itemCount:50000,itemExtent:42,        itemBuilder:(context,i)=&gt;ListTile(dense:true,leading:const Icon(Icons.data_object),title:Text('Record $i'),trailing:Text('${i*17}')));      case 'ui_paint':case 'ui_layers':return CustomPaint(painter:StressPainter(tick,scene=='ui_layers'),size:Size.infinite);      default:return Center(child:Column(mainAxisSize:MainAxisSize.min,children:[        const Icon(Icons.science_outlined,size:48,color:Color(0xff38bdf8)),const SizedBox(height:12),        Text('${cases.length} \u0437\u0430\u0434\u0430\u0447 \u00b7 3 \u0440\u0435\u0436\u0438\u043c\u0430',style:Theme.of(context).textTheme.titleLarge),        const SizedBox(height:8),const Text('\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u00b7 \u043f\u0430\u043c\u044f\u0442\u044c \u00b7 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u00b7 Flutter'),      ]));    }  }class StressPainter extends CustomPainter {  StressPainter(this.tick,this.layers);final int tick;final bool layers;  @override void paint(Canvas canvas,Size size){    final paint=Paint();    if(layers){      for(var i=0;i&lt;100;i++){        final x=(i*31+tick*2)%size.width,y=(i*17)%size.height;        final r=Rect.fromLTWH(x,y,72,60);canvas.saveLayer(r,Paint()..color=const Color(0xaaeeeeee));        canvas.clipRRect(RRect.fromRectAndRadius(r,const Radius.circular(14)));        canvas.drawRect(r,paint..color=const Color(0xff38bdf8));        canvas.drawCircle(Offset(x+24,y+24),22,paint..color=const Color(0xffa78bfa));canvas.restore();      }    }else{      for(var i=0;i&lt;2000;i++){        paint.color=Color.fromARGB(160,(i*17)%256,(i*31)%256,190);        canvas.drawCircle(Offset((i*37+tick*3)%size.width,(i*19)%size.height),3+(i%7).toDouble(),paint);      }    }  }  @override bool shouldRepaint(StressPainter old)=&gt;old.tick!=tick||old.layers!=layers;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u0447 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438. Dart \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 JavaScript interop. \u0412 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 JavaScript-\u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u043e\u043e\u0447\u0435\u0440\u0451\u0434\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0443\u0447\u043d\u0430\u044f JavaScript-\u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Wasm-\u043c\u043e\u0434\u0443\u043b\u044c \u0438 SIMD-\u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<h4>42. \u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 JavaScript-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u0440\u0443\u0447\u043d\u0443\u044e JavaScript-\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0447\u0438\u0442\u0430\u0435\u0442 262 144 \u0446\u0435\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 Wasm \u0447\u0435\u0440\u0435\u0437 Uint32Array. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043b\u0443\u0436\u0438\u0442 \u0431\u0430\u0437\u043e\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0438 SIMD-\u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 114 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,261<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,260<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,259<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u042d\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f JavaScript-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441 Wasm-\u043c\u043e\u0434\u0443\u043b\u0435\u043c. \u0422\u0440\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0435\u0451 \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a Flutter.<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['external_js_sum','\u0421\u0443\u043c\u043c\u0430: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e JS','262 144 uint32; 1 MiB'],      ['external_wasm_sum','\u0421\u0443\u043c\u043c\u0430: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 Wasm','\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u044b\u0439 i32 result'],      ['external_simd_sum','\u0421\u0443\u043c\u043c\u0430: \u044f\u0432\u043d\u044b\u0439 Wasm SIMD','i32x4.add; \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432'],      ['external_js_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: JS BigInt','10 000 multiply\/xor modulo 2^64'],      ['external_wasm_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: Wasm i64','\u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'],    ]) Workload(c[0],'\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 Wasm-\u043c\u043e\u0434\u0443\u043b\u0438',c[1],c[2],sync:()=&gt;bridge.nativeSync(c[0].toJS)),@JS('bench.nativeSync') external double nativeSync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">sum:a=&gt;{let s=0;for(let i=0;i&lt;a.length;i++)s+=a[i];return s;},  case 'external_js_sum':return bench.sum(bench.ints);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>43. \u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c Wasm-\u043c\u043e\u0434\u0443\u043b\u0435<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0442\u0443 \u0436\u0435 \u0441\u0443\u043c\u043c\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c WebAssembly. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u043e\u043d \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043a \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u0435.<\/p>\n<p>\u041e\u0431\u044a\u0451\u043c \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 JavaScript-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c. \u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043f\u043e\u043c\u0435\u0449\u0430\u043b\u0430\u0441\u044c \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 218 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,070<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,069<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,069<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,76 \u0440\u0430\u0437\u0430.<\/strong> \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 JavaScript-\u0441\u0431\u043e\u0440\u043a\u0438. \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 95%-\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b: 3,76\u00d7 [2,22; 4,27].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['external_js_sum','\u0421\u0443\u043c\u043c\u0430: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e JS','262 144 uint32; 1 MiB'],      ['external_wasm_sum','\u0421\u0443\u043c\u043c\u0430: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 Wasm','\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u044b\u0439 i32 result'],      ['external_simd_sum','\u0421\u0443\u043c\u043c\u0430: \u044f\u0432\u043d\u044b\u0439 Wasm SIMD','i32x4.add; \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432'],      ['external_js_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: JS BigInt','10 000 multiply\/xor modulo 2^64'],      ['external_wasm_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: Wasm i64','\u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'],    ]) Workload(c[0],'\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 Wasm-\u043c\u043e\u0434\u0443\u043b\u0438',c[1],c[2],sync:()=&gt;bridge.nativeSync(c[0].toJS)),@JS('bench.nativeSync') external double nativeSync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'external_wasm_sum':return bench.wasm.sum(bench.ints.length);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e WebAssembly-\u043c\u043e\u0434\u0443\u043b\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(module  (memory (export \"memory\") 64)  (func (export \"sum\") (param $n i32) (result i32)    (local $p i32) (local $s i32)    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32.add (local.get $s) (i32.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 1)))      (br $loop))) (local.get $s))  ;; n must be a multiple of four. Tests cover n=0,4,8 and full input.  (func (export \"simd\") (param $n i32) (result i32)    (local $p i32) (local $s v128)    (local.set $s (v128.const i32x4 0 0 0 0))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32x4.add (local.get $s) (v128.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 4)))      (br $loop)))    (i32.add (i32.add (i32x4.extract_lane 0 (local.get $s)) (i32x4.extract_lane 1 (local.get $s)))      (i32.add (i32x4.extract_lane 2 (local.get $s)) (i32x4.extract_lane 3 (local.get $s)))))  (func (export \"i64mix\") (param $n i32) (result i32)    (local $i i32) (local $x i64)    (local.set $x (i64.const 1234567))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $i) (local.get $n)))      (local.set $x (i64.xor (i64.mul (local.get $x) (i64.const 6364136223846793005)) (i64.extend_i32_u (local.get $i))))      (local.set $x (i64.xor (local.get $x) (i64.shr_u (local.get $x) (i64.const 33))))      (local.set $i (i32.add (local.get $i) (i32.const 1))) (br $loop)))    (i32.and (i32.wrap_i64 (local.get $x)) (i32.const 2147483647))))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>44. \u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441 SIMD<\/h4>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u0430 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SIMD. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439.<\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 v128, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 i32x4.add \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0412\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043a\u0440\u0430\u0442\u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u043c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 157 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,031<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,032<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,031<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Wasm SIMD \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 8,46 \u0440\u0430\u0437\u0430.<\/strong> \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 JavaScript-\u0441\u0431\u043e\u0440\u043a\u0438. \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 95%-\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b: 8,46\u00d7 [5,08; 9,47].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['external_js_sum','\u0421\u0443\u043c\u043c\u0430: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e JS','262 144 uint32; 1 MiB'],      ['external_wasm_sum','\u0421\u0443\u043c\u043c\u0430: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 Wasm','\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u044b\u0439 i32 result'],      ['external_simd_sum','\u0421\u0443\u043c\u043c\u0430: \u044f\u0432\u043d\u044b\u0439 Wasm SIMD','i32x4.add; \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432'],      ['external_js_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: JS BigInt','10 000 multiply\/xor modulo 2^64'],      ['external_wasm_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: Wasm i64','\u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'],    ]) Workload(c[0],'\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 Wasm-\u043c\u043e\u0434\u0443\u043b\u0438',c[1],c[2],sync:()=&gt;bridge.nativeSync(c[0].toJS)),@JS('bench.nativeSync') external double nativeSync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'external_simd_sum':return bench.wasm.simd(bench.ints.length);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e WebAssembly-\u043c\u043e\u0434\u0443\u043b\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(module  (memory (export \"memory\") 64)  (func (export \"sum\") (param $n i32) (result i32)    (local $p i32) (local $s i32)    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32.add (local.get $s) (i32.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 1)))      (br $loop))) (local.get $s))  ;; n must be a multiple of four. Tests cover n=0,4,8 and full input.  (func (export \"simd\") (param $n i32) (result i32)    (local $p i32) (local $s v128)    (local.set $s (v128.const i32x4 0 0 0 0))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32x4.add (local.get $s) (v128.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 4)))      (br $loop)))    (i32.add (i32.add (i32x4.extract_lane 0 (local.get $s)) (i32x4.extract_lane 1 (local.get $s)))      (i32.add (i32x4.extract_lane 2 (local.get $s)) (i32x4.extract_lane 3 (local.get $s)))))  (func (export \"i64mix\") (param $n i32) (result i32)    (local $i i32) (local $x i64)    (local.set $x (i64.const 1234567))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $i) (local.get $n)))      (local.set $x (i64.xor (i64.mul (local.get $x) (i64.const 6364136223846793005)) (i64.extend_i32_u (local.get $i))))      (local.set $x (i64.xor (local.get $x) (i64.shr_u (local.get $x) (i64.const 33))))      (local.set $i (i32.add (local.get $i) (i32.const 1))) (br $loop)))    (i32.and (i32.wrap_i64 (local.get $x)) (i32.const 2147483647))))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>45. \u0422\u043e\u0447\u043d\u044b\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 JavaScript<\/h4>\n<p>\u0414\u043b\u044f \u0442\u043e\u0447\u043d\u044b\u0445 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432 JavaScript \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f BigInt. \u0412 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 10 000 \u0448\u0430\u0433\u043e\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u043b\u0430\u0434\u0448\u0438\u0435 64 \u0431\u0438\u0442\u0430, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f XOR \u0441\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u0421\u0442\u0430\u0440\u0448\u0438\u0435 \u0440\u0430\u0437\u0440\u044f\u0434\u044b \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438. \u042d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e Wasm-\u043c\u043e\u0434\u0443\u043b\u044f. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 112 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,181<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,179<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,180<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u042d\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f JavaScript-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441 Wasm-\u043c\u043e\u0434\u0443\u043b\u0435\u043c. \u0422\u0440\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0435\u0451 \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a Flutter.<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['external_js_sum','\u0421\u0443\u043c\u043c\u0430: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e JS','262 144 uint32; 1 MiB'],      ['external_wasm_sum','\u0421\u0443\u043c\u043c\u0430: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 Wasm','\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u044b\u0439 i32 result'],      ['external_simd_sum','\u0421\u0443\u043c\u043c\u0430: \u044f\u0432\u043d\u044b\u0439 Wasm SIMD','i32x4.add; \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432'],      ['external_js_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: JS BigInt','10 000 multiply\/xor modulo 2^64'],      ['external_wasm_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: Wasm i64','\u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'],    ]) Workload(c[0],'\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 Wasm-\u043c\u043e\u0434\u0443\u043b\u0438',c[1],c[2],sync:()=&gt;bridge.nativeSync(c[0].toJS)),@JS('bench.nativeSync') external double nativeSync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  bench.i64js=n=&gt;{let x=1234567n;for(let i=0;i&lt;n;i++){x=BigInt.asUintN(64,x*6364136223846793005n^BigInt(i));x^=x&gt;&gt;33n;}return Number(x&amp;2147483647n);};  case 'external_js_i64':return bench.i64js(10000);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>46. \u0422\u043e\u0447\u043d\u044b\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 Wasm<\/h4>\n<p>WebAssembly \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 JavaScript BigInt. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0432\u0443\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043d\u043e\u0439 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438. \u0414\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0447\u0438\u0441\u043b\u0430, \u043a\u0430\u043a \u0432 127-\u0431\u0438\u0442\u043d\u043e\u043c \u0442\u0435\u0441\u0442\u0435 Dart BigInt, \u043d\u0443\u0436\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 512 \u0440\u0430\u0437.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,014<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,014<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,014<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 13,07 \u0440\u0430\u0437\u0430.<\/strong> \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 JavaScript-\u0441\u0431\u043e\u0440\u043a\u0438. \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 95%-\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b: 13,07\u00d7 [12,93; 21,78].<\/p>\n<details class=\"spoiler\">\n<summary>Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">for(final c in const [      ['external_js_sum','\u0421\u0443\u043c\u043c\u0430: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e JS','262 144 uint32; 1 MiB'],      ['external_wasm_sum','\u0421\u0443\u043c\u043c\u0430: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 Wasm','\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u044b\u0439 i32 result'],      ['external_simd_sum','\u0421\u0443\u043c\u043c\u0430: \u044f\u0432\u043d\u044b\u0439 Wasm SIMD','i32x4.add; \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432'],      ['external_js_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: JS BigInt','10 000 multiply\/xor modulo 2^64'],      ['external_wasm_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: Wasm i64','\u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'],    ]) Workload(c[0],'\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 Wasm-\u043c\u043e\u0434\u0443\u043b\u0438',c[1],c[2],sync:()=&gt;bridge.nativeSync(c[0].toJS)),@JS('bench.nativeSync') external double nativeSync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>JavaScript-\u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">  case 'external_wasm_i64':return bench.wasm.i64mix(10000);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e WebAssembly-\u043c\u043e\u0434\u0443\u043b\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(module  (memory (export \"memory\") 64)  (func (export \"sum\") (param $n i32) (result i32)    (local $p i32) (local $s i32)    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32.add (local.get $s) (i32.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 1)))      (br $loop))) (local.get $s))  ;; n must be a multiple of four. Tests cover n=0,4,8 and full input.  (func (export \"simd\") (param $n i32) (result i32)    (local $p i32) (local $s v128)    (local.set $s (v128.const i32x4 0 0 0 0))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32x4.add (local.get $s) (v128.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 4)))      (br $loop)))    (i32.add (i32.add (i32x4.extract_lane 0 (local.get $s)) (i32x4.extract_lane 1 (local.get $s)))      (i32.add (i32x4.extract_lane 2 (local.get $s)) (i32x4.extract_lane 3 (local.get $s)))))  (func (export \"i64mix\") (param $n i32) (result i32)    (local $i i32) (local $x i64)    (local.set $x (i64.const 1234567))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $i) (local.get $n)))      (local.set $x (i64.xor (i64.mul (local.get $x) (i64.const 6364136223846793005)) (i64.extend_i32_u (local.get $i))))      (local.set $x (i64.xor (local.get $x) (i64.shr_u (local.get $x) (i64.const 33))))      (local.set $i (i32.add (local.get $i) (i32.const 1))) (br $loop)))    (i32.and (i32.wrap_i64 (local.get $x)) (i32.const 2147483647))))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 Dart \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f<\/h3>\n<p>\u0412 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0434\u0432\u0435 \u0432\u0435\u0449\u0438: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u0438\u0442\u0441\u044f \u0432\u0441\u044f \u0441\u0435\u0440\u0438\u044f \u0438\u0437 24 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b Flutter \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430. \u041c\u0435\u0436\u0434\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u0434 \u0436\u0434\u0451\u0442 endOfFrame. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0438\u0438 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u043a \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u0430\u0434\u0440\u043e\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/p>\n<p><strong>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u0430 (build)<\/strong> \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 Flutter \u0441 \u0432\u0438\u0434\u0436\u0435\u0442\u0430\u043c\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0446\u0435\u043d\u044b. <strong>\u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f (raster)<\/strong> \u2014 \u044d\u0442\u0430\u043f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0446\u0435\u043d\u044b \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0438\u0436\u043e\u043a Flutter. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f GPU \u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u043a\u0430\u0437 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043c\u0435\u0434\u0438\u0430\u043d\u044b \u0438 p95. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e 95% \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443\u043b\u043e\u0436\u0438\u043b\u0438\u0441\u044c \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0434\u043e\u043b\u044c\u0448\u0435 25 \u043c\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0434\u0440\u0430\u043c\u0438.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438 \u0440\u0435\u0436\u0438\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u0430, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430: p95, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f: p95, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043a\u0430\u0434\u0440\u043e\u0432: p95, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0434\u043e\u043b\u044c\u0448\u0435 25 \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430JavaScript \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,332<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,448<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,416<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,540<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,563<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430Wasm \u00b7 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,226<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,262<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,412<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,627<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,538<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430Wasm \u00b7 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,170<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,074<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,625<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,203<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,570<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0438\u0433\u0443\u0440JavaScript \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,133<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,567<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,585<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,735<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,555<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0438\u0433\u0443\u0440Wasm \u00b7 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,000<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,674<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,650<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,019<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,523<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0438\u0433\u0443\u0440Wasm \u00b7 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,025<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,468<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,812<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,300<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,618<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441 \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438JavaScript \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,413<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,930<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,246<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,456<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,580<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441 \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438Wasm \u00b7 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,756<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,880<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,248<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,655<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,546<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441 \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438Wasm \u00b7 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,688<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,328<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,413<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,036<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,570<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438JavaScript \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">15,310<\/p>\n<\/td>\n<td>\n<p align=\"left\">16,621<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,040<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,205<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,036<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438Wasm \u00b7 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">7,920<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,805<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,208<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,362<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,559<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438Wasm \u00b7 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u00b7 1050 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">7,943<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,583<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,370<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,797<\/p>\n<\/td>\n<td>\n<p align=\"left\">18,575<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,0%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u043e\u0431\u0449\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 JavaScript \u0438 Wasm ST. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u0443 Wasm \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0422\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0430\u0441 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0440\u0438\u0441\u043a\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u043f\u0440\u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u044f\u0436\u0451\u043b\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435.<\/p>\n<p>Wasm MT \u0442\u0430\u043a\u0436\u0435 \u0434\u0430\u043b \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0438\u0439 \u043a Wasm ST. \u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u044d\u0442\u0430\u043f \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 600 \u044f\u0447\u0435\u0435\u043a \u0441\u0442\u0430\u043b \u0434\u043e\u043b\u044c\u0448\u0435. \u042d\u0442\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0430; \u043e\u0446\u0435\u043d\u043a\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438 \u0432\u0441\u044e \u0441\u0435\u0440\u0438\u044e, \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0434\u0440\u0430\u043c\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u0430\u0434\u0440\u043e\u0432 \u0438 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>JS \/ ST \u0438 JS \/ MT \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u043a\u0430\u0434\u0440\u0430. \u0412 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 ST \/ MT \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 Wasm. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0435\u0436\u0438\u043c \u0432 \u0437\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u044d\u0442\u0430\u043f \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430: JS \/ ST<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430: JS \/ MT<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0441\u044f \u0441\u0435\u0440\u0438\u044f: ST \/ MT<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f: ST \/ MT<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,65\u00d7 [1,60; 1,73]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,69\u00d7 [1,66; 1,75]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,66\u00d7 [0,63; 0,72]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0438\u0433\u0443\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,56\u00d7 [2,43; 2,61]<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,54\u00d7 [2,44; 2,60]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,94\u00d7 [0,93; 0,97]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441 \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,94\u00d7 [1,87; 2,10]<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,02\u00d7 [1,97; 2,09]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,92\u00d7 [0,91; 0,96]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,93\u00d7 [1,90; 1,96]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,91\u00d7 [1,87; 1,99]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,88\u00d7 [0,87; 0,90]<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<h4>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438 Dart Int32x4 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438<\/h4>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0441 JavaScript \u043d\u0430 Wasm. \u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u0439 Wasm-\u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 Int32x4. \u0412\u044b\u0431\u043e\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0420\u0435\u0436\u0438\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Dart Int32x4, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u0446\u0438\u043a\u043b\u0430 \/ Int32x4 \u00b7 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 95%<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">JavaScript<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,100<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,349<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,28\u00d7 [0,28; 0,30]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Wasm \u00b7 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,108<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,190<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,57\u00d7 [0,54; 0,58]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Wasm \u00b7 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,108<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,187<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,58\u00d7 [0,54; 0,58]<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Dart 3.13.1 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 NaiveInt32x4List \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430, \u0430 I32x4.operator + \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a WasmI32x4. \u0412\u0440\u0435\u043c\u044f \u0432\u0441\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438. \u042d\u0442\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u044b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e.<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 WABT 1.0.39 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b SIMD-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e i32x4.add. \u041d\u0430 GC-\u0442\u0438\u043f\u0430\u0445 \u043f\u043e\u043b\u043d\u043e\u0433\u043e Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0431\u043e\u0440 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f. \u0412\u044b\u0432\u043e\u0434 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Dart \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e SDK \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043c\u0435\u0440\u044b.<\/p>\n<h3>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043e \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430 Flutter \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0435\u0440\u0432\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 Chrome \u0441 \u043f\u0443\u0441\u0442\u044b\u043c HTTP-\u043a\u044d\u0448\u0435\u043c. \u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u041e\u0421 \u0438 \u0435\u0451 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043a\u044d\u0448 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0420\u0435\u0436\u0438\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0435\u0440\u0432\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438, \u041c\u0438\u0411<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">JavaScript<\/p>\n<\/td>\n<td>\n<p align=\"left\">337,650<\/p>\n<\/td>\n<td>\n<p align=\"left\">145,845<\/p>\n<\/td>\n<td>\n<p align=\"left\">7,56<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Wasm \u00b7 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">225,775<\/p>\n<\/td>\n<td>\n<p align=\"left\">96,325<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,43<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Wasm \u00b7 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">181,795<\/p>\n<\/td>\n<td>\n<p align=\"left\">63,278<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,43<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c Wasm-\u0441\u0431\u043e\u0440\u043a\u0438. \u0420\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0431\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0435\u0442\u0438 \u0438 \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0440 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e endOfFrame \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0443\u043c\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043f\u043e Resource Timing; \u043e\u0445\u0432\u0430\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u0438\u043c API. \u0417\u0430\u043c\u0435\u0440\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438, \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0424\u0430\u0439\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440, \u0431\u0430\u0439\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 SHA-256<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">site\/js\/main.dart.js<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,211,934<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5ca210815161b6d95c3cb6f70ed9aab24e199fb2f739477d1fd1e0a48c0e53ba<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">site\/wasm\/main.dart.wasm<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,802,312<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>8436d1a93c45d27c365d141b5c0beeff4caa53d4b9eb7a371138102761d7abd2<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">site\/wasm\/main.dart.mjs<\/p>\n<\/td>\n<td>\n<p align=\"left\">30,966<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>a6a992033cc9d2d944baf0813d119c88d185043955686028ce28caa4f643028e<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<h3>\u0427\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h3>\n<p><strong>\u0414\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Wasm \u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043f\u0430\u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0434\u0440\u0430.<\/strong> \u041d\u0430 \u043d\u0430\u0448\u0435\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u0446\u0435\u043d\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0434\u0432\u043e\u0435, \u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0438\u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430. \u0422\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u0435\u043d \u0434\u043b\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0436\u0434\u0451\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u0430\u0434\u0440 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/p>\n<p><strong>\u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u0430\u0436\u043d\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u0444\u043e\u0440\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/strong> Wasm \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0441\u0435\u0431\u044f \u0432 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. JavaScript \u0432\u044b\u0438\u0433\u0440\u0430\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u0441 \u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u0414\u0430\u0436\u0435 \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u2014 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0434\u0430\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p><strong>\u041a\u0440\u0443\u043f\u043d\u044b\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445.<\/strong> \u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u044f\u0432\u043d\u044b\u043c SIMD \u0432\u044b\u0438\u0433\u0440\u0430\u043b\u043e \u0443 \u0440\u0443\u0447\u043d\u043e\u0433\u043e JavaScript-\u0446\u0438\u043a\u043b\u0430 \u0432 8,46 \u0440\u0430\u0437\u0430, \u0430 \u0442\u043e\u0447\u043d\u044b\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u0432 13,07 \u0440\u0430\u0437\u0430. \u042d\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 Wasm. \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><strong>\u0427\u0430\u0441\u0442\u044b\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b JavaScript \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430.<\/strong> \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 interop \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 JavaScript-\u0441\u0431\u043e\u0440\u043a\u0430. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0437\u0430 \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0430 \u0435\u0451 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439.<\/p>\n<p><strong>\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c.<\/strong> \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 WebCrypto, IndexedDB, \u0442\u0430\u0439\u043c\u0435\u0440 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0439 Dart-\u043a\u043e\u0434; \u0432\u0440\u0435\u043c\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435.<\/p>\n<p>\u041e\u0431\u0449\u0435\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438: \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u0442\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u043d\u0435\u0435 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432\u0441\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u042d\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u0410\u043c\u0434\u0430\u043b\u0430:<\/p>\n<pre><code>\u041e\u0431\u0449\u0435\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 = 1 \/ ((1 \u2212 p) + p \/ s)p \u2014 \u0434\u043e\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438s \u2014 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0435\u0431-\u0441\u0431\u043e\u0440\u043a\u0438 Flutter \u0443\u0436\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0442 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438: JavaScript-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Wasm \u0432\u043d\u0443\u0442\u0440\u0438 CanvasKit, \u0430 Wasm-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Dart \u0447\u0435\u0440\u0435\u0437 WasmGC \u0438 \u0440\u0438\u0441\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 Skwasm. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 Dart, \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0430, \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<h3>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/h3>\n<h4>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. JavaScript-\u043f\u0438\u043b\u043e\u0442 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043b \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0434\u043b\u044f \u0442\u0440\u0451\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432. \u0426\u0435\u043b\u0435\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e 25 \u043c\u0441, \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u2014 512 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u0441\u0435 \u0448\u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u043e\u0432. \u0414\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0430\u0434\u0430\u0447 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043d \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439; \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f. \u041c\u0435\u0436\u0434\u0443 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043f\u0430\u0443\u0437\u044b. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 150 \u043c\u0441, \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 200 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0414\u043b\u044f xorshift \u043f\u043e\u0441\u043b\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043c\u0438\u043d\u0438\u043c\u0443\u043c 1 000 \u043c\u0441. UI-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043e\u0434\u0438\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f \u0441\u0435\u043c\u0438 \u0437\u0430\u0434\u0430\u0447 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 15 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 21 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u043c \u0437\u0430\u043c\u0435\u0440\u043e\u043c. \u0415\u0451 \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0432\u0441\u0435 36 \u0441\u0435\u0441\u0441\u0438\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<h4>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u043e\u0432<\/h4>\n<p>\u0414\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b bootstrap-\u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442\u043e\u043c: 4 000 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0438\u0437 \u043f\u0430\u0440\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u044b\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439. \u0413\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u2014 1 \/ 1,10 \u0438 1,10. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438; \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0434\u043e\u0447\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u0441 \u043e\u0446\u0435\u043d\u043a\u0430\u043c\u0438 \u0431\u0435\u0437 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f. \u041a\u0430\u0434\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0435\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0441\u0435\u0441\u0441\u0438\u044f.<\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u041c\u0435\u0436\u0434\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438; \u0434\u043b\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043c\u0430\u0442\u0440\u0438\u0446 \u0438 \u0430\u0443\u0434\u0438\u043e\u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043f\u0440\u0438\u043d\u044f\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a 10\u207b\u2078. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u0447\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 JavaScript.<\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f xorshift, \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043c\u0430\u0442\u0440\u0438\u0446, \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, Fibonacci, Unicode, JSON, \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 BigInt. \u041c\u0430\u0442\u0440\u0438\u0446\u044b \u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u0441\u0432\u0435\u0440\u0435\u043d\u044b \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445. \u0414\u043b\u044f SHA-256 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0434\u043b\u044f abc. Wasm-\u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0445\u043e\u0434\u0430\u0445, \u0430 64-\u0431\u0438\u0442\u043d\u0430\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u2014 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 Python.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0432 \u0440\u0430\u0441\u0447\u0451\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f Wasm, \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. \u041e\u0448\u0438\u0431\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0430 \u0432\u044b\u0431\u043e\u0440 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u0440\u0443\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0441\u0431\u043e\u0440\u043a\u0430\u043c\u0438, \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043e\u0442\u0447\u0451\u0442\u0430 \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0443 \u043d\u0430 \u0443\u0437\u043a\u043e\u0439 \u0448\u0438\u0440\u0438\u043d\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>Dart: \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0438 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">import 'dart:typed_data';import 'package:flutter_test\/flutter_test.dart';import 'package:wasm_versus_javascript\/kernels.dart';void main(){  test('Independent known answers and boundary cases',(){expect(validateKernels()['passed'],15);});  test('Matrix product matches independent dot-product reference',(){    for(final n in [1,2,3,5,9]){      final a=List.generate(n*n,(i)=&gt;(i%7-3).toDouble());      final b=List.generate(n*n,(i)=&gt;(i%11-5).toDouble());      final got=multiply(a,b,n);      for(var row=0;row&lt;n;row++){for(var col=0;col&lt;n;col++){        final expected=List.generate(n,(k)=&gt;a[row*n+k]*b[k*n+col]).fold&lt;double&gt;(0,(x,y)=&gt;x+y);        expect(got[row*n+col],expected);      }}    }  });  test('Stencil matches an independent neighborhood implementation',(){    for(final w in [2,3,4,7,16]){      final values=Uint32List.fromList(List.generate(w*w,(i)=&gt;(i*17)%256));      var expected=0;      for(var y=1;y&lt;w-1;y++){for(var x=1;x&lt;w-1;x++){        var pixel=0;for(final dy in [-1,0,1]){for(final dx in [-1,0,1]){pixel+=values[(y+dy)*w+x+dx];}}        expected+=pixel~\/9;      }}expect(stencil(values,w),expected);    }  });  test('Seeded kernels return stable finite observable outputs',(){    final kernels=makeKernels(DataSet(20261009));    expect(kernels.map((k)=&gt;k.id).toSet().length,kernels.length);    for(final k in kernels){final a=k.run(),b=k.run();expect(a.isFinite,true,reason:k.id);expect(a,b,reason:k.id);}  });}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h4>\u041a\u0430\u043a \u0443\u0442\u043e\u0447\u043d\u044f\u043b\u0441\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442<\/h4>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c xorshift-\u0442\u0435\u0441\u0442\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b JavaScript \u0431\u044b\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b 18 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439: 15 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0441\u0435\u043c\u044c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445. \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0438 \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0451\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445 \u043f\u043e\u043f\u0430\u043b\u043e \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0,8 \u0434\u043e 1,25. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0432 xorshift \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 UI-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430. \u0412\u0441\u0435 18 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<p>\u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0435\u0440\u0438\u044f \u0434\u0430\u043b\u0430 JavaScript 1,680 \u043c\u0441, Wasm ST 0,619 \u043c\u0441, Wasm MT 0,619 \u043c\u0441. \u041e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 126 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0438 270 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438. \u041f\u043e\u0441\u043b\u0435 \u0430\u0443\u0434\u0438\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0440\u0430\u0437\u0440\u044f\u0434\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435. \u041e\u0431\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437 18 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0438 \u0441\u0435\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041d\u043e\u0432\u044b\u0435 252 \u043f\u0430\u043a\u0435\u0442\u0430 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043f\u0440\u0435\u0436\u043d\u0438\u0435 \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 44 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0441\u0435\u0440\u0438\u044e. \u0412 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 5 796 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<p>\u0412 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0443\u0441\u043a \u0434\u0430\u043b \u0434\u0440\u0443\u0433\u0443\u044e \u0432\u044b\u0441\u043e\u0442\u0443 \u0430\u0431\u0437\u0430\u0446\u0435\u0432. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a \u0441\u0435\u0441\u0441\u0438\u0438 10 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0451\u043d \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445. \u0410\u0440\u0445\u0438\u0432 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 441 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0438 315 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430. \u0412 \u0438\u0442\u043e\u0433 \u0432\u043e\u0448\u0451\u043b \u043f\u043e\u0432\u0442\u043e\u0440 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0435\u043c\u0438 \u0437\u0430\u0434\u0430\u0447, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u0435\u0439\u0441\u043e\u0432. \u041e\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0435\u0439 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u0438 V8. \u0422\u0430\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0434\u0430\u0447\u0438 \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0438 \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0451\u0445 \u0437\u0430\u043c\u0435\u0440\u043e\u0432. \u0425\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432\u044b\u0448\u043b\u0430 \u0437\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043e\u0442 0,8 \u0434\u043e 1,25: \u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c; \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438; \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u0440\u0430\u0441\u0447\u0451\u0442\u0430\u0445. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430 \u2014 \u043f\u0440\u043e\u0433\u0440\u0435\u0432, \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430.<\/p>\n<\/div>\n<\/details>\n<h4>\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438<\/h4>\n<p>\u0412\u044b\u0432\u043e\u0434\u044b \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c, \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u043c\u0443 Chrome \u043d\u0430 Apple M4. \u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u044e\u0442 \u043e\u0434\u043d\u0443 \u0441\u0440\u0435\u0434\u0443. \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u041e\u0421, \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u043a\u044d\u0448\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u0431\u0440\u043e\u0441. \u0412\u0445\u043e\u0434\u044b \u043c\u0438\u043a\u0440\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0434 \u043d\u0438\u0445.<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u043a\u0440\u043e\u043c\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432\u0445\u043e\u0434\u044f\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043e\u0431\u044a\u0451\u043c\u0430\u0445 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 16 \u041a\u0438\u0411 \u0438 4 \u041c\u0438\u0411 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438.<\/p>\n<h3>\u0421\u0432\u043e\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0421\u0441\u044b\u043b\u043a\u0438 \u0432\u0435\u0434\u0443\u0442 \u043a \u0440\u0430\u0437\u0431\u043e\u0440\u0443 \u0437\u0430\u0434\u0430\u0447\u0438, \u0435\u0451 \u043a\u043e\u0434\u0443 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0417\u0430\u0434\u0430\u0447\u0430<\/p>\n<\/th>\n<th data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">JavaScript, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm ST, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">Wasm MT, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">JS \/ ST \u00b7 95%<\/p>\n<\/th>\n<th>\n<p align=\"left\">JS \/ MT \u00b7 95%<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-int32\" rel=\"noopener nofollow\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">1,678<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,617<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,615<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,72\u00d7 [2,71; 2,72]<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,72\u00d7 [2,70; 2,72]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,72 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-double_dot\" rel=\"noopener nofollow\">\u041f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,078<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,241<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,239<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,32\u00d7 [0,32; 0,34]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,33\u00d7 [0,32; 0,33]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,09 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-transcendental\" rel=\"noopener nofollow\">\u0421\u0438\u043d\u0443\u0441\u044b, \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u044b \u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u043a\u043e\u0440\u043d\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,252<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,255<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,254<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [0,99; 1,01]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [0,99; 1,01]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-matrix\" rel=\"noopener nofollow\">\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,307<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,443<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,443<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,69\u00d7 [0,67; 0,72]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,69\u00d7 [0,67; 0,72]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,44 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-image_stencil\" rel=\"noopener nofollow\">\u0424\u0438\u043b\u044c\u0442\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,349<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,184<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,182<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,88\u00d7 [1,86; 1,97]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,91\u00d7 [1,88; 1,97]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,88 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-audio_fir\" rel=\"noopener nofollow\">\u0424\u0438\u043b\u044c\u0442\u0440 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,163<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,169<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,168<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,96\u00d7 [0,95; 1,03]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,97\u00d7 [0,94; 1,04]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-branch\" rel=\"noopener nofollow\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,631<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,809<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,654<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,77\u00d7 [0,69; 0,97]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99\u00d7 [0,71; 1,08]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-recursion\" rel=\"noopener nofollow\">\u041c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,505<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,130<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,128<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,89\u00d7 [3,84; 3,90]<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,94\u00d7 [3,89; 4,01]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,89 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-bigint\" rel=\"noopener nofollow\">\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">1,319<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,475<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,475<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,78\u00d7 [2,75; 2,84]<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,80\u00d7 [2,69; 2,84]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,78 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-dart_scalar_vector\" rel=\"noopener nofollow\">\u0422\u0430 \u0436\u0435 \u0441\u0443\u043c\u043c\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,100<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,108<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,108<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,92\u00d7 [0,91; 0,95]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,93\u00d7 [0,91; 0,95]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-dart_vector\" rel=\"noopener nofollow\">\u0421\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u0435\u043b \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,349<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,190<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,187<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85\u00d7 [1,74; 1,89]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,87\u00d7 [1,75; 1,92]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,85 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-memory_4096\" rel=\"noopener nofollow\">\u0427\u0442\u0435\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,003<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,002<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,002<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,23\u00d7 [1,00; 1,25]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,25\u00d7 [1,00; 1,27]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-memory_1048576\" rel=\"noopener nofollow\">\u0427\u0442\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,642<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,531<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,529<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,20\u00d7 [1,20; 1,22]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,22\u00d7 [1,21; 1,22]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,20 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-random_memory\" rel=\"noopener nofollow\">\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">1,388<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,471<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,487<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,90\u00d7 [0,78; 0,97]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,89\u00d7 [0,77; 0,97]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-bulk_copy\" rel=\"noopener nofollow\">\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,059<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,070<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,070<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,83\u00d7 [0,83; 0,84]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,84\u00d7 [0,82; 0,85]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,20 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-allocation_short\" rel=\"noopener nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,101<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,169<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,169<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,59\u00d7 [0,59; 0,60]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,60\u00d7 [0,58; 0,60]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,68 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-allocation_graph\" rel=\"noopener nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043d\u0435\u0439<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,078<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,084<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,084<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,92\u00d7 [0,91; 0,94]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,93\u00d7 [0,89; 0,95]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-dispatch\" rel=\"noopener nofollow\">\u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,553<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,486<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,484<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,13\u00d7 [1,11; 1,14]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,13\u00d7 [1,12; 1,14]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,13 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-sort\" rel=\"noopener nofollow\">\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">3,441<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,679<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,738<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,94\u00d7 [0,88; 1,40]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,92\u00d7 [0,88; 1,41]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-map\" rel=\"noopener nofollow\">\u041f\u043e\u0438\u0441\u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,258<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,395<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,421<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,65\u00d7 [0,61; 0,68]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,62\u00d7 [0,61; 0,65]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,54 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-string_build\" rel=\"noopener nofollow\">\u0421\u0431\u043e\u0440\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0437 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,039<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,089<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,090<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,43\u00d7 [0,43; 0,44]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,43\u00d7 [0,43; 0,44]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,30 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-utf8_encode\" rel=\"noopener nofollow\">\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0431\u0430\u0439\u0442\u044b<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,661<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,216<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,215<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,08\u00d7 [1,86; 4,37]<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,10\u00d7 [1,91; 4,32]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,08 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-utf8_decode\" rel=\"noopener nofollow\">\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0442\u0435\u043a\u0441\u0442<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,055<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,174<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,174<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,32\u00d7 [0,32; 0,33]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,32\u00d7 [0,32; 0,33]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,14 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-regexp\" rel=\"noopener nofollow\">\u041f\u043e\u0438\u0441\u043a \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,153<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,284<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,286<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,54\u00d7 [0,53; 0,55]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,54\u00d7 [0,53; 0,55]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,85 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-json_encode\" rel=\"noopener nofollow\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 JSON \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,470<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,340<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,341<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,38\u00d7 [1,36; 1,40]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,38\u00d7 [1,37; 1,38]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,38 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-json_decode\" rel=\"noopener nofollow\">\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e JSON<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,211<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,321<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,325<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,65\u00d7 [0,65; 0,66]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,65\u00d7 [0,65; 0,66]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,53 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-interop_scalar\" rel=\"noopener nofollow\">\u041c\u043d\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 Dart \u043a JavaScript<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,006<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,197<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,197<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,03\u00d7 [0,03; 0,03]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,03\u00d7 [0,03; 0,03]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 33,52 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-interop_batch\" rel=\"noopener nofollow\">\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 Dart \u0432 JavaScript<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,079<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,155<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,155<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,51\u00d7 [0,50; 0,52]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,51\u00d7 [0,50; 0,51]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,98 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-interop_roundtrip\" rel=\"noopener nofollow\">\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 JavaScript \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,078<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,155<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,154<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,50\u00d7 [0,50; 0,51]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,51\u00d7 [0,51; 0,51]<\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,98 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-microtasks\" rel=\"noopener nofollow\">\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0439<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,103<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,057<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,056<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,80\u00d7 [1,77; 1,85]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,84\u00d7 [1,80; 1,87]<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,80 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-webcrypto\" rel=\"noopener nofollow\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,024<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,024<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,024<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,02\u00d7 [1,01; 1,03]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,02\u00d7 [1,02; 1,03]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-timer_wait\" rel=\"noopener nofollow\">\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">16,766<\/p>\n<\/td>\n<td>\n<p align=\"left\">17,044<\/p>\n<\/td>\n<td>\n<p align=\"left\">16,672<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,98\u00d7 [0,92; 1,03]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,01\u00d7 [0,98; 1,04]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-local_fetch\" rel=\"noopener nofollow\">\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,565<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,523<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,498<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,07\u00d7 [1,00; 1,10]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,13\u00d7 [1,10; 1,16]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-indexeddb\" rel=\"noopener nofollow\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,264<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,253<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,244<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,05\u00d7 [1,02; 1,07]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,08\u00d7 [1,06; 1,09]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-worker_transfer\" rel=\"noopener nofollow\">\u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,046<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,045<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,045<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99\u00d7 [0,95; 1,16]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [0,94; 1,12]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-dom_layout\" rel=\"noopener nofollow\">\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,576<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,553<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,549<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,04\u00d7 [1,00; 1,06]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,05\u00d7 [1,04; 1,06]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-text_layout\" rel=\"noopener nofollow\">\u0420\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043e Flutter<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">3,473<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,226<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,194<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,08\u00d7 [1,05; 1,13]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,09\u00d7 [1,04; 1,15]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-ui_widgets\" rel=\"noopener nofollow\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">427,875<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,513<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,495<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,04\u00d7 [1,04; 1,05]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,04\u00d7 [1,04; 1,05]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-ui_scroll\" rel=\"noopener nofollow\">\u041f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">410,195<\/p>\n<\/td>\n<td>\n<p align=\"left\">409,913<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,355<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-ui_paint\" rel=\"noopener nofollow\">\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0438\u0433\u0443\u0440<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">410,127<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,448<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,475<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-ui_layers\" rel=\"noopener nofollow\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441 \u043e\u0431\u0440\u0435\u0437\u043a\u043e\u0439 \u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">410,485<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,653<\/p>\n<\/td>\n<td>\n<p align=\"left\">410,580<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [1,00; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-external_js_sum\" rel=\"noopener nofollow\">\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 JavaScript-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,261<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,260<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,259<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [0,99; 1,01]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,00\u00d7 [0,99; 1,02]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0435\u0439\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-external_wasm_sum\" rel=\"noopener nofollow\">\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c Wasm-\u043c\u043e\u0434\u0443\u043b\u0435<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,070<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,069<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,069<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,01\u00d7 [0,99; 1,03]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,01\u00d7 [0,99; 1,02]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0435\u0439\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-external_simd_sum\" rel=\"noopener nofollow\">\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441 SIMD<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,031<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,032<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,031<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99\u00d7 [0,94; 1,02]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99\u00d7 [0,98; 1,01]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0435\u0439\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-external_js_i64\" rel=\"noopener nofollow\">\u0422\u043e\u0447\u043d\u044b\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 JavaScript<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,181<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,179<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,180<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,01\u00d7 [0,99; 1,02]<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,01\u00d7 [0,99; 1,02]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0435\u0439\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-external_wasm_i64\" rel=\"noopener nofollow\">\u0422\u043e\u0447\u043d\u044b\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 Wasm<\/a><\/p>\n<\/td>\n<td data-colwidth=\"106\" width=\"106\">\n<p align=\"left\">0,014<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,014<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,014<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99\u00d7 [0,98; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99\u00d7 [0,97; 1,00]<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0435\u0439\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u0435 Dart-\u0444\u0430\u0439\u043b\u0430: \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u044d\u043a\u0440\u0430\u043d Flutter \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 JavaScript. \u041d\u0438\u0436\u0435 \u2014 \u0438\u0445 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u2014 kernels.dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">import 'dart:convert';import 'dart:math' as math;import 'dart:typed_data';\/\/\/ Values keep all intermediate integer products below 2^53 on dart2js.class DataSet {  DataSet(this.seed) {    var state = seed;    values = Uint32List(1 &lt;&lt; 20);    for (var i = 0; i &lt; values.length; i++) {      state = (state * 1664525 + 1013904223) &amp; 0xffffffff;      values[i] = state &amp; 65535;    }    text = List.generate(      2000,      (i) =&gt; 'item_$i: alpha \u03b2\u0435\u0442\u0430 \u65e5\u672c\u8a9e \ud83d\ude00 ${values[i]}\\n',    ).join();    records = List.generate(      2000,      (i) =&gt; &lt;String, Object&gt;{        'id': i,        'name': 'item_$i',        'value': values[i],        'active': i.isEven,      },    );    json = jsonEncode(records);  }  final int seed;  late final Uint32List values;  late final String text;  late final List&lt;Map&lt;String, Object&gt;&gt; records;  late final String json;}class Kernel {  const Kernel(this.id, this.group, this.name, this.size, this.run);  final String id, group, name, size;  final num Function() run;}int bitMix(int seed, int count) {  var x = seed;  for (var i = 0; i &lt; count; i++) {    x = (x ^ (x &lt;&lt; 13)) &amp; 0xffffffff;    x = (x ^ (x &gt;&gt; 17)) &amp; 0xffffffff;    x = (x ^ (x &lt;&lt; 5)) &amp; 0xffffffff;  }  return x;}double dot(List&lt;double&gt; a, List&lt;double&gt; b) {  var sum = 0.0;  for (var i = 0; i &lt; a.length; i++) {    sum += a[i] * b[i];  }  return sum;}Float64List multiply(List&lt;double&gt; a, List&lt;double&gt; b, int n) {  final out = Float64List(n * n);  for (var i = 0; i &lt; n; i++) {    for (var k = 0; k &lt; n; k++) {      final v = a[i * n + k];      for (var j = 0; j &lt; n; j++) {        out[i * n + j] += v * b[k * n + j];      }    }  }  return out;}int stencil(Uint32List image, int width) {  var sum = 0;  for (var y = 1; y &lt; width - 1; y++) {    for (var x = 1; x &lt; width - 1; x++) {      final p = y * width + x;      sum +=          (image[p - width - 1] +              image[p - width] +              image[p - width + 1] +              image[p - 1] +              image[p] +              image[p + 1] +              image[p + width - 1] +              image[p + width] +              image[p + width + 1]) ~\/          9;    }  }  return sum;}int fibonacci(int n) =&gt; n &lt; 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);class Cell {  Cell(this.value, [this.next]);  final int value;  final Cell? next;}abstract class Operation {  int apply(int x);}class Add implements Operation {  @override  int apply(int x) =&gt; (x + 17) &amp; 65535;}class Xor implements Operation {  @override  int apply(int x) =&gt; x ^ 8191;}class Multiply implements Operation {  @override  int apply(int x) =&gt; (x * 3) &amp; 65535;}List&lt;Kernel&gt; makeKernels(DataSet data) {  final a = Float64List.fromList(    List.generate(65536, (i) =&gt; data.values[i] \/ 65536),  );  final b = Float64List.fromList(    List.generate(65536, (i) =&gt; data.values[i + 100] \/ 65536),  );  final matrixA = Float64List.fromList(a.take(64 * 64).toList());  final matrixB = Float64List.fromList(b.take(64 * 64).toList());  final copy = Uint32List(data.values.length);  final links = Uint32List(1 &lt;&lt; 18);  \/\/ Odd multiplier and increment form a full-period permutation modulo 2^18.  for (var i = 0; i &lt; links.length; i++) {    links[i] = (i * 1664525 + 1013904223) &amp; (links.length - 1);  }  final map = {for (var i = 0; i &lt; 20000; i++) 'key_$i': data.values[i]};  final keys = List.generate(20000, (i) =&gt; 'key_${(i * 7919) % 20000}');  final operations = &lt;Operation&gt;[Add(), Xor(), Multiply()];  final regular = RegExp(r'item_(\\d+):');  final encoded = utf8.encode(data.text);  final big = (BigInt.one &lt;&lt; 127) - BigInt.one;  final lanes=Int32x4List(65536);  final scalarLanes=Int32List(262144);  for(var i=0;i&lt;scalarLanes.length;i++) {scalarLanes[i]=data.values[i]&amp;4095;}  for(var i=0;i&lt;lanes.length;i++) {lanes[i]=Int32x4(scalarLanes[i*4],scalarLanes[i*4+1],scalarLanes[i*4+2],scalarLanes[i*4+3]);}  return [    Kernel('dart_vector','\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f','Dart Int32x4: \u0441\u0443\u043c\u043c\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432','65 536 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432; API \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 SIMD',(){      var sum=Int32x4(0,0,0,0);for(var i=0;i&lt;lanes.length;i++) {sum=sum+lanes[i];}return sum.x+sum.y+sum.z+sum.w;    }),    Kernel('dart_scalar_vector','\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f','Dart int: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0443\u043c\u043c\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432','262 144 \u0446\u0435\u043b\u044b\u0445; \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442',(){      var sum=0;for(var i=0;i&lt;scalarLanes.length;i++) {sum+=scalarLanes[i];}return sum;    }),    Kernel(      'int32',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0426\u0435\u043b\u044b\u0435: xorshift \/ \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438',      '300 000 \u0448\u0430\u0433\u043e\u0432; u32',      () =&gt; bitMix(data.seed, 300000),    ),    Kernel(      'double_dot',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      'Float64: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435',      '65 536 \u043f\u0430\u0440',      () =&gt; dot(a, b),    ),    Kernel(      'transcendental',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      'sin \/ cos \/ sqrt',      '30 000 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432',      () {        var sum = 0.0;        for (var i = 0; i &lt; 30000; i++) {          final x = a[i];          sum += math.sin(x) * math.cos(x) + math.sqrt(x);        }        return sum;      },    ),    Kernel(      'matrix',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u041c\u0430\u0442\u0440\u0438\u0446\u044b: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0440\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b',      '64\u00d764; Float64; \u0432\u043a\u043b\u044e\u0447\u0430\u044f output',      () =&gt; multiply(matrixA, matrixB, 64).fold(0.0, (x, y) =&gt; x + y),    ),    Kernel(      'image_stencil',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: box-filter 3\u00d73',      '256\u00d7256; \u0431\u0435\u0437 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430\/GPU',      () =&gt; stencil(data.values, 256),    ),    Kernel(      'audio_fir',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0410\u0443\u0434\u0438\u043e: FIR-\u0444\u0438\u043b\u044c\u0442\u0440',      '8 192 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u00d7 32 taps',      () {        var sum = 0.0;        for (var i = 32; i &lt; 8192; i++) {          for (var j = 0; j &lt; 32; j++) {            sum += a[i - j] * b[j];          }        }        return sum;      },    ),    Kernel(      'branch',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c',      '262 144 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',      () {        var sum = 0;        for (var i = 0; i &lt; 262144; i++) {          final v = data.values[i];          if (v &lt; 20000) {            sum += v * 3;          } else if (v &lt; 40000) {            sum -= v;          } else {            sum += v ~\/ 3;          }        }        return sum;      },    ),    Kernel(      'recursion',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      '\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b: Fibonacci',      'n=25',      () =&gt; fibonacci(25),    ),    for (final length in [4096, 1048576])      Kernel(        'memory_$length',        '\u041f\u0430\u043c\u044f\u0442\u044c',        '\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 ${length == 4096 ? '16 KiB' : '4 MiB'}',        '$length \u00d7 Uint32',        () {          var sum = 0;          for (var i = 0; i &lt; length; i++) {            sum += data.values[i];          }          return sum;        },      ),    Kernel(      'random_memory',      '\u041f\u0430\u043c\u044f\u0442\u044c',      '\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435',      '1 MiB; 262 144 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432',      () {        var p = data.seed &amp; (links.length - 1), sum = 0;        for (var i = 0; i &lt; links.length; i++) {          p = links[p];          sum += p;        }        return sum;      },    ),    Kernel(      'bulk_copy',      '\u041f\u0430\u043c\u044f\u0442\u044c',      'TypedData.setAll: \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435',      '4 MiB; \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 output',      () {        copy.setAll(0, data.values);        return copy[0] + copy[copy.length - 1];      },    ),    Kernel(      'allocation_short',      '\u041e\u0431\u044a\u0435\u043a\u0442\u044b',      '\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b',      '32 \u043f\u0430\u0440\u0442\u0438\u0438 \u00d7 1 024 Cell',      () {        var sum = 0;        for (var round = 0; round &lt; 32; round++) {          final cells = List.generate(            1024,            (i) =&gt; Cell(data.values[i + round]),          );          for (final c in cells) {            sum += c.value;          }        }        return sum;      },    ),    Kernel(      'allocation_graph',      '\u041e\u0431\u044a\u0435\u043a\u0442\u044b',      '\u041e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c',      '32 768 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 Cell; allocation \u0432\u043a\u043b\u044e\u0447\u0451\u043d',      () {        Cell? head;        for (var i = 0; i &lt; 32768; i++) {          head = Cell(data.values[i], head);        }        var sum = 0;        while (head != null) {          sum += head.value;          head = head.next;        }        return sum;      },    ),    Kernel(      'dispatch',      '\u041e\u0431\u044a\u0435\u043a\u0442\u044b',      '\u041f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b',      '300 000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432; 3 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438',      () {        var x = data.seed &amp; 65535;        for (var i = 0; i &lt; 300000; i++) {          x = operations[i % 3].apply(x);        }        return x;      },    ),    Kernel(      'sort',      '\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438',      '\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0438\u0441\u0435\u043b',      '20 000 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e',      () {        final out = data.values.take(20000).toList()..sort();        var sum = 0;        for (var i = 0; i &lt; out.length; i++) {          sum = (sum + out[i] * (i + 1)) % 1000000007;        }        return sum;      },    ),    Kernel(      'map',      '\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438',      '\u0425\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430: \u043f\u043e\u0438\u0441\u043a \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439',      '20 000 \u043f\u043e\u0438\u0441\u043a\u043e\u0432; Map \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d',      () {        var sum = 0;        for (final k in keys) {          sum += map[k]!;        }        return sum;      },    ),    Kernel(      'string_build',      '\u0422\u0435\u043a\u0441\u0442',      'StringBuffer \/ \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435',      '2 000 \u0441\u0442\u0440\u043e\u043a',      () {        final out = StringBuffer();        for (var i = 0; i &lt; 2000; i++) {          out.write('item_$i:${data.values[i]};');        }        return out.toString().length;      },    ),    Kernel(      'utf8_encode',      '\u0422\u0435\u043a\u0441\u0442',      'UTF-8: \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Unicode',      '2 000 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a',      () =&gt; utf8.encode(data.text).fold&lt;int&gt;(0, (a, b) =&gt; a + b),    ),    Kernel(      'utf8_decode',      '\u0422\u0435\u043a\u0441\u0442',      'UTF-8: \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Unicode',      '2 000 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a',      () =&gt; utf8.decode(encoded).length,    ),    Kernel('regexp', '\u0422\u0435\u043a\u0441\u0442', 'RegExp: \u043f\u043e\u0438\u0441\u043a \u0438 \u0433\u0440\u0443\u043f\u043f\u044b', '2 000 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439', () {      var sum = 0;      for (final m in regular.allMatches(data.text)) {        sum += int.parse(m.group(1)!);      }      return sum;    }),    Kernel(      'json_encode',      '\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f',      'JSON: encode',      '2 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u00d7 4 \u043f\u043e\u043b\u044f',      () =&gt; jsonEncode(data.records).length,    ),    Kernel(      'json_decode',      '\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f',      'JSON: decode \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f',      '2 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u00d7 4 \u043f\u043e\u043b\u044f',      () {        final rows = jsonDecode(data.json) as List;        var sum = 0;        for (final r in rows) {          sum += (r['value'] as num).toInt();        }        return sum;      },    ),    Kernel(      'bigint',      '\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f',      'BigInt: \u0442\u043e\u0447\u043d\u0430\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430',      '1 000 modular multiply; 127 \u0431\u0438\u0442',      () {        var x = BigInt.from(data.seed);        for (var i = 0; i &lt; 1000; i++) {          x = (x * x + BigInt.from(i)) % big;        }        return (x &amp; BigInt.from(0x7fffffff)).toInt();      },    ),  ];}\/\/\/ Independent reference cases; executed in BOTH release browser targets too.Map&lt;String, Object&gt; validateKernels() {  void check(bool yes, String name) {    if (!yes) throw StateError('Reference failed: $name');  }  check(bitMix(1, 0) == 1, 'xorshift empty');  check(bitMix(1, 1) == 270369, 'xorshift known vector');  check(bitMix(1, 2) == 67634689, 'xorshift second vector');  check(dot([], []) == 0, 'dot empty');  check(dot([1, 2, 3], [4, 5, 6]) == 32, 'dot exact');  check((dot([0.1, 0.2], [0.3, 0.4]) - 0.11).abs() &lt; 1e-12, 'dot fractional');  check(    multiply([1, 2, 3, 4], [5, 6, 7, 8], 2).asMap().entries.every((e)=&gt;e.value==[19,22,43,50][e.key]),    'matrix known answer',  );  check(multiply([2.5], [4], 1).single == 10, 'matrix scalar');  check(    stencil(Uint32List.fromList(List.filled(9, 9)), 3) == 9,    'filter constant',  );  check(    stencil(Uint32List.fromList(List.generate(9, (i) =&gt; i)), 3) == 4,    'filter ramp',  );  check(    fibonacci(0) == 0 &amp;&amp; fibonacci(1) == 1 &amp;&amp; fibonacci(10) == 55,    'fibonacci references',  );  check(    utf8.decode(utf8.encode('\u03b2 \u65e5\u672c\u8a9e \ud83d\ude00')) == '\u03b2 \u65e5\u672c\u8a9e \ud83d\ude00',    'unicode roundtrip',  );  check(jsonDecode('{\"n\":17,\"b\":true}')[\"n\"] == 17, 'JSON known answer');  check(    RegExp(r'item_(\\d+)').firstMatch('item_123')!.group(1) == '123',    'regexp reference',  );  check(    BigInt.from(7).modPow(BigInt.from(3), BigInt.from(13)) == BigInt.from(5),    'BigInt reference',  );  return {'passed': 15, 'status': 'passed'};}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0418\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u2014 benchmark.dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">import 'dart:convert';import 'dart:js_interop';import 'dart:math' as math;import 'dart:typed_data';import 'dart:ui' as ui;import 'package:flutter\/scheduler.dart';import 'bridge.dart' as bridge;import 'kernels.dart';const protocolVersion='1.1';const dataSeed=20261009;const defaultSamples=7;const targetBatchMs=25.0;const warmupMs=150.0;const integerWarmupMs=1000.0;const maxRepeats=512;const uiFrames=24;final frameTimings=&lt;Map&lt;String,num&gt;&gt;[];void recordFrameTimings(List&lt;ui.FrameTiming&gt; frames) {  for(final f in frames) {    frameTimings.add({'startMs':f.timestampInMicroseconds(ui.FramePhase.buildStart)\/1000,      'buildMs':f.buildDuration.inMicroseconds\/1000,'rasterMs':f.rasterDuration.inMicroseconds\/1000,      'totalMs':f.totalSpan.inMicroseconds\/1000});  }}double median(List&lt;double&gt; values) {  final sorted=[...values]..sort(); final n=sorted.length;  return n.isOdd?sorted[n~\/2]:(sorted[n~\/2-1]+sorted[n~\/2])\/2;}class Workload {  Workload(this.id,this.group,this.name,this.size,{this.sync,this.async});  final String id,group,name,size;  final num Function()? sync;  final Future&lt;num&gt; Function()? async;  Map&lt;String,Object&gt; get description=&gt;{'id':id,'group':group,'name':name,'size':size};  Future&lt;num&gt; batch(int repeats) async {    num checksum=0;    if(sync!=null) {for(var i=0;i&lt;repeats;i++) {checksum+=sync!();}}    else {for(var i=0;i&lt;repeats;i++) {checksum+=await async!();}}    return checksum\/repeats;  }}List&lt;Workload&gt; workloads(Future&lt;num&gt; Function(String) uiRun) {  final data=DataSet(dataSeed);  final interop=Uint32List.fromList(data.values.take(65536).toList());  return [    for(final k in makeKernels(data)) Workload(k.id,k.group,k.name,k.size,sync:k.run),    Workload('interop_scalar','\u0413\u0440\u0430\u043d\u0438\u0446\u0430 JS','Dart \u2192 JS: \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b','20 000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432',sync:(){      var sum=0.0; for(var i=0;i&lt;20000;i++) {sum+=bridge.scalar(i.toDouble());} return sum;    }),    Workload('interop_batch','\u0413\u0440\u0430\u043d\u0438\u0446\u0430 JS','Dart \u2192 JS: \u043e\u0434\u0438\u043d \u043f\u0430\u043a\u0435\u0442','65 536 \u0447\u0438\u0441\u0435\u043b; toJS + sum',sync:()=&gt;bridge.sum(interop.toJS)),    Workload('interop_roundtrip','\u0413\u0440\u0430\u043d\u0438\u0446\u0430 JS','TypedData: toJS \u2192 toDart','65 536 \u0447\u0438\u0441\u0435\u043b; \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f JS',sync:(){      final js=interop.toJS; final sum=bridge.sum(js); return sum+js.toDart.last;    }),    Workload('microtasks','\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c','Future \/ microtasks','1 000 await Future.value',async:()async{      var sum=0;for(var i=0;i&lt;1000;i++) {sum+=await Future.value(i);}return sum;    }),    for(final c in const [      ['webcrypto','WebCrypto: SHA-256','64 KiB; \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 native API'],      ['timer_wait','\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430','15 ms requested; elapsed measured'],      ['local_fetch','\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 HTTP fetch','64 KiB; no-store; \u0431\u0435\u0437 WAN'],      ['indexeddb','IndexedDB: put\/get\/delete','64 KiB; \u043e\u0434\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f'],      ['worker_transfer','Web Worker: transfer + \u043e\u0442\u0432\u0435\u0442','64 KiB; \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'],    ]) Workload(c[0],'\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O',c[1],c[2],async:()async=&gt;(await bridge.nativeAsync(c[0].toJS).toDart).toDartDouble),    Workload('dom_layout','\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \/ I\/O','DOM: \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0442\u0438\u043b\u044f + forced layout','100 layout flushes; \u043e\u0431\u0449\u0438\u0439 JS helper',sync:()=&gt;bridge.nativeSync('dom_layout'.toJS)),    for(final c in const [      ['external_js_sum','\u0421\u0443\u043c\u043c\u0430: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e JS','262 144 uint32; 1 MiB'],      ['external_wasm_sum','\u0421\u0443\u043c\u043c\u0430: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 Wasm','\u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u044b\u0439 i32 result'],      ['external_simd_sum','\u0421\u0443\u043c\u043c\u0430: \u044f\u0432\u043d\u044b\u0439 Wasm SIMD','i32x4.add; \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432'],      ['external_js_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: JS BigInt','10 000 multiply\/xor modulo 2^64'],      ['external_wasm_i64','\u0422\u043e\u0447\u043d\u044b\u0435 64 \u0431\u0438\u0442\u0430: Wasm i64','\u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'],    ]) Workload(c[0],'\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 Wasm-\u043c\u043e\u0434\u0443\u043b\u0438',c[1],c[2],sync:()=&gt;bridge.nativeSync(c[0].toJS)),    Workload('text_layout','Flutter', 'Paragraph: \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 layout','100 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0431\u0437\u0430\u0446\u0435\u0432',sync:(){      var height=0.0;      for(var i=0;i&lt;100;i++) {        final builder=ui.ParagraphBuilder(ui.ParagraphStyle(fontFamily:'Roboto',fontSize:14))          ..addText('Paragraph $i: Flutter text layout and measurement. ' * 3);        final p=builder.build()..layout(const ui.ParagraphConstraints(width:300));height+=p.height;p.dispose();      }return height;    }),    for(final c in const [      ['ui_widgets','Widget build + layout','600 \u044f\u0447\u0435\u0435\u043a; 24 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f'],      ['ui_scroll','\u041f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u0430','50 000 \u0441\u0442\u0440\u043e\u043a; 24 jumpTo'],      ['ui_paint','Canvas: \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430','2 000 \u043a\u0440\u0443\u0433\u043e\u0432 \u00d7 24 \u043a\u0430\u0434\u0440\u0430'],      ['ui_layers','Canvas: clipping \/ saveLayer','100 \u0441\u043b\u043e\u0451\u0432 \u00d7 24 \u043a\u0430\u0434\u0440\u0430'],    ]) Workload(c[0],'Flutter',c[1],c[2],async:()=&gt;uiRun(c[0])),  ];}Future&lt;Map&lt;String,Object?&gt;&gt; measure({  required List&lt;Workload&gt; cases,  required Map&lt;String,dynamic&gt; config,  required void Function(String, Map&lt;String,Object?&gt;?) progress,}) async {  final metadata=jsonDecode(bridge.metadata().toDart) as Map&lt;String,dynamic&gt;;  const wasm=bool.fromEnvironment('dart.tool.dart2wasm');  final mode=wasm?(metadata['single']==true?'wasm-st':'wasm-mt'):'js';  final validation=validateKernels();  final count=(config['samples'] as num? ?? defaultSamples).toInt().clamp(1,31);  final session=(config['session'] as num? ?? 0).toInt();  final pilot=config['pilot']==true;  final supplied=Map&lt;String,dynamic&gt;.from(config['repeats'] as Map? ?? {});  final only=(config['only'] as List?)?.cast&lt;String&gt;();  final selected=cases.where((c)=&gt;only==null||only.contains(c.id)).toList();  selected.shuffle(math.Random(dataSeed+session));  final results=&lt;Map&lt;String,Object?&gt;&gt;[];  final chosen=&lt;String,int&gt;{};  final began=DateTime.now().toUtc().toIso8601String();  bridge.startRun(); frameTimings.clear();  for(final c in selected) {    progress(c.name,null); bridge.status(c.id.toJS);    await Future&lt;void&gt;.delayed(const Duration(milliseconds:30));    try {      var repeats=(supplied[c.id] as num?)?.toInt() ?? 1;      final isUi=c.id.startsWith('ui_');      if((pilot||!supplied.containsKey(c.id))&amp;&amp;!isUi) {        \/\/ Calibration occurs before measured samples, never across target variants.        await c.batch(1);        final t=bridge.clockNow(); await c.batch(1); final elapsed=bridge.clockNow()-t;        repeats=(targetBatchMs\/math.max(elapsed,0.02)).ceil().clamp(1,maxRepeats);      }      if(isUi) repeats=1;      if(repeats&lt;1||repeats&gt;maxRepeats) throw ArgumentError('invalid batch size');      chosen[c.id]=repeats;      final warmStart=bridge.clockNow();var warmCount=0;      final warm=&lt;double&gt;[];      do {        final t=bridge.clockNow(); await c.batch(repeats);warm.add(bridge.clockNow()-t);warmCount++;      }while(!isUi &amp;&amp; (warmCount&lt;3||bridge.clockNow()-warmStart&lt;(c.id=='int32'?integerWarmupMs:warmupMs)) &amp;&amp; warmCount&lt;200);      final samples=&lt;double&gt;[]; final checks=&lt;num&gt;[]; final ranges=&lt;List&lt;double&gt;&gt;[];      for(var sample=0;sample&lt;count;sample++) {        final t=bridge.clockNow();final value=await c.batch(repeats);final elapsed=bridge.clockNow()-t;        if(!value.isFinite)throw StateError('Non-finite result');        if(checks.isNotEmpty&amp;&amp;(value-checks.first).abs()&gt;1e-8*math.max(1,checks.first.abs()))throw StateError('Unstable output');        checks.add(value);samples.add(elapsed\/repeats); if(isUi) ranges.add([t,t+elapsed]);        await Future&lt;void&gt;.delayed(const Duration(milliseconds:5));      }      final result=&lt;String,Object?&gt;{...c.description,'repeats':repeats,'samplesMs':samples,        'medianMs':median(samples),'minMs':samples.reduce(math.min),'maxMs':samples.reduce(math.max),        'result':checks.first,'warmupBatchMs':warm,'status':'passed','frameRangesMs':ranges,        'metric':isUi?'24 scheduled Flutter frames; wall ms':'wall ms per workload'};      results.add(result);progress(c.name,result);    }catch(e) {      final result=&lt;String,Object?&gt;{...c.description,'status':'failed','error':e.toString()};      results.add(result);progress(c.name,result);    }  }  await Future&lt;void&gt;.delayed(const Duration(milliseconds:140));  SchedulerBinding.instance.scheduleFrame();  await SchedulerBinding.instance.endOfFrame;  await Future&lt;void&gt;.delayed(const Duration(milliseconds:40));  for(final r in results) {    final ranges=r['frameRangesMs'] as List&lt;List&lt;double&gt;&gt;? ?? [];    if(ranges.isNotEmpty) r['frameTimings']=frameTimings.where((f)=&gt;ranges.any((w)=&gt;f['startMs']!&gt;=w[0]&amp;&amp;f['startMs']!&lt;=w[1])).toList();  }  final result=&lt;String,Object?&gt;{'protocol':protocolVersion,'mode':mode,'actualWasm':wasm,    'session':session,'pilot':pilot,'startedUtc':began,'finishedUtc':DateTime.now().toUtc().toIso8601String(),    'environment':metadata,'firstFrameMs':bridge.firstFrameMs,'validation':validation,    'visibleThroughout':bridge.validVisibility(),'repeats':chosen,'results':results,    'comparableBatches':supplied.isNotEmpty,'seed':dataSeed};  bridge.publish(jsonEncode(result).toJS);bridge.status('done'.toJS);  return result;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 main.dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">import 'dart:convert';import 'dart:js_interop';import 'package:flutter\/material.dart';import 'package:flutter\/scheduler.dart';import 'package:web\/web.dart' as web;import 'benchmark.dart';import 'bridge.dart' as bridge;void main()=&gt;runApp(const BenchmarkApp());class BenchmarkApp extends StatelessWidget {  const BenchmarkApp({super.key});  @override Widget build(BuildContext context)=&gt;MaterialApp(    title:'WASM versus JavaScript',debugShowCheckedModeBanner:false,    theme:ThemeData(colorScheme:ColorScheme.fromSeed(seedColor:const Color(0xff38bdf8),brightness:Brightness.dark),      scaffoldBackgroundColor:const Color(0xff0b1220),useMaterial3:true),    home:const BenchmarkScreen());}class BenchmarkScreen extends StatefulWidget {  const BenchmarkScreen({super.key});  @override State&lt;BenchmarkScreen&gt; createState()=&gt;_BenchmarkScreenState();}class _BenchmarkScreenState extends State&lt;BenchmarkScreen&gt; {  late final List&lt;Workload&gt; cases;  bool running=false,ready=false;  String active='\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430',scene='';int tick=0;  Map&lt;String,Object?&gt;? current;  final rows=&lt;String,Map&lt;String,Object?&gt;&gt;{};  List&lt;dynamic&gt; saved=[];  Map&lt;String,dynamic&gt; reportSummary={};  String group='\u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438';  final scroll=ScrollController();  @override void initState(){super.initState();cases=workloads(runScene);SchedulerBinding.instance.addTimingsCallback(recordFrameTimings);initialize();}  Future&lt;void&gt; initialize()async{    try{      await bridge.prepare().toDart;      saved=jsonDecode(bridge.saved().toDart) as List;      bridge.install(((JSString c)=&gt;execute(jsonDecode(c.toDart) as Map&lt;String,dynamic&gt;).toJS).toJS);      setState((){ready=true;active='\u0413\u043e\u0442\u043e\u0432\u043e \u043a \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044e';});      await SchedulerBinding.instance.endOfFrame;      bridge.markReady();      try {        final response=await web.window.fetch('..\/results\/summary.json'.toJS).toDart;        if(response.ok){final s=await response.text().toDart;if(mounted)setState(()=&gt;reportSummary=jsonDecode(s.toDart));}      }catch(_){}    }catch(e){setState(()=&gt;active='\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438: $e');bridge.status(active.toJS);}  }  Future&lt;JSString&gt; execute(Map&lt;String,dynamic&gt; config)async{    if(running)throw StateError('Benchmark already running');    final previousSummary=reportSummary;var savedAfterRun=saved;    setState((){running=true;rows.clear();current=null;reportSummary={};saved=[];});    try {      final result=await measure(cases:cases,config:config,progress:(name,row){        if(mounted)setState((){active=name;if(row!=null)rows[row['id'] as String]=row;});      });      if(mounted)setState((){current=result;active='\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e';scene='';});      if(config['pilot']!=true){bridge.save(jsonEncode(result).toJS);savedAfterRun=jsonDecode(bridge.saved().toDart) as List;}      return jsonEncode(result).toJS;    }catch(e){if(mounted)setState(()=&gt;active='\u041e\u0448\u0438\u0431\u043a\u0430: $e');bridge.status(active.toJS);rethrow;}finally{if(mounted)setState((){running=false;reportSummary=previousSummary;saved=savedAfterRun;});}  }  Future&lt;void&gt; manualRun()async{    Map&lt;String,dynamic&gt; repeats={};    try{      final r=await web.window.fetch('..\/results\/calibration.json'.toJS).toDart;      if(r.ok)repeats=jsonDecode((await r.text().toDart).toDart);    }catch(_){}    await execute({'repeats':repeats,'samples':defaultSamples,      if(group!='\u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438')'only':cases.where((c)=&gt;c.group==group).map((c)=&gt;c.id).toList()});  }  Future&lt;num&gt; runScene(String id)async{    setState((){scene=id;tick=0;});    await SchedulerBinding.instance.endOfFrame;    num checksum=0;    for(var i=0;i&lt;uiFrames;i++){      setState(()=&gt;tick=i+1);      if(id=='ui_scroll'&amp;&amp;scroll.hasClients){scroll.jumpTo((i*127.0)%scroll.position.maxScrollExtent);}      await SchedulerBinding.instance.endOfFrame;      checksum+=i+1;    }    return checksum;  }  String get mode {    const wasm=bool.fromEnvironment('dart.tool.dart2wasm');    if(!wasm)return 'JavaScript \u00b7 CanvasKit';    final single=Uri.base.queryParameters.containsKey('single');    return 'WebAssembly \u00b7 skwasm ${single?'ST':'MT'}';  }  @override void dispose(){SchedulerBinding.instance.removeTimingsCallback(recordFrameTimings);scroll.dispose();super.dispose();}  Widget sceneWidget(){    switch(scene){      case 'ui_widgets':return Wrap(children:List.generate(600,(i)=&gt;SizedBox(width:34,height:20,        child:ColoredBox(color:Color(0xff17304b+((i+tick)%12)*512),child:Text('${(i+tick)%99}',style:const TextStyle(fontSize:10))))));      case 'ui_scroll':return ListView.builder(controller:scroll,itemCount:50000,itemExtent:42,        itemBuilder:(context,i)=&gt;ListTile(dense:true,leading:const Icon(Icons.data_object),title:Text('Record $i'),trailing:Text('${i*17}')));      case 'ui_paint':case 'ui_layers':return CustomPaint(painter:StressPainter(tick,scene=='ui_layers'),size:Size.infinite);      default:return Center(child:Column(mainAxisSize:MainAxisSize.min,children:[        const Icon(Icons.science_outlined,size:48,color:Color(0xff38bdf8)),const SizedBox(height:12),        Text('${cases.length} \u0437\u0430\u0434\u0430\u0447 \u00b7 3 \u0440\u0435\u0436\u0438\u043c\u0430',style:Theme.of(context).textTheme.titleLarge),        const SizedBox(height:8),const Text('\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u00b7 \u043f\u0430\u043c\u044f\u0442\u044c \u00b7 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u00b7 Flutter'),      ]));    }  }  Widget metric(String value,String label)=&gt;Container(padding:const EdgeInsets.all(16),    decoration:BoxDecoration(color:const Color(0xff152239),borderRadius:BorderRadius.circular(12)),    child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[Text(value,style:const TextStyle(fontSize:25,fontWeight:FontWeight.w600)),Text(label)]));  String resultText(Workload c){    final row=rows[c.id];if(row!=null)return row['status']=='passed'?'${(row['medianMs'] as num).toStringAsFixed(3)} ms':'\u041e\u0448\u0438\u0431\u043a\u0430';    return '\u2014';  }  @override Widget build(BuildContext context){    final selected=cases.where((c)=&gt;group=='\u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438'||c.group==group).toList();    final narrow=MediaQuery.sizeOf(context).width&lt;700;    final summaries=Map&lt;String,dynamic&gt;.from(reportSummary['tasks'] as Map? ?? {});    return Scaffold(appBar:AppBar(title:const Text('WASM versus JavaScript'),actions:[      IconButton(tooltip:'\u041e\u0442\u0447\u0451\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f',onPressed:()=&gt;web.window.open('..\/report.html','_blank'),icon:const Icon(Icons.article_outlined)),      IconButton(tooltip:'\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439',onPressed:current==null?null:()=&gt;bridge.download(jsonEncode(current).toJS),icon:const Icon(Icons.download)),    ]),body:SafeArea(child:ListView(padding:EdgeInsets.all(narrow?14:28),children:[      Text('\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438',style:Theme.of(context).textTheme.headlineMedium),      const SizedBox(height:8),Text(mode,style:const TextStyle(color:Color(0xff7dd3fc),fontSize:17)),      const SizedBox(height:18),Wrap(spacing:12,runSpacing:12,children:[        metric('${cases.length}','\u0437\u0430\u0434\u0430\u0447'),metric('${rows.length}','\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e'),metric('$defaultSamples','\u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443'),        if(reportSummary['sessionsPerMode']!=null)metric('${reportSummary['sessionsPerMode']}','\u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u0432 \u043e\u0442\u0447\u0451\u0442\u0435'),      ]),      const SizedBox(height:18),Wrap(spacing:12,runSpacing:10,crossAxisAlignment:WrapCrossAlignment.center,children:[        Semantics(container:true,explicitChildNodes:true,child:SizedBox(width:narrow?double.infinity:280,child:DropdownButtonFormField&lt;String&gt;(initialValue:group,          decoration:const InputDecoration(labelText:'\u0422\u0438\u043f \u0437\u0430\u0434\u0430\u0447',border:OutlineInputBorder()),          items:['\u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438',...cases.map((c)=&gt;c.group).toSet()].map((g)=&gt;DropdownMenuItem(value:g,child:Text(g))).toList(),          onChanged:running?null:(value)=&gt;setState(()=&gt;group=value!)))),        Semantics(identifier:'benchmark.run',child:FilledButton.icon(onPressed:ready&amp;&amp;!running?manualRun:null,          icon:const Icon(Icons.play_arrow),label:const Text('\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u044b'))),        OutlinedButton(onPressed:running?null:()=&gt;web.window.location.href='..\/js\/',child:const Text('JavaScript')),        OutlinedButton(onPressed:running?null:()=&gt;web.window.location.href='..\/wasm\/?single=1',child:const Text('Wasm ST')),        OutlinedButton(onPressed:running?null:()=&gt;web.window.location.href='..\/wasm\/',child:const Text('Wasm MT')),      ]),      const SizedBox(height:12),Text(active),if(running)const Padding(padding:EdgeInsets.only(top:8),child:LinearProgressIndicator()),      const SizedBox(height:18),Container(height:360,clipBehavior:Clip.hardEdge,        decoration:BoxDecoration(color:const Color(0xff101d31),border:Border.all(color:const Color(0xff24364e)),borderRadius:BorderRadius.circular(12)),child:sceneWidget()),      const SizedBox(height:24),Text('\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435',style:Theme.of(context).textTheme.titleLarge),      const SizedBox(height:8),const Text('\u0412\u0440\u0435\u043c\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435. \u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 = JS \/ Wasm. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0447\u0451\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0432 Chrome \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.'),      const SizedBox(height:12),      for(final c in selected) Card(margin:const EdgeInsets.only(bottom:8),child:Padding(padding:const EdgeInsets.all(14),        child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[          Row(crossAxisAlignment:CrossAxisAlignment.start,children:[Expanded(child:Text(c.name,style:const TextStyle(fontWeight:FontWeight.w600))),Text(resultText(c),style:const TextStyle(color:Color(0xff7dd3fc)))]),          const SizedBox(height:5),Text('${c.group} \u00b7 ${c.size}',style:const TextStyle(color:Color(0xffa4b5cb),fontSize:12)),          if(summaries[c.id]!=null)...[            const SizedBox(height:8),Text(summaries[c.id]['display'] as String),          ]else if(saved.isNotEmpty)...[            const SizedBox(height:8),Wrap(spacing:16,children:[for(final run in saved)              if((run['results'] as List).any((r)=&gt;r['id']==c.id&amp;&amp;r['status']=='passed'))                Text('${run['mode']}: ${((run['results'] as List).firstWhere((r)=&gt;r['id']==c.id)['medianMs'] as num).toStringAsFixed(3)} ms')]),          ],        ]))),    ])));  }}class StressPainter extends CustomPainter {  StressPainter(this.tick,this.layers);final int tick;final bool layers;  @override void paint(Canvas canvas,Size size){    final paint=Paint();    if(layers){      for(var i=0;i&lt;100;i++){        final x=(i*31+tick*2)%size.width,y=(i*17)%size.height;        final r=Rect.fromLTWH(x,y,72,60);canvas.saveLayer(r,Paint()..color=const Color(0xaaeeeeee));        canvas.clipRRect(RRect.fromRectAndRadius(r,const Radius.circular(14)));        canvas.drawRect(r,paint..color=const Color(0xff38bdf8));        canvas.drawCircle(Offset(x+24,y+24),22,paint..color=const Color(0xffa78bfa));canvas.restore();      }    }else{      for(var i=0;i&lt;2000;i++){        paint.color=Color.fromARGB(160,(i*17)%256,(i*31)%256,190);        canvas.drawCircle(Offset((i*37+tick*3)%size.width,(i*19)%size.height),3+(i%7).toDouble(),paint);      }    }  }  @override bool shouldRepaint(StressPainter old)=&gt;old.tick!=tick||old.layers!=layers;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 Dart \u0438 JavaScript \u2014 bridge.dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">import 'dart:js_interop';@JS('bench.now') external double clockNow();@JS('bench.metadata') external JSString metadata();@JS('bench.install') external void install(JSFunction callback);@JS('bench.prepare') external JSPromise&lt;JSNumber&gt; prepare();@JS('bench.publish') external void publish(JSString json);@JS('bench.status') external void status(JSString text);@JS('bench.markReady') external void markReady();@JS('bench.start') external void startRun();@JS('bench.visible') external bool validVisibility();@JS('bench.save') external void save(JSString json);@JS('bench.saved') external JSString saved();@JS('bench.download') external void download(JSString json);@JS('bench.firstFrameMs') external double get firstFrameMs;@JS('bench.scalar') external double scalar(double x);@JS('bench.sum') external double sum(JSUint32Array array);@JS('bench.nativeSync') external double nativeSync(JSString id);@JS('bench.nativeAsync') external JSPromise&lt;JSNumber&gt; nativeAsync(JSString id);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u2014 kernels_test.dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">import 'dart:typed_data';import 'package:flutter_test\/flutter_test.dart';import 'package:wasm_versus_javascript\/kernels.dart';void main(){  test('Independent known answers and boundary cases',(){expect(validateKernels()['passed'],15);});  test('Matrix product matches independent dot-product reference',(){    for(final n in [1,2,3,5,9]){      final a=List.generate(n*n,(i)=&gt;(i%7-3).toDouble());      final b=List.generate(n*n,(i)=&gt;(i%11-5).toDouble());      final got=multiply(a,b,n);      for(var row=0;row&lt;n;row++){for(var col=0;col&lt;n;col++){        final expected=List.generate(n,(k)=&gt;a[row*n+k]*b[k*n+col]).fold&lt;double&gt;(0,(x,y)=&gt;x+y);        expect(got[row*n+col],expected);      }}    }  });  test('Stencil matches an independent neighborhood implementation',(){    for(final w in [2,3,4,7,16]){      final values=Uint32List.fromList(List.generate(w*w,(i)=&gt;(i*17)%256));      var expected=0;      for(var y=1;y&lt;w-1;y++){for(var x=1;x&lt;w-1;x++){        var pixel=0;for(final dy in [-1,0,1]){for(final dx in [-1,0,1]){pixel+=values[(y+dy)*w+x+dx];}}        expected+=pixel~\/9;      }}expect(stencil(values,w),expected);    }  });  test('Seeded kernels return stable finite observable outputs',(){    final kernels=makeKernels(DataSet(20261009));    expect(kernels.map((k)=&gt;k.id).toSet().length,kernels.length);    for(final k in kernels){final a=k.run(),b=k.run();expect(a.isFinite,true,reason:k.id);expect(a,b,reason:k.id);}  });}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u2014 bench.js<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">'use strict';window.bench = {  version:'1.0', ready:false, result:null, progress:'loading', error:null, hiddenDuringRun:false,  scalar:x=&gt;x+1, sum:a=&gt;{let s=0;for(let i=0;i&lt;a.length;i++)s+=a[i];return s;},  now:()=&gt;performance.now(), publish:text=&gt;{bench.result=JSON.parse(text);},  status:text=&gt;{bench.progress=text;}, install:fn=&gt;{bench.run=fn;},  metadata:()=&gt;JSON.stringify({userAgent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,    deviceMemoryGiB:navigator.deviceMemory??null,isolated:crossOriginIsolated,secure:isSecureContext,    width:innerWidth,height:innerHeight,dpr:devicePixelRatio,visibility:document.visibilityState,    single:new URLSearchParams(location.search).has('single'),    rendererResources:performance.getEntriesByType('resource').map(x=&gt;x.name).filter(x=&gt;\/skwasm|canvaskit\/.test(x))}),  markReady:()=&gt;{bench.firstFrameMs=performance.now();bench.ready=true;document.getElementById('loading')?.remove();},  start:()=&gt;{bench.hiddenDuringRun=document.hidden;bench.result=null;},  visible:()=&gt;!bench.hiddenDuringRun&amp;&amp;!document.hidden,  save:text=&gt;{const r=JSON.parse(text);localStorage.setItem(`wasm-vs-js:${r.mode}`,text);},  saved:()=&gt;JSON.stringify(Object.keys(localStorage).filter(k=&gt;k.startsWith('wasm-vs-js:')).map(k=&gt;JSON.parse(localStorage.getItem(k)))),  download:text=&gt;{const url=URL.createObjectURL(new Blob([text],{type:'application\/json'}));    const a=document.createElement('a');a.href=url;a.download=`wasm-versus-javascript-${Date.now()}.json`;a.click();setTimeout(()=&gt;URL.revokeObjectURL(url),1000);},};document.addEventListener('visibilitychange',()=&gt;{if(document.hidden)bench.hiddenDuringRun=true;});bench.prepare=async()=&gt;{  const {instance}=await WebAssembly.instantiateStreaming(fetch('kernels.wasm'));bench.wasm=instance.exports;  bench.ints=new Uint32Array(bench.wasm.memory.buffer,0,262144);  for(let i=0;i&lt;bench.ints.length;i++)bench.ints[i]=(i*17+11)&amp;4095;  for(const n of [0,4,8,262144]){const expected=bench.sum(bench.ints.subarray(0,n));    if(bench.wasm.sum(n)!==expected||bench.wasm.simd(n)!==expected)throw Error('Wasm sum validation failed');}  bench.i64js=n=&gt;{let x=1234567n;for(let i=0;i&lt;n;i++){x=BigInt.asUintN(64,x*6364136223846793005n^BigInt(i));x^=x&gt;&gt;33n;}return Number(x&amp;2147483647n);};  for(const [n,expected] of [[0, 1234567], [1, 1812802702], [2, 1046528860], [10, 591709396], [10000, 1507571436]])if(bench.i64js(n)!==expected||bench.wasm.i64mix(n)!==expected)throw Error('Wasm i64 validation failed');  bench.bytes=new Uint8Array(65536);for(let i=0;i&lt;bench.bytes.length;i++)bench.bytes[i]=i&amp;255;  const abc=await crypto.subtle.digest('SHA-256',new TextEncoder().encode('abc'));  if([...new Uint8Array(abc)].map(x=&gt;x.toString(16).padStart(2,'0')).join('')!=='ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad')throw Error('SHA reference failed');  bench.worker=new Worker('worker.js');  bench.db=await new Promise((resolve,reject)=&gt;{const r=indexedDB.open('wasm-versus-javascript-benchmark-v1',1);    r.onupgradeneeded=()=&gt;r.result.createObjectStore('scratch');r.onsuccess=()=&gt;resolve(r.result);r.&gt;reject(r.error);});  bench.dom=document.createElement('div');bench.dom.style.cssText='position:absolute;left:-10000px;top:0;width:300px;contain:strict;height:100px;';  bench.dom.textContent='benchmark';document.body.append(bench.dom);return 1;};bench.nativeSync=id=&gt;{switch(id){  case 'external_js_sum':return bench.sum(bench.ints);  case 'external_wasm_sum':return bench.wasm.sum(bench.ints.length);  case 'external_simd_sum':return bench.wasm.simd(bench.ints.length);  case 'external_js_i64':return bench.i64js(10000);  case 'external_wasm_i64':return bench.wasm.i64mix(10000);  case 'dom_layout':{let sum=0;for(let i=0;i&lt;100;i++){bench.dom.style.width=`${200+(i%17)}px`;sum+=bench.dom.offsetWidth;}return sum;}  default:throw Error('Unknown synchronous case '+id);}};bench.nativeAsync=async id=&gt;{switch(id){  case 'webcrypto':return [...new Uint8Array(await crypto.subtle.digest('SHA-256',bench.bytes))].reduce((a,b)=&gt;a+b,0);  case 'timer_wait':await new Promise(r=&gt;setTimeout(r,15));return 15;  case 'local_fetch':{const r=await fetch('payload.bin',{cache:'no-store'});if(!r.ok)throw Error('fetch '+r.status);return bench.sum(new Uint8Array(await r.arrayBuffer()));}  case 'indexeddb':return await new Promise((resolve,reject)=&gt;{const tx=bench.db.transaction('scratch','readwrite');const store=tx.objectStore('scratch');    store.put(bench.bytes,'sample');let sum;store.get('sample').onsuccess=e=&gt;{sum=bench.sum(e.target.result);};store.delete('sample');    tx.oncomplete=()=&gt;resolve(sum);tx.&gt;reject(tx.error);tx.onabort=()=&gt;reject(tx.error);});  case 'worker_transfer':return await new Promise((resolve,reject)=&gt;{const copy=bench.bytes.slice().buffer;bench.worker.onmessage=e=&gt;resolve(e.data);bench.worker.  default:throw Error('Unknown async case '+id);}};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u2014 worker.js<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">onmessage = ({data}) =&gt; {  let sum=0; for(const v of new Uint32Array(data)) sum+=v;  postMessage(sum);};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 WebAssembly \u2014 kernels.wat<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(module  (memory (export \"memory\") 64)  (func (export \"sum\") (param $n i32) (result i32)    (local $p i32) (local $s i32)    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32.add (local.get $s) (i32.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 1)))      (br $loop))) (local.get $s))  ;; n must be a multiple of four. Tests cover n=0,4,8 and full input.  (func (export \"simd\") (param $n i32) (result i32)    (local $p i32) (local $s v128)    (local.set $s (v128.const i32x4 0 0 0 0))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $p) (local.get $n)))      (local.set $s (i32x4.add (local.get $s) (v128.load (i32.shl (local.get $p) (i32.const 2)))))      (local.set $p (i32.add (local.get $p) (i32.const 4)))      (br $loop)))    (i32.add (i32.add (i32x4.extract_lane 0 (local.get $s)) (i32x4.extract_lane 1 (local.get $s)))      (i32.add (i32x4.extract_lane 2 (local.get $s)) (i32x4.extract_lane 3 (local.get $s)))))  (func (export \"i64mix\") (param $n i32) (result i32)    (local $i i32) (local $x i64)    (local.set $x (i64.const 1234567))    (block $end (loop $loop      (br_if $end (i32.ge_u (local.get $i) (local.get $n)))      (local.set $x (i64.xor (i64.mul (local.get $x) (i64.const 6364136223846793005)) (i64.extend_i32_u (local.get $i))))      (local.set $x (i64.xor (local.get $x) (i64.shr_u (local.get $x) (i64.const 33))))      (local.set $i (i32.add (local.get $i) (i32.const 1))) (br $loop)))    (i32.and (i32.wrap_i64 (local.get $x)) (i32.const 2147483647))))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u2014 index.html<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">&lt;!DOCTYPE html&gt;&lt;html lang=\"ru\"&gt;&lt;head&gt;&lt;base href=\"$FLUTTER_BASE_HREF\"&gt;&lt;meta charset=\"UTF-8\"&gt;&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;&lt;title&gt;WASM versus JavaScript&lt;\/title&gt;&lt;style&gt;html,body{margin:0;background:#0b1220;color:#e2e8f0;font:16px system-ui}#loading{padding:32px}&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;&lt;div id=\"loading\"&gt;WASM versus JavaScript \u00b7 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430&lt;\/div&gt;&lt;script src=\"bench.js\"&gt;&lt;\/script&gt;&lt;script src=\"flutter_bootstrap.js\" async&gt;&lt;\/script&gt;&lt;\/body&gt;&lt;\/html&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a Flutter \u2014 flutter_bootstrap.js<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">{{flutter_js}}{{flutter_build_config}}const config = {  canvasKitBaseUrl: 'canvaskit\/',  forceSingleThreadedSkwasm: new URLSearchParams(location.search).has('single'),};_flutter.loader.load({config});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u2014 serve.cjs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">const http=require('node:http'),fs=require('node:fs'),path=require('node:path');const root=path.resolve(__dirname,'..');const port=Number(process.env.PORT||8096);const types={'.html':'text\/html; charset=utf-8','.js':'text\/javascript','.mjs':'text\/javascript','.wasm':'application\/wasm','.json':'application\/json','.ttf':'font\/ttf','.otf':'font\/otf','.png':'image\/png','.bin':'application\/octet-stream'};http.createServer((req,res)=&gt;{  if(req.url==='\/favicon.ico'){res.writeHead(204);res.end();return;}  const url=new URL(req.url,'http:\/\/localhost');let name=decodeURIComponent(url.pathname);  if(name==='\/'){res.writeHead(302,{Location:'\/js\/'});res.end();return;}  if(name.endsWith('\/'))name+='index.html';  const rel=\/^\\\/(js|wasm)\\\/\/.test(name)?'site'+name:name;  const file=path.resolve(root,'.'+(rel.startsWith('\/')?rel:'\/'+rel));  if(!file.startsWith(root+path.sep)){res.writeHead(403);res.end();return;}  fs.stat(file,(err,s)=&gt;{    if(err||!s.isFile()){res.writeHead(404);res.end('Not found');return;}    res.writeHead(200,{'Content-Type':types[path.extname(file)]||'application\/octet-stream','Content-Length':s.size,      'Cross-Origin-Opener-Policy':'same-origin','Cross-Origin-Embedder-Policy':'require-corp',      'Cross-Origin-Resource-Policy':'same-origin','Cache-Control':\/index.html|results|report.html\/.test(file)?'no-store':'public, max-age=3600'});    fs.createReadStream(file).pipe(res);  });}).listen(port,'127.0.0.1',()=&gt;console.log(`Benchmark: http:\/\/127.0.0.1:${port}\/js\/`));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 Flutter \u2014 pubspec.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">name: wasm_versus_javascriptpublish_to: nonedescription: Independent controlled Flutter compiler and browser workload benchmark.version: 1.0.0environment:  sdk: '&gt;=3.13.0 &lt;4.0.0'dependencies:  flutter:    sdk: flutter  web: 1.1.1dev_dependencies:  flutter_test:    sdk: flutterflutter:  uses-material-design: true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0435 Dart-\u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c, Wasm-\u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0432\u044b\u0448\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430.<\/p>\n<p>\u0412 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u043d 95%-\u0439 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b. \u0414\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u044b\u0431\u0440\u0430\u043d \u043f\u043e\u0440\u043e\u0433 10%: \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u043e\u0441\u044b \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u041f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u043e\u0433\u0430; \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<h3>\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0446\u0435\u043b\u043e\u043c<\/h3>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 JavaScript \u0438 Wasm ST \u0438\u0437 41 \u0437\u0430\u0434\u0430\u0447\u0438 <strong>Wasm \u0432\u044b\u0438\u0433\u0440\u0430\u043b 10, JavaScript \u2014 12<\/strong>, \u0435\u0449\u0451 12 \u0434\u0430\u043b\u0438 \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0421\u0435\u043c\u044c \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0435\u0439, \u0432\u044b\u0448\u0435. \u041f\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 JavaScript- \u0438 Wasm-\u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0441 600 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u0430 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0441 <strong>15,31 \u0434\u043e 7,92 \u043c\u0441<\/strong>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0430\u0441\u044c \u0441 <strong>427,88 \u0434\u043e 410,51 \u043c\u0441<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 <strong>4,1%<\/strong>. \u0412\u0440\u0435\u043c\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0434\u0440\u0430\u043c\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u043f \u0441\u0435\u0440\u0438\u0438, \u0430 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0437\u0430\u043f\u0430\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0434\u0440\u0430.<\/p>\n<p>\u0412 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0435\u0435: \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438\u0441\u044c \u0443 Wasm \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 3,89 \u0440\u0430\u0437\u0430, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 UTF-8 \u2014 \u0432 3,08 \u0440\u0430\u0437\u0430. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043b \u0441\u0443\u043c\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u0442\u0435\u043a\u0441\u0442 \u0438\u0437 UTF-8. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h4>\u0418\u0442\u043e\u0433\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/h4>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0412 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0432\u043e\u0448\u043b\u0438 36 \u0441\u0435\u0441\u0441\u0438\u0439 Chrome, 5 292 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 3 780 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u0434\u0438\u043d \u0431\u043b\u043e\u043a \u0438\u0437 \u0442\u0440\u0451\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u0451\u043d \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u0432\u0435\u0442\u0430; \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u0430\u0440\u0445\u0438\u0432\u0435. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0442\u043e\u0433, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u043b\u0443\u0447\u0430\u0438 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0449\u0438\u043c\u0441\u044f \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u043e\u043c. \u0418\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u2014 \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u0412 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u043c\u0435\u043d \u0441 Worker, \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043c\u0430\u043b\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. JavaScript \u0432\u044b\u0438\u0433\u0440\u0430\u043b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u0430\u043b\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043a\u043e\u043b\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%, \u0430 \u0442\u0435\u0441\u0442 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0440\u0430\u0437\u0431\u0440\u043e\u0441 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430<\/p>\n<\/th>\n<th>\n<p>\u0418\u0442\u043e\u0433 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438<\/p>\n<\/th>\n<th>\n<p>JS \/ Wasm ST \u00b7 95%<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-worker_transfer\" rel=\"noopener nofollow\">\u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,96\u00d7 [0,93; 0,97]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-text_layout\" rel=\"noopener nofollow\">\u0420\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043e Flutter<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,06\u00d7 [1,05; 1,07]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-branch\" rel=\"noopener nofollow\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438.<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,81\u00d7 [0,71; 1,00]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-random_memory\" rel=\"noopener nofollow\">\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,17 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,85\u00d7 [0,72; 0,91]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-sort\" rel=\"noopener nofollow\">\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u0430 10%.<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,91\u00d7 [0,89; 0,93]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-allocation_graph\" rel=\"noopener nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043d\u0435\u0439<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,13 \u0440\u0430\u0437\u0430.<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,88\u00d7 [0,88; 0,90]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"#case-memory_4096\" rel=\"noopener nofollow\">\u0427\u0442\u0435\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430.<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,97\u00d7 [0,96; 1,00]<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 Flutter-Web \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: \u0432 \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 WASM \u043d\u0435 \u0434\u0430\u0435\u0442 \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0430 \u0432\u043e \u0432\u0441\u0451\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043a\u0435\u0439\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 JavaScript \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1092606\/\">https:\/\/habr.com\/ru\/articles\/1092606\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u043e\u0433\u0434\u0430 Flutter \u043d\u0430 WebAssembly \u0431\u044b\u0441\u0442\u0440\u0435\u0435 JavaScript: \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c 46 \u0442\u0435\u0441\u0442\u043e\u0432.\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0443\u044e \u043d\u0430\u043c \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u0436\u0435\u043b\u0435\u0437\u043e\u043c, \u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u0436\u0435 \u0441 5 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432, \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f FPS \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0433\u0440\u0435. 10 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u2014 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e, 15 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u2014 \u0435\u0449\u0451 \u0437\u0430\u043c\u0435\u0442\u043d\u0435\u0435. \u0410 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 50 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u044f \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 WebAssembly-\u043a\u043e\u0434 \u0432\u043c\u0435\u0441\u0442\u043e JavaScript. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, \u043d\u0443, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442 5 \u0434\u043e 10 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432. \u0425\u043e\u0442\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 50. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e.\u042f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0441\u043a\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0432\u0435\u0431 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0432 WASM \u0432\u043c\u0435\u0441\u0442\u043e JS, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0446\u0438\u0444\u0440 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0446\u0438\u0444\u0440\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442.\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 Wasm \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u042f \u0441\u043e\u0431\u0440\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Flutter-\u0441\u0442\u0435\u043d\u0434, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u043a\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0442\u0441\u044f, \u0433\u0434\u0435 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 JavaScript \u0438 \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.\u041d\u0430 \u0447\u0451\u043c \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440: Apple M4, 16 \u0413\u0438\u0411 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, arm64, Darwin 24.3.0.\u0411\u0440\u0430\u0443\u0437\u0435\u0440: Chrome\/154.0.8037.98, \u0434\u0432\u0438\u0436\u043e\u043a V8 15.4.80.20.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430: Flutter 3.47.1, Dart 3.13.1, \u0441\u0431\u043e\u0440\u043a\u0438 release.\u0413\u0440\u0430\u0444\u0438\u043a\u0430: ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Version 15.3.1 (Build 24D70)). \u041e\u043a\u043d\u043e 1280 \u00d7 900 CSS-\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, DPR 1.\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0412\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u043c Chrome.\u0418\u0437 \u043e\u0434\u043d\u043e\u0433\u043e Dart-\u043a\u043e\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0434\u0432\u0435 \u0432\u0435\u0431-\u0441\u0431\u043e\u0440\u043a\u0438. \u0412 JavaScript-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 Flutter \u0440\u0438\u0441\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 CanvasKit. Wasm-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Skwasm; \u0435\u0433\u043e \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u0441 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0435. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u043e\u043d\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b JavaScript, Wasm ST \u0438 Wasm MT.\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0448\u0435\u0441\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0438 \u0441\u0435\u043c\u044c \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043c\u0435\u043d\u044f\u043b\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0435\u0440\u0432\u044b\u043c \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0414\u043b\u044f \u0441\u0435\u043c\u0438 \u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0441\u0435\u0440\u0438\u044e: 12 \u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c, 15 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0437\u0430\u0442\u0435\u043c 21 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0437\u0430\u043c\u0435\u0440 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443.\u0417\u0430\u0434\u0430\u0447\u0438 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043f\u0430\u043c\u044f\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u0435\u043a\u0441\u0442, \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u0438 Flutter-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u0435\u0439\u0441\u043e\u043c \u0435\u0441\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430. \u041e\u0431\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u0412\u0441\u0435 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u043f\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0437\u0430\u043c\u0435\u0440\u0430\u043c.\u041a\u0430\u043a \u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b\u0412\u0440\u0435\u043c\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0432\u0442\u043e\u0440 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0422\u0438\u043f\u0438\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043c\u0435\u0434\u0438\u0430\u043d\u043e\u0439: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0441\u0441\u0438\u0438, \u0437\u0430\u0442\u0435\u043c \u043f\u043e \u0441\u0435\u0441\u0441\u0438\u044f\u043c. \u041e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435; \u0435\u0433\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043b\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432.\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 JS \/ Wasm \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 2 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e Wasm \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u0434\u0432\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 0,5 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 JavaScript. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u0430\u0440\u043d\u044b\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0435\u0433\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: \u0447\u0438\u0441\u043b\u0430, \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0437\u0432\u0443\u043a\u041f\u0430\u043c\u044f\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438\u0422\u0435\u043a\u0441\u0442 \u0438 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438\u0412\u044b\u0437\u043e\u0432\u044b JavaScript \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434\u0420\u0430\u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440Flutter: \u0442\u0435\u043a\u0441\u0442, \u0432\u0438\u0434\u0436\u0435\u0442\u044b, \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438\u041f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u0434\u0440\u0430 \u00b7 \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u00b7 \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u00b7 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u00b7 \u0421\u0432\u043e\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u00b7 \u041f\u043e\u043b\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: \u0447\u0438\u0441\u043b\u0430, \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0437\u0432\u0443\u043a1. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438\u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0431\u0438\u0442\u044b, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0430\u0441\u043a\u0438 \u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0431\u0440\u0430\u043d xorshift \u2014 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f 300 000 \u0448\u0430\u0433\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f 32 \u0431\u0438\u0442\u0430\u043c\u0438. \u042d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0441\u043c\u044b\u0441\u043b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u0435\u0438\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439; \u043f\u043e\u043b\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 54 \u0440\u0430\u0437\u0430.\u0421\u0435\u0440\u0438\u044fJavaScript, \u043c\u0441Wasm ST, \u043c\u0441Wasm MT, \u043c\u0441\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f1,6780,6170,615\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2,72 \u0440\u0430\u0437\u0430. JS \/ Wasm ST: 2,72\u00d7 [2,71; 2,72].Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430int bitMix(int seed, int count) {  var x = seed;  for (var i = 0; i &lt; count; i++) {    x = (x ^ (x &lt;&lt; 13)) &amp; 0xffffffff;    x = (x ^ (x &gt;&gt; 17)) &amp; 0xffffffff;    x = (x ^ (x &lt;&lt; 5)) &amp; 0xffffffff;  }  return x;}Kernel(      &#8216;int32&#8217;,      &#8216;\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f&#8217;,      &#8216;\u0426\u0435\u043b\u044b\u0435: xorshift \/ \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438&#8217;,      &#8216;300 000 \u0448\u0430\u0433\u043e\u0432; u32&#8217;,      () =&gt; bitMix(data.seed, 300000),    )2. \u041f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u0432\u0443\u0445 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0432\u043a\u043b\u0430\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u044e\u0442 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442.\u0412 \u0442\u0435\u0441\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f 65 536 \u043f\u0430\u0440 \u0447\u0438\u0441\u0435\u043b \u0438\u0437 Float64List, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c. \u041c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 143 \u0440\u0430\u0437\u0430.\u0421\u0435\u0440\u0438\u044fJavaScript, \u043c\u0441Wasm ST, \u043c\u0441Wasm MT, \u043c\u0441\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f0,0780,2410,239\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 3,09 \u0440\u0430\u0437\u0430. JS \/ Wasm ST: 0,32\u00d7 [0,32; 0,34].Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430double dot(List&lt;double&gt; a, List&lt;double&gt; b) {  var sum = 0.0;  for (var i = 0; i &lt; a.length; i++) {    sum += a[i] * b[i];  }  return sum;}Kernel(      &#8216;double_dot&#8217;,      &#8216;\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f&#8217;,      &#8216;Float64: \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435&#8217;,      &#8217;65 536 \u043f\u0430\u0440&#8217;,      () =&gt; dot(a, b),    )3. \u0421\u0438\u043d\u0443\u0441\u044b, \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u044b \u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u043a\u043e\u0440\u043d\u0438\u0421\u0438\u043d\u0443\u0441\u044b \u0438 \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u041a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u0440\u0435\u043d\u044c \u043d\u0443\u0436\u0435\u043d, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 30 000 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 sin(x) \u00d7 cos(x) + sqrt(x). \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 77 \u0440\u0430\u0437.\u0421\u0435\u0440\u0438\u044fJavaScript, \u043c\u0441Wasm ST, \u043c\u0441Wasm MT, \u043c\u0441\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f0,2520,2550,254\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430. JS \/ Wasm ST: 1,00\u00d7 [0,99; 1,01].Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430Kernel(      &#8216;transcendental&#8217;,      &#8216;\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f&#8217;,      &#8216;sin \/ cos \/ sqrt&#8217;,      &#8217;30 000 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432&#8217;,      () {        var sum = 0.0;        for (var i = 0; i &lt; 30000; i++) {          final x = a[i];          sum += math.sin(x) * math.cos(x) + math.sqrt(x);        }        return sum;      },    )4. \u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445. \u0412 \u044d\u0442\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 64 \u00d7 64.\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u0430 \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0446\u0438\u043a\u043b\u043e\u0432 i\u2013k\u2013j \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 63 \u0440\u0430\u0437\u0430.\u0421\u0435\u0440\u0438\u044fJavaScript, \u043c\u0441Wasm ST, \u043c\u0441Wasm MT, \u043c\u0441\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f0,3070,4430,443\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. JavaScript \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,44 \u0440\u0430\u0437\u0430. JS \/ Wasm ST: 0,69\u00d7 [0,67; 0,72].Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430Float64List multiply(List&lt;double&gt; a, List&lt;double&gt; b, int n) {  final out = Float64List(n * n);  for (var i = 0; i &lt; n; i++) {    for (var k = 0; k &lt; n; k++) {      final v = a[i * n + k];      for (var j = 0; j &lt; n; j++) {        out[i * n + j] += v * b[k * n + j];      }    }  }  return out;}Kernel(      &#8216;matrix&#8217;,      &#8216;\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f&#8217;,      &#8216;\u041c\u0430\u0442\u0440\u0438\u0446\u044b: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0440\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b&#8217;,      &#8217;64\u00d764; Float64; \u0432\u043a\u043b\u044e\u0447\u0430\u044f output&#8217;,      () =&gt; multiply(matrixA, matrixB, 64).fold(0.0, (x, y) =&gt; x + y),    )5. \u0424\u0438\u043b\u044c\u0442\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0417\u0434\u0435\u0441\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442 3 \u00d7 3.\u0422\u0435\u0441\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 256 \u00d7 256 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u0413\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f; \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443. \u0417\u0430\u043c\u0435\u0440 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0412 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043a \u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u043e\u043a\u0430\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 34 \u0440\u0430\u0437\u0430.\u0421\u0435\u0440\u0438\u044fJavaScript, \u043c\u0441Wasm ST, \u043c\u0441Wasm MT, \u043c\u0441\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f0,3490,1840,182\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. Wasm \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 1,88 \u0440\u0430\u0437\u0430. JS \/ Wasm ST: 1,88\u00d7 [1,86; 1,97].Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430int stencil(Uint32List image, int width) {  var sum = 0;  for (var y = 1; y &lt; width &#8212; 1; y++) {    for (var x = 1; x &lt; width &#8212; 1; x++) {      final p = y * width + x;      sum +=          (image[p &#8212; width &#8212; 1] +              image[p &#8212; width] +              image[p &#8212; width + 1] +              image[p &#8212; 1] +              image[p] +              image[p + 1] +              image[p + width &#8212; 1] +              image[p + width] +              image[p + width + 1]) ~\/          9;    }  }  return sum;}Kernel(      &#8216;image_stencil&#8217;,      &#8216;\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f&#8217;,      &#8216;\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: box-filter 3\u00d73&#8217;,      &#8216;256\u00d7256; \u0431\u0435\u0437 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430\/GPU&#8217;,      () =&gt; stencil(data.values, 256),    )6. \u0424\u0438\u043b\u044c\u0442\u0440 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u041f\u0440\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0432\u0443\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0442\u0441\u0447\u0451\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430 FIR-\u0444\u0438\u043b\u044c\u0442\u0440\u0430.\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438\u0437 8 192 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 \u0438 32 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432. \u0426\u0438\u043a\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 32, \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u0435\u0442 \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443. \u0420\u0430\u0431\u043e\u0442\u0430 \u0430\u0443\u0434\u0438\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c 50 \u0440\u0430\u0437.\u0421\u0435\u0440\u0438\u044fJavaScript, \u043c\u0441Wasm ST, \u043c\u0441Wasm MT, \u043c\u0441\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f0,1630,1690,168\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0440\u0438\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430. JS \/ Wasm ST: 0,96\u00d7 [0,95; 1,03].Dart-\u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430Kernel(      &#8216;audio_fir&#8217;,      &#8216;\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f&#8217;,      &#8216;\u0410\u0443\u0434\u0438\u043e: FIR-\u0444\u0438\u043b\u044c\u0442\u0440&#8217;,      &#8216;8 192 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u00d7 32 taps&#8217;,      () {        var sum = 0.0;        for (var i = 32; i &lt; 8192; i++) {          for (var j = 0; j &lt; 32; j++) {            sum += a[i &#8212; j] * b[j];          }        }        return sum;      },    )7. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0447\u0430\u0441\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b: \u0434\u043b\u044f \u043c\u0430\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-498088","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498088","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=498088"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498088\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=498088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=498088"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=498088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}