WebAssembly并不是要取代JavaScript,二者绝非水火不容。实际上,许多应用程序同时使用WebAssembly和JavaScript。不过,如果硬要对比二者的速度,那么WebAssembly显然是增强型。
JavaScript的性能瓶颈在哪里?
JavaScript的一些根本特性使它速度受限,比如动态类型。直到2008年,JIT(即时编译器)出现,才让JavaScript的性能有了飞跃式提升。
性能提升使得JavaScript开始被用于服务器端。WebAssembly的出现有望使性能曲线再次实现飞跃。
时间都去哪儿了?
JIT出现之前,JavaScript花在各任务上的相对时长是这样的。
有了JIT,JavaScript花在各任务上的相对时长变成了这样。
相比之下,WebAssembly竟然是这样的!
如何让计算机听我发号施令?
想象有机星人来到地球,你被派去和机星人谈判。要怎么交流呢?
你或许需要一位口译官,抑或需要一位笔译官。
口译官可以当场逐字逐句地翻译,这其实就是解释器所做的事情。
笔译官则会将内容写下来,让双方自己理解。这其实就是编译器所做的事情。
解释器刚运行起来时速度较快,但是效率不高,因为同样的代码可能需要重复解释。编译器则恰恰相反。正因为两者各有千秋,所以JIT结合了二者各自的优势。
那么,WebAssembly是如何做到与机星人交流的呢?我们来分析一下机星人的大脑构成。
-
ALU是算术逻辑单元,相当于机星人大脑负责思考的部分。
-
register是寄存器,相当于机星人大脑的短时记忆区。
-
RAM是内存,相当于机星人大脑的长期记忆区。
如果给机星人发送二进制指令,它就会这样解读。
问题是,机星人的大脑构造可能不一样,比如既有可能是x86结构,又有可能是ARM结构。而我们也会使用不同的语言,比如C、C++或者Rust。要两两匹配地进行翻译,工作量实在太大!
为此,人们增加了IR,即中间表示。编译器的前端先将高级语言变成IR,编译器的后端则负责将IR变成汇编码。
那么,WebAssembly的位置在哪里呢?
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!