Почему WebAssembly такой медленный?

Я реализую визуализацию набора Мандельброта с помощью Rust с WebAssmbly, где моя цель - сделать это с использованием многопоточности.

Я реализовал набор Мандельброта как в Javascript (используя Typescript), так и в однопоточном Rust. Я сделал несколько тестов, и реализация Rust примерно в 17 раз медленнее, и я полностью потерялся здесь, я не знаю, почему у меня такая плохая производительность.

Вот репо, на master реализация, использующая Rust, а в js-implementation - реализация с Rust.

https://github.com/DanielRamosAcosta/mandlerbot-set-webassembly

Заранее спасибо.

Движки JavaScript оптимизировались более 10 лет назад, движкам WASM всего год.

Jonas Wilms 30.11.2018 20:31

@JonasWilms Весь смысл Wasm в том, что он должен работать намного быстрее, чем JavaScript. Это из первых нескольких предложений Статья в Википедии: «[Wasm] предназначен для обеспечения выполнения кода почти так же быстро, как запуск собственного машинного кода. Он был задуман для дополнения JavaScript для ускорения критических для производительности частей веб-приложений, а затем для разрешить веб-разработку на языках, отличных от JavaScript ".

Sven Marnach 30.11.2018 20:35

@sven только потому, что он может быть быстрее, не означает, что он обязательно работает быстрее на практике. V8 компилирует часто используемые функции в JS до байт-кода (если он может определять типы и разрешать ссылки статически), не знаю, насколько далеко зашла разработка WASM.

Jonas Wilms 30.11.2018 20:39

Возможный дублировать. То, что сделал Даниэль, было «микротестом». Требуется гораздо больше оптимизаций.

clamentjohn 30.11.2018 20:43

@ daniel-ramos, можете ли вы дать инструкции по созданию исходного кода? Я получаю сообщение об ошибке при попытке построить его, и это затрудняет попытку воспроизвести измерения! В противном случае я вижу одну проблему: вы не используете cargo build --release (обратите внимание, как вы запускаете wasm-bindgen поверх папки debug). В книге Rust and WebAssembly есть отличный раздел по своевременному профилированию, если вам тоже интересно!

alexcrichton 30.11.2018 21:15

@alexcrichton Это должно быть так же просто, как npm start, а для сборки make должно быть достаточно. Попробую вариант --release!

Daniel Ramos 30.11.2018 21:53

@alexcrichton Большое вам спасибо !!! --realease

Daniel Ramos 30.11.2018 22:13

@JonasWilms По сути, суть Wasm в том, что на практике делает работает быстрее. Многие из них работают со скоростью, близкой к родной, и даже наиболее оптимизированная JIT для JavaScript не сможет с ней конкурировать. Я рекомендую прочитать эта милая статья Лин Кларк в качестве введения.

Sven Marnach 30.11.2018 23:40

Да @hellow, дублируется

Daniel Ramos 10.12.2018 13:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
10
1 042
1

Ответы 1

Не забудьте использовать флаг --release при сборке.

Другие вопросы по теме