终于, 我入门了当初很仇视的技术....

什么是WebAssembly?

WebAssembly或WASM是一个编译器目标(由编译器生成的代码),具有二进制格式,允许我们在浏览器上执行C,C ++和Rust,其性能接近本机代码。其实这项技术早就出来了, 虽然终没有成熟, 但是"深入浅出系列"已经有面世...:

WebAssembly的一个令人兴奋的方面是它不能成为JavaScript的替代品,而是与它一起工作。同时,这种组合可以提供打字/编译语言的性能和JavaScript的灵活性。在JavaScript上使用WebAssembly API,您可以在JS应用程序上加载模块WASM并在它们之间共享功能。

但要了解WASM代码如何比JavaScript更快,我们需要分析Javascript引擎在概念上如何对待它们。

WebAssembly的工作原理

由W3C开发的WebAssembly用其创建者的话来说就是“编译目标”。开发人员不直接编写WebAssembly; 他们用自己选择的语言编写,然后编译成WebAssembly字节码。然后,字节码在客户端上运行 - 通常在Web浏览器中 - 它被转换为本机机器代码并高速执行。

WebAssembly代码比JavaScript更快地加载,解析和执行。当Web浏览器使用WebAssembly时,仍然存在下载WASM模块并进行设置的开销,但所有其他条件相同的WebAssembly运行速度更快。WebAssembly还提供了一个沙盒执行模型,它基于现在为JavaScript存在的相同安全模型。

目前,在Web浏览器中运行WebAssembly是最常见的用例,但WebAssembly不仅仅是基于Web的解决方案。最终,随着WebAssembly规范的形成以及更多功能落在其中,它可能在移动应用程序,桌面应用程序,服务器和其他执行环境中变得有用。

为了可视化,理论上可以将JavaScript和WebAssembly代码之间的生命周期比较视为以下图像:

理论上比较JavaScript和WASM代码生命周期。

常见误区:

这些是我在人们讨论这个话题时看到的最常见的错误观念

  • WASM会取代JS!!!: WebAssembly并不是为了取得JavaScript。创建它是为了完成它,其中性能对Web应用程序至关重要。
  • WASM是一种新的编程语言:值得记住WASM是一种中间格式二进制文件,它可以作为C,C ++和Rust等其他语言的编译器目标。虽然对于wasm存在文本表示,但是不希望看到人们对它进行编程,因为不期望人们在汇编中进行编码。
  • 只有C或Rust程序员才能编写WASM代码:只要将新功能添加到WebAssembly(如垃圾收集器),就会对其他语言提供支持。此外,还有一些项目可用于新的语言,甚至是JavaScriot的子/超集,可以编译为WASM。

正如我们在上面和前面的文章中看到的那样,WASM在理论上比JavaScript更快,但它在实践中看起来如何呢?这是我们将在下一篇文章中找到的内容。

展望

当初, 很多前端感慨我们JS用户已经成为了全民公敌, 尤其是当09年nodejs出来之后, JavaScript更是成为众多语言歧视的对象, 大概是觉得JS/TS抢了他们的饭碗, 因为它真的什么都能干: 前端, 后端,数据库 , 桌面端, 移动端, 嵌入式, 甚至是云计算, 区块链和AI也被js用户侵占, 以至于在github上JavaScript是碾压java和python的存在, 当然老大会被次强们联手抵抗, 于是在前段浏览器领域出现了webassembly, 在服务端nodejs领域又遭到java/py web以及php,. net平台的疯狂黑, 数据库端的MongoDB(算他是JS阵营吧~)更是受到SQL的联合抵制, 可以说"全民公敌"这个词正式太准确了,

可是又如何呢? MongoDB仍然是nosql领域的老大, Qt也以JavaScript为标准脚本语言, 在嵌入式横扫一方, nodejs的市场份额一直在上升(被听信谣言说node之父放弃了nodejs), 小程序已经逐渐成为了新的中国标准, 只有浏览器端的webassembly一直在抢占JS的市场, 但是大家要认清wasm的地位和定位, 它是一种底层插件, 用于后台计算, 并且依赖于JS容器才能正常工作, 况且JS也是wasm编译对象的第一用户, 也就是说将来js将广泛支持webassembly的编译.

努力学好webassembly, 以一种包容的心态看待这项新技术.

