WebAssembly完全入门——了解wasm的前世今身

前言

接触WebAssembly之后,在google上看了很多资料。感觉对WebAssembly的使用、介绍、意义都说的比较模糊和笼统。感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成功,要么就是不知所云、一脸蒙蔽。本着业务催生技术的态度,这边文章就诞生了。前部分主要是对WebAssembly的背景做一些介绍,WebAssembly是怎么出现的,优势在哪儿。如果想直接开始撸代码试试效果,可以直接跳到最后一个板块

WebAssembly是什么?

定义

首先我们给它下个定义。

WebAssembly 或者 wasm 是一个可移植、体积小、加载快并且兼容 Web 的全新格式

例子

当然,我知道,即使你看了定义也不知道WebAssembly到底是什么东西。废话不多说,我们通过一个简单的例子来看看WebAssembly到底是什么。

上图的左侧是用C++实现的求递归的函数。中间是十六进制的Binary Code。右侧是指令文本。可能有人就问,这跟WebAssembly有个屁的关系?其实,中间的十六进制的Binary Code就是WebAssembly。

编译目标

大家可以看到,其可写性和可读性差到无法想象。那是因为WebAssembly不是用来给各位用手一行一行撸的代码,WebAssembly是一个编译目标。什么是编译目标?当我们写TypeScript的时候,Webpack最后打包生成的JavaScript文件就是编译目标。可能大家已经猜到了,上图的Binary就是左侧的C++代码经过编译器编译之后的结果。

WebAssembly的由来

性能瓶颈

在业务需求越来越复杂的现在,前端的开发逻辑越来越复杂,相应的代码量随之变的越来越多。相应的,整个项目的起步的时间越来越长。在性能不好的电脑上,启动一个前端的项目甚至要花上十多秒。这些其实还好,说明前端越来越受到重视,越来越多的人开始进行前端的开发。

但是除了逻辑复杂、代码量大,还有另一个原因是JavaScript这门语言本身的缺陷,JavaScript没有静态变量类型。这门解释型编程语言的作者Brendan Eich,仓促的创造了这门如今被广泛使用的语言,以至于JavaScript的发展史甚至在某种层面上变成了填坑史。为什么说没有静态类型会降低效率。这会涉及到一些JavaScript引擎的一些知识。

静态变量类型所带来的问题

这是Microsoft Edge浏览器的JavaScript引擎ChakraCore的结构。我们来看一看我们的JavaScript代码在引擎中会经历什么。

  • JavaScript文件会被下载下来。
  • 然后进入Parser,Parser会把代码转化成AST(抽象语法树).
  • 然后根据抽象语法树,Bytecode Compiler字节码编译器会生成引擎能够直接阅读、执行的字节码。
  • 字节码进入翻译器,将字节码一行一行的翻译成效率十分高的Machine Code.

在项目运行的过程中,引擎会对执行次数较多的function进行优化,引擎将其代码编译成Machine Code后打包送到顶部的Just-In-Time(JIT) Compiler,下次再执行这个function,就会直接执行编译好的Machine Code。但是由于JavaScript的动态变量,上一秒可能是Array,下一秒就变成了Object。那么上一次引擎所做的优化,就失去了作用,此时又要再一次进行优化。

asm.js出现

