持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情
一、前言
最近在工作过程中,又见到一个新名词webassembly,本着格物致知的精神,我就开始了我的求知之路,在查阅了些许资料后,总归是对webassembly有了点认知。
下面我就献丑跟大家伙讲一下webassembly,希望看完本文,你也能初步了解这个被称为第四种web语言的webassembly。
二、webassembly
1、webassembly的由来
web assembly汇编语言,简称wasm,首发于2015年,至今已经7年,2019年被官方并入web语言标准,称为继html,js,css之后的第四种web语言。
2、webassembly的作用
web assembly相当于一个微处理器,它可以将由C/C++/Go/Rust等高级编程语言,编译成浏览器能运行的机器码,从而实现由C/C++/Go/Rust编写的程序,能以一种近乎在本机环境的运行速度,在浏览器里运行这些程序。
性能上相对于js来说是有较大提升的。
不过有句话是这样说的。
JavaScript不是为CPU密集型和高性能应用程序开发的。
我们不能对js苛求太多。
wasm提升性能的点较多,我们举其中2个点来讲,
(1)静态语言和动态语言
js是动态语言,变量都是不固定类型的,所以每次运行一条语句,都需要经过几次类型检查和转换,确定是否是有效数据才最终执行,这无疑拖慢了执行速度。(一条语句拖慢的时间不多,但项目里代码加起来就积少成多了)。
相比之下,web assembly可以将静态语言直接编译成机器码,这里变量类型是固定的,不需要检查和转换,相同的操作,这里少了检查的环节,自然运行速度比较快。
同理,也可以用ts进行开发,因为ts变量类型也提前声明了。
(2)机器码
web assembly可以直接生成机器码,即浏览器最终实现的代码,js则还需要浏览器内核的js虚拟机进行解析,才能生成机器码。
这里又少掉一个步骤,运行速度有大幅提升。
3、webassembly关系拓补图
web assembly跟其他语言的关系如下,web assembly能编译高级语言,但是web assembly不能直接操作dom,所以实际开发过程中还需要借助js,最终才能将机器码直接对接给浏览器。
三、小结
总而言之,webassembly不是一种类似c/c++的编程语言,而是一种技术,一种工具,负责将高级语言转换成机器码,提升性能的技术。有兴趣的小伙伴可以多关注一下。见识浅显,有不对或者不足的地方,可以提出来探讨一下。
ps: 我是地霊殿__三無,日常记录打卡。