WHAT EXACTLY IS WASM ?!的更多相关文章

  1. Ooui.Wasm:浏览器中的.NET

    小型.NET Web框架Ooui作为Web程序集(WASM)在浏览器中完全运行 – 不需要服务器端的交互,涉及的所有文件都直接从浏览器执行,.NET Web框架Ooui可以作为其开发人员Frank A ...

  2. WebAssembly完全入门——了解wasm的前世今身

    前言 接触WebAssembly之后,在google上看了很多资料.感觉对WebAssembly的使用.介绍.意义都说的比较模糊和笼统.感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成 ...

  3. 如何调用wasm文件?

    如果用C/C++导出wasm模块,方法名会默认带_前缀:如果是asm.js转成了wasm模块,方法名就不带_前缀. 一.c到js 二.wasm和js 三.小尝试 这里主要汇集了自己初学webAssem ...

  4. emcc,wasm,webassembly

    WASM: https://github.com/Hanks10100/wasm-examples/tree/master/simple mkdir hello cd hello echo '#inc ...

  5. WASM

    WASM WebAssembly https://webassembly.org/ https://github.com/appcypher/awesome-wasm-langs https://me ...

  6. Ooui:在浏览器中运行.NET应用 Ooui.Wasm:浏览器中的.NET

    在过去数年中,桌面应用开发人员一直处境艰难,因为人们的主要关注点聚焦于Web和移动应用.由于Microsoft未来Windows平台的计划未定,并且UWP应用也没有突破性进展,因此技术落伍的责任也不应 ...

  7. eos wasm虚拟机相关接口定义实现

    wasm虚拟机相关接口定义实现 执行流程 controller::push_transaction()  // 事务 -> transaction_context::exec()  // 事务 ...

  8. Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)并执行wasm

    <一>˙转换 Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)的步骤: 最新版本的Em ...

  9. 对于WebAssembly编译出来的.wasm文件js如何调用

    WebAssembly也叫浏览器字节码技术 这里就不过多的解释了网上很多介绍 主要是让大家知道在js里面如何调用执行它,我之前看WebAssemblyAPI时候反正是看得一脸懵逼 也是为了大家能更快的 ...

随机推荐

  1. javascript高级程序设计第三章

    看后总结: 1.区分大小写 2.标识符是有字母下划线$开头,并有字母.下划线.数字.美元符号组成. 3.建议用驼峰法命名标识符. 4.注释: 单行:// 多行: /*   */ 5.严格模式: 在js ...

  2. Android WebDriver 浏览器自动测试工具介绍

    Selenium WebDriver 是浏览器自动测试工具,提供轻量级和优雅的方式来测试web应用.Selenium WebDriver作为Android SDK extra,支持Android 2. ...

  3. WinDBG 常用命令表[转]

    启动, 附加进程, 执行和退出(Starting, Attaching, Executing and Exiting) =======================   Start -> Al ...

  4. sleep()和usleep()的使用和区别

    在iOS中  如果 在主线程中用这2个 都会 对 主线程 造成 阻塞 具体区别 如下   Linux 中的 代码 为例 函数名: sleep头文件: #include <windows.h> ...

  5. SQL中 OVER(PARTITION BY)

    OVER(PARTITION BY)函数介绍 开窗函数               Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返 ...

  6. GL_总账完整会计周期业务(流程)

    2014-06-02 BaoXinjian

  7. mysql分组取每组前几条记录(排序)

    首先来造一部分数据,表mygoods为商品表,cat_id为分类id,goods_id为商品id,status为商品当前的状态位(1:有效,0:无效). CREATE TABLE `mygoods` ...

  8. Mac中提升权限修改系统目录

    原来OSX EI Capitan中增加了一个SIP功能,不管你是不是su,都会阻止你在系统目录下进行操作.如果,想要修改系统目录的文件,如升级bash,需要修改/bin/bash,那么就要先关闭SIP ...

  9. 解决:IIS APPPOOL\DefaultAppPool 登录失败的问题

    为大家介绍下解决IIS APPPOOL\DefaultAppPool 登录失败的方法,有遇到类似问题的朋友参考下. 添加ASP.NET网站时,选择添加"添加应用程序"连接sql s ...

  10. [k8s]prometheus+alertmanager二进制安装实现简单邮件告警

    本次任务是用alertmanaer发一个报警邮件 本次环境采用二进制普罗组件 本次准备监控一个节点的内存,当使用率大于2%时候(测试),发邮件报警. k8s集群使用普罗官方文档 环境准备 下载二进制h ...