美文网首页
WebAssembly

WebAssembly

作者: 颖小李 | 来源:发表于2020-05-21 19:33 被阅读0次

    https://juejin.im/post/5d367656f265da1b904c2126
    WebAssembly 现状与实战

    想了解WebAssembly,先要从JavaScript说起。
    JS已然是最流行的编程语言之一,威胁它更广泛应用的两大问题是:(1)语法太灵活导致开发大型Web项目困难;(2)性能不能满足一些场景的需要。

    一、各种方法尝试解决上面两个问题

    1.MicroSoft :TypeScript
    TypeScript它是JavaScript的一个严格超集,并添加了可选的静态类型和使用看起来像基于类的面向对象编程语法操作 Prototype。
    TS = JS + 静态类型检查

    2.Google : V8
    用JIT技术提升JS的执行速度,使得Web性能得到数十倍的增长。
    由于JS的动态语言特性已经无法改变,所以只能用JIT来进行性能优化。

    3.Mozilla: asm.js
    asm.js是强类型的,语法是JS的子集,是为了JIT性能优化而专门打造的。
    它是使用注解、检测等黑魔法来确保强类型,从而确保JIT在执行过程中尽快生成相应的二进制代码,不用再去根据上下文判断变量类型。

    4.asm.js To WebAssembly
    觉得asm.js的思路不错,所以联合起来共建WebAssembly生态。

    二、WebAssembly的原理

    1.计算机运行的原理:人们使用高级语言编写程序,再编译成可以在计算机中运行的机器码。

    2.不同计算机CPU架构不同,机器码标准也不太一样,常见的CPU架构包括x86、AMD 64、ARM。高级语言编译时需要指定目标架构。

    3.而WebAssembly字节码是一种抹平了不同CPU架构的机器码,WebAssembly不能直接在CPU架构上运行,但是它可以非常快的翻译成对应架构的机器码,它的运行速度接近机器码。

    4.与JS相比,WA的优点:体积小、加载快、兼容性问题少。

    5.高级语言只需要生成底层虚拟机(LLVM)认识的语言LLVM IR,就能被编译成WA字节码。

    6.前端编写WA的最佳选择时AssemblyScript,语法与TypeScript一致,只是在TS的基础上加了更加严格的类型限制。

    7.AS的实现原理其实也借助了LLVM,它通过TS编译器把TS源码解析成AST,再把AST翻译成IR,再通过LLVM编译成WA字节码实现。

    8.AS相对于C、Rust等去写WA,好处除了不用学新语言,还有对不支持WA的浏览器,可以通过TS编译器编译成可正常执行的JS代码,从而实现从JS到WA的平滑过渡。

    相关文章

      网友评论

          本文标题:WebAssembly

          本文链接:https://www.haomeiwen.com/subject/aeazohtx.html