asm.js是具有“高度可优化”指令的 JS 子集。基本上你可以声明类型 (int, float) 和 js 引擎(在浏览器和 node.js 中)将更快地执行指令。如果您的应用程序与 WebGL 一起使用,它会进行大量计算或图形处理,这将带来好处。

web程序集是JS的二进制格式,所有的JS,不仅仅是asm.js。它不是字节码,而是解析器计算的 AST 的二进制编码。它有两大好处:

  • JS引擎可以跳过解析步骤
  • 它比 JS 原始源代码紧凑得多

我们已经可以为非 JS 的浏览器编写代码:EMSCripten 可以在 JS 代码中编译 c++ 代码。其他转编译器已经可以将您的代码编译成 JS。使用 asm.js,代码在进行数学运算时可以运行得更快。使用 web 程序集,代码将更紧凑,浏览器将能够更快地处理它(因为它将能够跳过解析)。您不会像 DirectX、JavaApplets、Flash 或 Silverlight 那样加载新插件,因为一切都将在 JS 沙箱中运行。

asm.js代码是否及时编译并运行?编译成什么?

asm.js 是普通的 javascript 代码,和往常一样被 JS 解释器编译成字节码。但是,具有 asm 支持的解释器应该进行提前编译,并且可能由于静态类型而生成更有效的代码表示。有关详细信息,请参阅 http://asmjs.org/。

asm 和 wasm 之间有什么区别(文本与二进制除外)?

没有,暂时没有。wasm 应该是向后兼容的,可以编译为 asm(它也可以像普通 JS 一样执行)。然而,随着对它的支持的增加,它可能会在未来扩展更多功能。

这对于在浏览器中运行的其他脚本语言意味着什么?

相反,后者作为 Python 仍然需要解释。不需要解释器的脚本语言当然可以直接编译为 (w)asm,因为有一个编译器(链)支持它作为目标。

asm.js代码是否及时编译并运行?编译成什么?

不同的浏览器以不同的方式编译 asm.js 代码。截至 2015 年 8 月:

  • Firefox 将 asm.js 编译为机器代码(并缓存机器代码以备将来加载相同的 asm.js)[1]。
  • 在 Windows 10 作为实验标志,Edge 还将对 asm.js [2] 进行一些 Ahead-of-Time 验证和编译。
  • Chrome 特别识别了 asm.js 开头的“use asm”指令,以便更积极地解析和分析代码并调整编译启发式。
  • Safari 不会对 asm.js 进行特殊处理。

除了 asm.js 是文本和 wasm(Web 程序集)是二进制之外,两者之间有什么区别?

asm.js 只是 JavaScript,因此必须完全按照 JavaScript 规范运行。作为一个新标准,WebAssembly 能够修复一些 JavaScript 行为不理想的极端情况(从性能或编译的角度来看)[3]。在未来 [4] 中,WebAssembly 将能够添加原本难以用 JavaScript 表达的功能。

这对于在浏览器中运行的其他脚本语言意味着什么?以python为例,会不会

  • python代码编译成wasm?或者
  • python解释器(Cpython)编译成wasm并解释python?

在 v.1 中,如您所说,在浏览器中运行 Python 的最简单方法是将 Python 解释器编译为 wasm。这意味着,例如,Python GC 在 wasm 代码中运行并手动管理 wasm 线性内存。已经有一个实验项目将 asm.js 后端添加到 PyPy [5](这对 wasm 也能正常工作)。它目前遇到了 asm.js 的局限性,可以通过 wasm 的动态链接未来特性来解决。更进一步,wasm 寻求提供 GC 集成和 JIT 编译支持,这两者都将允许与 Web 平台更有效和自然的集成。

