WebGL、Asm.js和WebAssembly概念简介

转:http://www.techbrood.com/zh/news/webgl/webgl%E3%80%81asm_js%E5%92%8Cwebassembly%E6%A6%82%E5%BF%B5%E7%AE%80%E4%BB%8B.html

iefreer 发表于 2017-02-27 13:00:56

标签: webassemblywebglhtml5asm.js

随着HTML技术的发展,网页要解决的问题已经远不止是简单的文本信息,而包括了更多的高性能图像处理和3D渲染方面。

这正是要引入WebGL、Asm.js和WebAssembly这些技术的原因。

什么是WebGL

WebGL是为了给Web添加类似桌面(或移动)系统上的OpenGL的特性支持,从而实现强大的3D图形渲染效果。

什么是Asm.js

Asm.js是一个JavaScript的一个严格的子集,可以被用来作为一个底层的、高效的编译器目标语言。asm.js提供了一个类似于C/C++虚拟机的抽象实现,包括大型二进制堆、整型和浮点运算、高阶函数定义、函数指针等语法特性。具体来说,就是通过VM(如Emscripten)把一些本地代码(如C语言)生成的VM字节码(bytecode)翻译成前述严格子集的JS代码得以在Web上运行,并通过浏览器的支持,得到性能优化。

c/c++---->Emscripten(VM)---->asm.js(一种js语言)。

什么是WebAssembly

那么WebAssembly(简称wasm)又是什么鬼?顾名思义,看起来是在Web中引入的低级语言,其目的和Asm.js类似,也是要支持本地代码的运行从而获得媲美原生应用的高性能,我们可以先观摩一个使用WebAssembly技术的在线网页游戏实例,该游戏性能可媲美原生应用。那么既然有了Asm.js,为什么还需要WebAssembly?因为Asm.js只有Mozzila支持,而WebAssembly是Mozzila、Google、Microsoft以及一些其他组织拟联手制定的游戏规则,另外WebAssembly最终将从JS中分离出来,成为一个相对独立的编译器目标语言,这样可以不必为了本地代码的运行,而在JS中引入太多内容,将来Wasm和JS会是分工合作的关系。

WebGL和WebAssembly的区别

第一眼看到WebAssembly的时候,我们或许会自然的想到其对WebGL的影响。因为通过WebAssembly可以直接把原生代码(如c/c++语言)应用在浏览器中运行,那么理论上(理想情况下),我们可以在网页上运行PhotoShop或者魔兽争霸这样的大型软件(只要通过WebAssembly给移植过来)而无需重新编写JS代码。但实际上我们需要厘清这2个概念是两个层面的东西,WebAssembly是网页低级语言,WebGL是浏览器实现的接口标准,允许客户端脚本语言(即ECMAScript,JavaScript,Webassembly)使用原生3D图形库。WebAssembly对应于汇编语言,而WebGL对应于OpenGL或DirectX。所以WebAssembly依赖于WebGL来实现3D渲染。其影响在于,有了WebAssembly,WebGL在后续标准制定中需要多提供一个低级语言接口,工程师在实现网页3D应用的时候除了JS之外多了一种选择(可以使用原生语言和wasm)。

最新文章

  1. 腾讯开放平台 手机QQ登录 错误码:110406 解决办法
  2. BZOJ 1770: [Usaco2009 Nov]lights 燈
  3. iOS数据缓存及YYCache的实现分析
  4. Cookielib
  5. UESTC 1854
  6. ASP.NET MVC- EF基础
  7. [LeetCode] 230. Kth Smallest Element in a BST 解题思路
  8. Spring-----Spring对AOP的支持
  9. C++中 auto自己主动变量,命名空间,using作用以及作用域
  10. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索
  11. Integer.parseInt(String s, int radix)方法介绍(修正版)
  12. NYOJ-1057 寻找最大数(三)(贪心)
  13. XWindow启动流程
  14. vim文本基础
  15. iOS 消息发送与转发详解
  16. 【转】Javascript错误处理——try…catch
  17. VMware中安装Contos
  18. 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
  19. [svc]linux文件权限
  20. 客户端向服务端请求连接是出现"ssh : Connection refused"原因有哪些

热门文章

  1. TestNG指南
  2. 【转】手摸手,带你用vue撸后台 系列二(登录权限篇)
  3. 【整理】explain、type、extra用法和结果的含义
  4. 2015/9/22 Python基础(18):组合、派生和继承
  5. 动态加载js和css的jquery plugin
  6. GD库imagecopyresampled()方法详解~
  7. spring mvc convention over configuration 之 RequestToViewNameTranslator
  8. VScode格式化ESlint
  9. Coursera在线学习---第五节.Logistic Regression
  10. [MySQL] AUTO_INCREMENT lock Handing in InnoDB