原文: https://tomassetti.me/introduction-to-webassembly/

WebAssembly简介:我们为什么要关心这个技术? ​​​​

在对抗js的伟大战斗中有一个新的武器,允许开发者们在提高性能和生产力同时选择他们喜欢的编程风格。这个武器就是WebAssembly,它将会掀起web开发中客户端的革命

WebAssembly,或者叫wasm,是用于浏览器端的底层字节码格式脚本。如果你为一个编程语言开发了一个编译器,其中一个选项是编译到一个目标平台,像jvm 或者.net编译你的语言到指定字节码,webAssembly使用同样的规则,当被编译成webassembly,可以在任何平台运行你的软件,换句话说,运行在所有浏览器中。

在实用性方面,webassembly是由浏览器中的js引擎开发者开发,本质上,在web领域中,它被设计成替代javascript,作为编译器的目标和翻译结果。例如,替代typescript编译成javascript,开发者可以编译成webassembly,简而言之,这不是一个新的虚拟机器,对于javascript虚拟机它是一个新的格式,可以被所有浏览器引入的格式,这样就可以利用现有的javascript资源,而不是用javascript

基本的可行性设计,已经在2017年3月设计完成,下面链接是主流浏览器支持情况
https://caniuse.com/#feat=wasm

为什么重要?

首先,webassembly格式保证在解析性能上有重大提高

webassembly这种二进制格式认为作为本地解析比javascript更快,在移动端,大量的编译代码仅仅是用来解析轻易地花掉20-40秒,所以本地解析对于提供一个好的冷负荷用户体验至关重要

注意,我们谈论的是解析性能,不是执行能行,因为许多情况下它将运行在现有的js引擎上,然而,单在解析性能上的提高将允许我们将以前无法实现的开发放在web软件上,例如,虚拟机,虚拟现实,图像识别

第一个产品用户可能是游戏引擎开发者,因为他们总是寻找最棒的性能,webassembly以前,他们最好选择是asm.js,一个很苦的技术,但是不太适用大多数游戏,我记得我试过罪名的demo Epic Citadel (已经下线) 它是使用UE引擎,实际上运行很平滑,但是下载和解析代码就要15分钟,对于需要快速的游戏来说它不够好

事实上,autodesk计划为他们的stingray游戏引擎提供支持webassembly支持,unity引擎创始人也在尝试webassembly,Rust开发者已经通过webassembly支持,在web上运行rust代码

他能为你做什么?

在更广泛的蓝图中,随着webassembly的到来,意味着在web领域,你不需要在被强制使用javascript,因为它仅仅只能跑在浏览器中,JavaScript名声不好,实际上它是一个很好的语言,可以快速编写小的脚本,问题是你被强制使用,用于所有你需要在web上运行的东西,许多大项目来说这就是一个问题

你可以使用更好版本的javascript,例如typescript,甚至新语言例如Kotlin,但是最后,他们不得不编译成javascript, 反过来,这也给JavaScript开发人员带来了问题,必须支持所有场景和所有编程风格,webassembly将改变这个,让每个人都集中精力做他们能做得更好的事情
这还不是全部,开放webassembly给所有其他平台,意味着如果你使用一种语言编写软件,编译成webassembly,你可以在.net平台上运行。实际上这将允许重复使用已有的javasxript资源,意味着你可以在产品中使用这些资源

然而这不是唯一可能,你可以创造自己的实现,根据你的需要,你可以为你的语言创造一个性能更好的编译器,你可以从头创建或者添加webassembly支持到一个现有的编译器,这样做你可以利用其他webassembly模块。

例如,你可以为dsl创造一个webassembly编译器,这种dsl语言在你的公司内部使用,让它运行在web客户端上,不需要自定义类似oracle java plug-in或者adobe flash插件

最新文章

  1. java获取当前日期等以及时区
  2. [MFC] MFC音乐播放器 傻瓜级教程 网络 搜索歌曲 下载
  3. 界面排版-TableLayout的stretchColumns方法
  4. php socket 学习
  5. NOI2005瑰丽华尔兹
  6. Difference Between XML and XAML.
  7. (转)SQL流程控制语句学习(一):变量及控制语句种类
  8. INVALID_USER_SCODE问题的解决办法
  9. Codeforces 455B A Lot of Games
  10. 【jq】prop和attr的区别
  11. QT Designer基础——登录界面设计基础版2
  12. JMeter——JMeter如何进行汉化
  13. pom大全
  14. WebStorm记录(3)
  15. Shell脚本编写及常见面试题
  16. javascript 体验倒计时:距离国庆还有多长时间
  17. c#去除字符串中的空格,回车,换行符,制表符
  18. Jmeter(十五)_上传与下载
  19. Android-创建启动线程的两种方式
  20. Python3.6 AES加密 pycrypto‎ 更新为 pycrypto‎demo | TypeError: Object type <class 'str'> cannot be passed to C code

热门文章

  1. handsontable-developer guide-cell function
  2. xaml mvvm(2)之属性绑定
  3. Devexpress treelist 控件属性大全
  4. javacript 实现瀑布流原理和效果, 滚动加载图片【图文解析 附源码】
  5. vs 你不得不会的调试方式
  6. 转载文章 208 个最常见 Java 面试题全解析
  7. Substrings(SPOJ8222) (sam(后缀自动机))
  8. codeforces 1096 题解
  9. 面向对象之-@classmethod、@staticmethod和@classonlymethod的区别
  10. Kali Linux来袭~老司机带你进击