asm.js 和 WebAssembly 有什么区别?
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 有什么区别?相关推荐
- WebAssembly系列1-从 ASM.JS 到 WebAssembly
为什么80%的码农都做不了架构师?>>> 在2015.06.17, JavaScrpt之父Brendan Eich宣布了一个新项目:将新的底层原语(low level prim ...
- 从Rust到远方:ASM.js星系
来源: https://mnt.io/2018/08/28/from-rust-to-beyond-the-asm-js-galaxy/ 这篇博客文章是这一系列解释如何将Rust发射到地球以外的许多星 ...
- asm.js 和 Emscripten 入门教程
http://www.ruanyifeng.com/blog/2017/09/asmjs_emscripten.html 作者: 阮一峰 日期: 2017年9月 7日 Web 技术突飞猛进,但是有一个 ...
- 用于 Unity 和虚幻引擎的 Asm.js 与 WebGL
用于 Unity 和虚幻引擎的 Asm.js 与 WebGL 摘要:本文来自微软,是一个 web 开发系列文章的一部分.感谢你对实现了 SitePoint 的成员的支持. Unity 以及 Epic ...
- js中toString()和String()区别详解
转载自 js中toString()和String()区别详解 我们知道String()与 .toString()都是可以转换为字符串类型,但是String()与 .toString()的还是有区别的 ...
- [react] props.children.map和js的map有什么区别?为什么优先选择react的?
[react] props.children.map和js的map有什么区别?为什么优先选择react的? React.Children.map 能够处理未知数据类型,即使 React.childre ...
- [css] 鼠标事件css的:hover和js的mouseover有什么区别?
[css] 鼠标事件css的:hover和js的mouseover有什么区别? JavaScript中鼠标事件有:onmouseover和onmouseout: 当鼠标移入和移出时触发事件onmous ...
- [js] callee和caller的区别和作用是什么?
[js] callee和caller的区别和作用是什么? arguments.callee 指的是当前函数 Function.caller 指的是调用当前函数的函数 举个例子:function a() ...
- jQuery学习(四)— jQuery的ready事件和原生JS的load事件的区别
jQuery学习(四)- jQuery的ready事件和原生JS的load事件的区别 jQuery的ready事件和原生JS的load事件的区别: 页面中可以有多个ready事件,而load事件会出现 ...
最新文章
- 【swjtu】数字电路实验7_8_电子琴设计
- mysql 事务补偿_TCC补偿性策略_彻底学习数据库事务 seata分布式事务 共享 排它锁 死锁 索引 Spring事务 隔离级别等_MySQL视频-51CTO学院...
- UpdatePanel AsyncPostBackTrigger PostBackTrigger 区别
- C#的反射机制调用方法
- python3基础语法-Python3 - 基础语法
- 使用 Java 开发 OpenCV 应用
- slf4j 如何返回堆栈_重学JS系列 - JS 调用堆栈
- mt7628 pcie挂载nvme并测试
- php提交raw_PHP中如何POST提交raw数据?
- java jar 环境变量_java-jar jar包带环境变量(参数)启动
- C++三路比较运算符
- 格式怎么转换_爱奇艺下载的视频怎么转换成常见的mp4格式?
- 80后程序员必须知道的编程语言和它们的创造者
- 【Python】绘制二维散点图
- Java:注解(Annotation)自定义注解入门
- 面向对象系统分析与设计
- 关于计算机的英语作文初中,computer初中英语作文范文
- 冰点还原8.57 官方中文版下载
- DevOps流程demo(实操记录)
- vulnhub 网站靶机 DC-1 打靶记录