Я реализую визуализацию набора Мандельброта с помощью Rust с WebAssmbly, где моя цель - сделать это с использованием многопоточности.
Я реализовал набор Мандельброта как в Javascript (используя Typescript), так и в однопоточном Rust. Я сделал несколько тестов, и реализация Rust примерно в 17 раз медленнее, и я полностью потерялся здесь, я не знаю, почему у меня такая плохая производительность.
Вот репо, на master реализация, использующая Rust, а в js-implementation - реализация с Rust.
https://github.com/DanielRamosAcosta/mandlerbot-set-webassembly
Заранее спасибо.
@JonasWilms Весь смысл Wasm в том, что он должен работать намного быстрее, чем JavaScript. Это из первых нескольких предложений Статья в Википедии: «[Wasm] предназначен для обеспечения выполнения кода почти так же быстро, как запуск собственного машинного кода. Он был задуман для дополнения JavaScript для ускорения критических для производительности частей веб-приложений, а затем для разрешить веб-разработку на языках, отличных от JavaScript ".
@sven только потому, что он может быть быстрее, не означает, что он обязательно работает быстрее на практике. V8 компилирует часто используемые функции в JS до байт-кода (если он может определять типы и разрешать ссылки статически), не знаю, насколько далеко зашла разработка WASM.
Возможный дублировать. То, что сделал Даниэль, было «микротестом». Требуется гораздо больше оптимизаций.
@ daniel-ramos, можете ли вы дать инструкции по созданию исходного кода? Я получаю сообщение об ошибке при попытке построить его, и это затрудняет попытку воспроизвести измерения! В противном случае я вижу одну проблему: вы не используете cargo build --release (обратите внимание, как вы запускаете wasm-bindgen поверх папки debug). В книге Rust and WebAssembly есть отличный раздел по своевременному профилированию, если вам тоже интересно!
@alexcrichton Это должно быть так же просто, как npm start, а для сборки make должно быть достаточно. Попробую вариант --release!
@alexcrichton Большое вам спасибо !!! --realease
@JonasWilms По сути, суть Wasm в том, что на практике делает работает быстрее. Многие из них работают со скоростью, близкой к родной, и даже наиболее оптимизированная JIT для JavaScript не сможет с ней конкурировать. Я рекомендую прочитать эта милая статья Лин Кларк в качестве введения.
Возможный дубликат Почему моя программа на Rust медленнее, чем эквивалентная программа на Java?
Да @hellow, дублируется



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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