所以为了解决这个问题,WebAssembly的前身,asm.js诞生了。asm.js是一个Javascript的严格子集,合理合法的asm.js代码一定是合理

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
持续雄踞台湾AutoCAD图书销售排行榜第一名 台湾翔虹AutoCAD技术中心2位专家的年度巨作 语言生动风趣,零压力的阅读享受和学习体验 AutoLISP+DCL+VisualLISP是AutoCAD二次开发的最佳搭档 最新的AutoLISP+DCL+VisualLISP二次开发技术,提高工作效率 《autocad完全应用指南.autolisp+dcl+visuallisp程序设计篇》重点讲解autolisp、dcl、visuallisp三合一的autocad二次程序开发技术。《autocad完全应用指南.autolisp+dcl+visuallisp程序设计篇》分为4篇,共35章。第1篇(第1~10章)为autollsp程序设计基础篇,主要介绍了autollsp的基本结构、语法、功能函数、对象属性、循环、判断式、子程序、选择集、符号表、读文件以及写文件等autolisp程序设计的相关知识与技巧。第2篇(第11章)为62个精选实用autolisp程序设计范例,通过精讲62个autolisp程序设计范例,让读者将autolisp知识融会贯通。第3篇(第12~21章)为autolisp与dcl对话框整合应用,主要介绍了dcl的基础知识、dcl对象属性的定义速查、autolisp掌控dcl的关键技巧;还介绍了编辑框、按钮和文字、切换开关、单选按钮、列表框、下拉菜单、图像,图像按钮及滑动条的设计技巧;另外介绍了新手常犯错误分析及应对技巧。第4篇(第22~35章)为visuallisp程序设计应用与整合,主要介绍visuallisp的基本环境、重要函数和程序调试;还介绍了autocadactivex对象控制以及visuallisp在e2d、3d、文字编辑、图层管理、块与属性管理、options选项控制、excel及word中的应用;最后介绍了visuallisp应用程序的创建与维护。 《autocad完全应用指南.autolisp+dcl+visuallisp程序设计篇》语言风趣生动,内容全面,是一本不可多得的完全学习指南。它可以帮助读者扎扎实实学好autolisp+dcl+visuallisp程序设计,迅速提升读者的设计效率及绘图品质。《autocad完全应用指南.autolisp+dcl+visuallisp程序设计篇》非常适合autocad的初、中、高级读者使用。 《autocad完全应用指南.autolisp+dcl+visuallisp程序设计篇》 第一篇autolisp程序设计基础 第一章autolisp主角潇洒登场 第二章autolisp的关键、基本结构与语法 第三章快速分类浏览autolisp功能函数 第四章新手上路(一)——万丈高楼平地起 第五章新手上路(二)——参数设计关键技巧 第六章对象属性的取得与活用技巧 第七章灵活掌握循环、判断式应用技巧 第八章灵活掌握autolisp子程序的应用技巧 第九章充分掌握选择集与符号表应用技巧 第十章轻松掌握autolisp的读文件与写文件 第二篇62个精选实用autolisp程序设计范例 第十一章62个实用精选autolisp学习范例 第三篇autolisp与dcl对话框整合应用 第十二章dcl对话框设计主角潇洒登场 第十三章轻松、简单、快速地进入dcl天地 第十四章dcl对话框的对象属性定义速查 第十五章autolisp掌控dcl的关键技巧 第十六章autolisp与dcl编辑框、按钮和文字设计技巧 .第十七章autolisp与dcl切换开关和单选按钮设计技巧 第十八章autolisp与dcl列表框和下拉菜单设计技巧 第十九章autolisp与dcl图像及图像按钮设计技巧 第二十章autolisp与dcl滑动条的设计技巧 第二十一章autolisp与dcl设计新手常犯错误分析及应对技巧 第四篇visuallisp程序设计应用与整合 第二十二章visuallisp主角潇洒登场 第二十三章知己知彼:掌握visuallisp的基本环境 第二十四章韩信点兵:活用visuallisp新增的重要函数 第二十五章visuallisp贴心的程序调试功能 第二十六章石破天惊:autocadactivex对象控制 第二十七章轻松掌握visuallisp活用于2d对象 第二十八章轻松掌握visuallisp活用于3d对象 第二十九章轻松掌握visuallisp活用于文字编辑 第三十章轻松掌握visuallisp活用于图层管理 第三十一章轻松掌握visuallisp活用于块与属性管理 第三十二章轻松掌握visuallisp活用于options选项控制 第三十三章轻松掌握visuallisp活用于excel 第三十四章轻松掌握visuallisp活用于word 第三十五章visuallisp应用程序的创建与维护 附录aautolisp函数功能索引 附录bautocad群码代号一览表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值