内容简介:package.json
- WebAssembly 是一种新的字节码格式,主流浏览器都已经支持 WebAssembly
- WebAssembly 字节码和底层机器码很相似可快速装载运行,因此性能相对于 JS 解释执行大大提升
基础概念
- WebAssembly 并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出字节码放到 WebAssembly 虚拟机中才能运行
- 浏览器厂商需要做的就是根据 WebAssembly 规范实现虚拟机
- WebAssembly 字节码不能直接在任何一种 CPU 架构上运行, 但由于非常接近机器码,可以非常快的被翻译为对应架构的机器码,因此 WebAssembly 运行速度和机器码接近
优点
- 体积小:由于浏览器运行时只加载编译成的字节码,一样的逻辑比用字符串描述的 JS 文件体积要小很多
- 加载快:由于文件体积小,再加上无需解释执行,WebAssembly 能更快的加载并实例化,减少运行前的等待时间
- 兼容性问题少:WebAssembly 是非常底层的字节码规范,制订好后很少变动,就算以后发生变化,也只需在从高级语言编译成字节码过程中做兼容。可能出现兼容性问题的地方在于 JS 和 WebAssembly 桥接的 JS 接口
AssemblyScript
AssemblyScript 语法和 TypeScript 一致,对前端来说学习成本低,为前端编写 WebAssembly 最佳选择。
- 比 TypeScript 多了很多更细致的内置类型,以优化性能和内存占用,详情 文档 ;
- 不能使用 any 和 undefined 类型,以及枚举类型;
- 可空类型的变量必须是引用类型,而不能是基本数据类型如 string、number、boolean;
- 函数中的可选参数必须提供默认值,函数必须有返回类型,无返回值的函数返回类型需要是 void;
- 不能使用 JS 环境中的内置函数,只能使用 AssemblyScript 提供的内置函数 。
编写 WebAssembly
DEMO
https://github.com/ringcrl/WebAssembly-DEMO
编写 TS
export function f(x: i32): i32 {
if (x === 1 || x === 2) {
return 1;
}
return f(x - 1) + f(x - 2)
}
生成 wasm 文件
asc AssemblyScript/f.ts -o dist/f.wasm
html 运行
fetch('dist/f.wasm') // 从网络加载 f.wasm 文件
.then(res => res.arrayBuffer()) // 转成 ArrayBuffer
.then(WebAssembly.instantiate) // 编译为当前 CPU 架构的机器码 + 实例化
.then(mod => {
// 调用模块实例上的 f 函数计算
console.log(mod.instance.exports.f(40));
});
Webpack 构建
package.json
{
"devDependencies": {
"assemblyscript": "github:AssemblyScript/assemblyscript",
"assemblyscript-typescript-loader": "^1.3.2",
"typescript": "^2.8.1",
"webpack": "^3.10.0",
"webpack-dev-server": "^2.10.1"
}
}
webpack.config.js
module.exports = {
entry: `${__dirname}/AssemblyScript/f.ts`,
module: {
rules: [
{
test: /\.ts$/,
loader: 'assemblyscript-typescript-loader',
options: {
sourceMap: true,
}
}
]
},
};
tsconfig.json
{
"extends": "./node_modules/assemblyscript/std/portable.json",
"include": [
"./**/*.ts"
]
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Web Design
Ethan Watrall、Jeff Siarto / O’Reilly Media, Inc. / 2009-01-02 / USD 49.99
Want to know how to make your pages look beautiful, communicate your message effectively, guide visitors through your website with ease, and get everything approved by the accessibility and usability ......一起来看看 《Head First Web Design》 这本书的介绍吧!