asm.js 和 WebAssembly 有什么区别?相关推荐

  1. WebAssembly系列1-从 ASM.JS 到 WebAssembly

    为什么80%的码农都做不了架构师?>>>    在2015.06.17, JavaScrpt之父Brendan Eich宣布了一个新项目:将新的底层原语(low level prim ...

  2. 从Rust到远方:ASM.js星系

    来源: https://mnt.io/2018/08/28/from-rust-to-beyond-the-asm-js-galaxy/ 这篇博客文章是这一系列解释如何将Rust发射到地球以外的许多星 ...

  3. asm.js 和 Emscripten 入门教程

    http://www.ruanyifeng.com/blog/2017/09/asmjs_emscripten.html 作者: 阮一峰 日期: 2017年9月 7日 Web 技术突飞猛进,但是有一个 ...

  4. 用于 Unity 和虚幻引擎的 Asm.js 与 WebGL

    用于 Unity 和虚幻引擎的 Asm.js 与 WebGL 摘要:本文来自微软,是一个 web 开发系列文章的一部分.感谢你对实现了 SitePoint 的成员的支持. Unity 以及 Epic ...

  5. js中toString()和String()区别详解

    转载自  js中toString()和String()区别详解 我们知道String()与 .toString()都是可以转换为字符串类型,但是String()与 .toString()的还是有区别的 ...

  6. [react] props.children.map和js的map有什么区别?为什么优先选择react的?

    [react] props.children.map和js的map有什么区别?为什么优先选择react的? React.Children.map 能够处理未知数据类型,即使 React.childre ...

  7. [css] 鼠标事件css的:hover和js的mouseover有什么区别?

    [css] 鼠标事件css的:hover和js的mouseover有什么区别? JavaScript中鼠标事件有:onmouseover和onmouseout: 当鼠标移入和移出时触发事件onmous ...

  8. [js] callee和caller的区别和作用是什么?

    [js] callee和caller的区别和作用是什么? arguments.callee 指的是当前函数 Function.caller 指的是调用当前函数的函数 举个例子:function a() ...

  9. jQuery学习(四)— jQuery的ready事件和原生JS的load事件的区别

    jQuery学习(四)- jQuery的ready事件和原生JS的load事件的区别 jQuery的ready事件和原生JS的load事件的区别: 页面中可以有多个ready事件,而load事件会出现 ...

最新文章

  1. 【swjtu】数字电路实验7_8_电子琴设计
  2. mysql 事务补偿_TCC补偿性策略_彻底学习数据库事务 seata分布式事务 共享 排它锁 死锁 索引 Spring事务 隔离级别等_MySQL视频-51CTO学院...
  3. UpdatePanel AsyncPostBackTrigger PostBackTrigger 区别
  4. C#的反射机制调用方法
  5. python3基础语法-Python3 - 基础语法
  6. 使用 Java 开发 OpenCV 应用
  7. slf4j 如何返回堆栈_重学JS系列 - JS 调用堆栈
  8. mt7628 pcie挂载nvme并测试
  9. php提交raw_PHP中如何POST提交raw数据?
  10. java jar 环境变量_java-jar jar包带环境变量(参数)启动
  11. C++三路比较运算符
  12. 格式怎么转换_爱奇艺下载的视频怎么转换成常见的mp4格式?
  13. 80后程序员必须知道的编程语言和它们的创造者
  14. 【Python】绘制二维散点图
  15. Java:注解(Annotation)自定义注解入门
  16. 面向对象系统分析与设计
  17. 关于计算机的英语作文初中,computer初中英语作文范文
  18. 冰点还原8.57 官方中文版下载
  19. DevOps流程demo(实操记录)
  20. vulnhub 网站靶机 DC-1 打靶记录

热门文章

  1. 电脑录屏怎么把声音录进去,两招教你把声音录进去
  2. 什么是互联网大厂_在互联网大厂做运营,你要提前准备什么?
  3. Linux---进程调度及CFS调度器
  4. Win10怎么禁止自动安装软件
  5. python数字转中文大写_python3 数字转人民币大写
  6. Spark Shuffle机制-源码实现
  7. node 介绍、安装、升级(node npm)
  8. 【论文解读】从可扩展的远程情感监督构建的附有结构和主次标记的MEGA RST 篇章树库
  9. HyperLedger Fabric 学习思路分享
  10. 计算机设备名称英语词汇(1)