随着产研形态和业务需求的不断变化,前端逐渐从PC发展到H5,逐渐从网页2D发展到3D,逐渐从动画发展到可交互的XR/AR/MR等等。伴随而来的问题就是对前端设备和运行环境的算力越来越高的要求。
目前V8的结构设计以及JavaScript的JIT过程,尽管JIT做了十分多的优化,无论是在对象的存储还是GC机制上。但效果在面对密集型计算,尤其是大型多参数计算时,显得是那么的捉襟见肘。甚至面对多页普通feeds网页也会显得着急忙慌。
性能优化一直是前端的一个必考点,我们可以在前端这门技术的各个层次上来实现性能优化,网络层面,框架层面,JS执行层面,V8层面等等
面对此,web worker/webGPU/wasm等或许是其中一个解法,其中wasm更是一个已经被多种商业场景验证过的标准。
本质上,要理解wasm是如何做到计算性能的提升的就需要知道V8对于JS的执行过程,前面有提到JIT,这是V8对于JS动态解析/编译执行流程的缩写。
JS是一门动态脚本语言,这里的动态指的是JS这门语言和C++这样语言的本质区别,C++是必须进过严格的静态编译过程,在静态编译过程中能将许多优化做好,拿到编译好的二进制编码则可以直接执行,而JS需要边边解析边编译边运行,那么对于过程优化就显得比较困难也不能够十分彻底。
而wasm能够将C++等静态语言编译后的字节码或者二进制放在前端环境中去运行,并且可以暴露C++的方法给到JS调用,这就是的能够将计算密集型的任务交给类似C++这样的语言去做来提升整个应用的性能。
1.下载emsdk包
1 | git clone https://github.com/emscripten-core/emsdk.git |
2.本机环境需要python可执行环境,需要利用python来下载emsdk依赖包
3.cd 到 emskd更目录,执行一下命令
输入 ./emsdk install latest 命令,如果是 windows 系统则输入 emsdk install latest 命令。如果安装失败,则重新安装一次,网络不好可能会失败。
输入 ./emsdk activate latest 命令,如果是 windows 系统则输入 emsdk activate latest 命令
Made with ❤ and at Earth.