"Я думаю, что это новое поколение Интернета"
WebAssembly не что иное, как запуск машинного кода непосредственно в браузере, например C++, код Rust, который вы можете напрямую запускать в браузере с помощью wasm.
Web Assembly или WASM — это будущее Интернета.
Веб-сборка
WebAssembly, разработанный W3C, по словам его создателей, является «целью компиляции». Разработчики не пишут WebAssembly напрямую; они пишут на языке по своему выбору, который затем компилируется в байт-код WebAssembly. Затем байт-код запускается на клиенте — обычно в веб-браузере — где он транслируется в собственный машинный код и выполняется на высокой скорости.
Код WebAssembly должен загружаться, анализироваться и выполняться быстрее, чем JavaScript. Когда WebAssembly используется веб-браузером, по-прежнему возникают накладные расходы на загрузку модуля WASM и его настройку, но при прочих равных условиях WebAssembly работает быстрее. WebAssembly также предоставляет изолированную модель выполнения, основанную на тех же моделях безопасности, которые сейчас существуют для JavaScript.
Вот моя HTML-страница
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>wasm</title> </head> <body> <h1>Welcome to my first Web Assembly Project</h1> <kbd>//go to console and type 'mul(4,4)' then you will get '16' and understand how web assembly works</kbd> <br><br> <kbd><a href="https://www.github.com/sakiakamonster">https://www.github.com/sakiakamonster</a></kbd> <script src="wa.js"></script> </body> </html>
Просто зажмите ctrl+shift+i и зайдите в консоль и проверьте.
Вот мой код javascript
//code for import of web assembly file into js let mul; function loadWasm(filename) { return fetch(filename) .then(response => response.arrayBuffer()) .then(bits => WebAssembly.compile(bits)) .then(module => { return new WebAssembly.Instance(module)}) }; loadWasm('test.wasm') .then(instance => { mul = instance.exports._Z3mulii; })
Вы можете заметить, что _Z3mulii вызывается в коде js, где то же самое ключевое слово присутствует в коде WebAssembly.
Вот код WebAssembly
(module (table 0 anyfunc) (memory $0 1) (export "memory" (memory $0)) (export "_Z3mulii" (func $_Z3mulii)) (func $_Z3mulii (; 0 ;) (param $0 i32) (param $1 i32) (result i32) (i32.mul (get_local $1) (get_local $0) ) ) )
Сборка Firefox x86
wasm-function[0]: sub rsp, 8 ; 0x000000 48 83 ec 08 mov ecx, esi ; 0x000004 8b ce mov eax, ecx ; 0x000006 8b c1 imul eax, edi ; 0x000008 0f af c7 nop ; 0x00000b 66 90 add rsp, 8 ; 0x00000d 48 83 c4 08 ret ; 0x000011 c3
Вы также можете скачать мой репозиторий на github
если вам понравилась эта статья, пожалуйста, дайте кучу хлопков.
Спасибо