翻译:WebAssembly简介:我们为什么要关心这个技术?
原文: 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插件
翻译:WebAssembly简介:我们为什么要关心这个技术? 的更多相关文章
- 20.翻译系列:Code-First中的数据库迁移技术【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/migration-in-code-first.aspx EF 6 Code-First ...
- [翻译]PostCSS简介
许多开发人员花时间在使用CSS的预处理器上如less,sass和stylus.这些工具已经成为Web开发的重要组成部分.写一个网站的样式,不使用嵌套,变量或混入等功能很少见.它们每个都是非常实用的,让 ...
- [译] QUIC Wire Layout Specification - Introduction & Overview | QUIC协议标准中文翻译(1) 简介和概述
本文同步发布于: https://www.pengrl.com/p/33330/ ,转载请注明出处,谢谢. 目录 Introduction | 简介 Conventions and Definitio ...
- 转:WebGL、Asm.js和WebAssembly概念简介
WebGL.Asm.js和WebAssembly概念简介 转:http://www.techbrood.com/zh/news/webgl/webgl%E3%80%81asm_js%E5%92%8Cw ...
- WebAssembly学习(一):认识WebAssembly
WebAssembly作为一门新兴起的技术,在 JavaScript 圈非常的火!人们都在谈论它多么多么快,怎样怎样改变 Web 开发领域,被各大巨头所推广,这篇文章对其做一个简单的了解认识,本文非原 ...
- 通过 Serverless 加速 Blazor WebAssembly
Blazor ❤ Serverless 我正在开发 Ant Design 的 Blazor 版本,预览页面部署在 Github Pages 上,但是加载速度很不理想,往往需要 1 分钟多钟才完成. 项 ...
- 基于百度翻译API开发属于自己的翻译工具
你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...
- Zabbix简介(第一章第一节)
Alexei Vladishev创建了Zabbix项目,当前处于活跃开发状态,Zabbix SIA提供支持. Zabbix是一个企业级的.开源的.分布式的监控套件 Zabbix可以监控网络和服务的监控 ...
- 翻译一篇SpiderMonkey GC的文章
前言 这篇文章包含了对SpiderMonkey中Rooted<T>, Handle<T>的解释. 翻译自 https://developer.mozilla.org/en-US ...
随机推荐
- 洛谷P3224 [HNOI2012]永无乡(线段树合并+并查集)
题目描述 永无乡包含 nnn 座岛,编号从 111 到 nnn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nnn 座岛排名,名次用 111 到 nnn 来表示.某些岛之间由巨大的桥连接, ...
- handsontable-developer guide-cell type
单元格类型:这里有很多没见过的用法,得好好总结一下 //预定义的类型Text Numeric Checkbox Date Select Dropdown Autocomplete Password H ...
- 如何彻底删除TFS的工作项字段
TFS的工作项字段可以在所有工作项类型之间共享.例如自定义了一个字段"验证迭代"(Mycompany.IterationValidation)那么在需求.Bug中都可以添加这个字段 ...
- apache ap 并发测试工具
可以使用 apache httpd 软件包里的 ab.exe 简单的做些网站的性能测试, ab.exe 是一个命令工具,所以不能双击运行, 在 cmd 下运行: ab.exe -n 1000 -c 5 ...
- 用jquery-table2excel,进行导出excel
jquery-table2excel是一款可以将HTML表格的内容导出到微软Excel电子表格中的jQuery插件.该插件可以根据你的需要导出表格中的内容,不需要的行可以不导出. 它文件体积小,使用非 ...
- .net core 应用Nancy快速实现轻量级webapi
目前大量数据接口均采用API的方式为各类应用提供数据服务.Nancy是.net下实现webapi的一个轻量级的框架,可以快速搭建一个api服务环境,是一种快速建立api服务的不错选择. 本文记录.ne ...
- SUBSET
DESCRIPTION:一开始你有一个空集,集合可以出现重复元素,然后有Q 个操作1. add s在集合中加入数字s.2. del s在集合中删除数字s.保证s 存在3. cnt s查询满足a& ...
- ISE14.7生成.bit文件和mcs文件
1.FPGA bit文件加载步骤(加载到FPGA的RAM中,用于在线调试,掉电丢失) 第一步:选择Tools->IMPCAT->选择OK: 第二步:双击Boundary Scan-> ...
- Java多线程(汇聚页)
Java多线程(汇聚页) Java多线程总结
- BruteXSS(汉化版)
BruteXSS是一个非常强大和快速的跨站点脚本暴力注入.它用于暴力注入一个参数.该BruteXSS从指定的词库加载多种有效载荷进行注入并且使用指定的载荷和扫描检查这些参数很容易受到XSS漏洞.得益于 ...