Firefox中JavaScript和WebAssembly间函式呼叫更加顺畅了,Mozilla在最新版本Firefox Nightly中最佳化了JavaScript到WebAssembly,以及从WebAssembly到JavaScript两个方向的呼叫,主要的手段有两个,减少簿记以及消除中介。
Mozilla对Firefox执行WebAssembly的效能,持续做出改进,在Firefox 58中加入了串流编译以及分层编译技术,让电脑版的Firefox每秒可以编译30到60MB的WebAssembly程式码,也就是说程式码编译的速度将能快过网络下载速度,使得程式码下载结束时,也能几乎同时完成应用程序编译工作。
而现在把效能改善的目标,转向函式呼叫上,Mozilla提到,他们一开始的工作是让JavaScript和WebAssembly可以相互合作,而这件事并不难,只是这两种语言的函式呼叫效率不高,甚至慢的出名。Mozilla在Firefox Nightly上,最佳化了从JavaScript到WebAssembly,和从WebAssembly到JavaScript两个方向的函式呼叫,同时也加速了WebAssembly呼叫浏览器内建函数的呼叫。
最佳化的工作可以归结为两个主要做法,除了减少簿记 ,以减少不必要的组织堆叠框(Stack Frame)工作,还移除中介,以最直接的途径操作函式。每种浏览器都有自己的JavaScript引擎,之前只要处理JavaScript,现在还多了WebAssembly,即便只处理JavaScript,引擎都必须处理两种不同的语言字节码和机器码。
部分JavaScript程式码会进到直译器中,被转成字节码,这比起JavaScript更接近机器码,执行的速度相对来说比较快,但又不如机器码。而部分被大量呼叫的函式则会经由即时编译器(JIT)直接转换为机器码,这过程不需要经过直译器。
这两种语言就像是两块不同的大陆,引擎要执行不同的语言就像是在大陆之间跳跃,但跳跃时需要记录一些必要讯息,而为了组织这个工作,引擎需要一个类似文件夹概念的地方,存放跳跃旅行的堆叠框,随着累积文件夹数量会越来越多,而每切换到不同的大陆,引擎就会启用一个不必要的文件夹,新增文件夹必会经C++进行弹跳床(Trampoline),这会明显的增加执行成本。
Mozilla让经过JIT的JavaScript和WebAssembly的程式码,都使用相同的文件夹来修正这个问题,就像是把两块大陆合并在一起,不再需要在大陆间跳跃,因而让WebAssembly到JavaScript的呼叫,几乎和JavaScript呼叫JavaScript的函式一样快。
另外,除了WebAssembly到JavaScript呼叫需要提高效率外,反向更是需要加速。即便是JIT-ed JavaScript已经和WebAssembly使用相同的语言,但是语言的处理习惯仍然不同,像是JavaScript会使用Boxing来处理动态类型,但WebAssembly是静态型别,因此当引擎从JavaScript获取经装箱(Boxing)的参数,并传递给WebAssembly函式时,WebAssembly会不知道如何使用。
因此引擎在将装箱参数传递给WebAssembly之前,需要经过拆箱手续,而这个动作也需要经C++弹跳床手续。进入中介的过程需要极大的成本,特别是处理这些并不复杂的工作,因此Mozilla的策略是消除这个中间人,来加速整个过程。Firefox采用C++执行的进入存根(Entry Stub )代码,使其可以从JIT程式码直接进行呼叫,当引擎从JavaScript转到WebAssembly时,进入存根将能直接拆箱并将他们放置到正确的位置,而这种方式则消除了经C++弹跳床的程序。
这个方式就像是小抄一样,引擎使用小抄因此不再需要转至C++,相反的,还可以在JavaScript和WebAssembly呼叫的过程间将值拆箱。这让JavaScript呼叫WebAssembly函式的速度变快,甚至在许多情况下,快过JavaScript呼叫JavaScript函式。
而在WebAssembly呼叫浏览器内建函数时,同样会有C++弹跳床所造成的效能低落问题,Mozilla为这些内建函式建立快速路径,当引擎发现正在呼叫的函式属于内建函式,便会使用快速路径来处理呼叫,这些快速路径就像是在大陆间建造快速强桥梁一样。
这一系列的改进让JavaScript和WebAssembly之间的沟通更为有效率,也让WebAssembly呼叫内建函式更为快速,虽然目前只有Firefox获得这些改进,但使用者可以期待其他浏览器也会很快的跟进。
相关文章
- YouTube更新违反规定政策,提升惩处透明度和一致性
2023-12-31 14:00:52
- 传苹果将把中国iCloud正式交给本地化经营 苹果手机icloud换区存储操作
2023-12-27 18:34:43
- 刘德华代言什么手机?刘德华成华为Mate 60 RS非凡大师华为5G新手机代言人
2023-09-26 21:55:08
- WebOS新系统:Palm Pre手机最新款高价登港
2023-06-23 15:39:14
- 帮助企业组织对抗勒索软件,资安通报机构设立防护专区,可协助事前、事中与事后因应
2023-06-22 09:36:10
- 蔚来全系产品降价3万 取消免费换电 换一次电池180元
2023-06-12 17:27:49
- 电商平台三巨头开打最大规模折扣 价格战再次打响
2023-03-05 18:58:40
- 爱立信节省成本裁员四千人 爱立信全球员工总数五分之一
2023-02-24 22:27:29
- 蜜芽关停近况,八位数重金买三字顶级新域名mia.com也关闭
2023-02-23 16:18:14
- 联想CEO杨元庆:联想集团需要裁员32%削减部分业务支出
2023-02-18 12:45:25
- 蓝色光标2022营收亏损18亿 客户预算减少明显
2023-02-18 12:40:08
- 三星工厂或将80%生产转至越南 因本地劳动力成本上升
2023-02-17 23:09:16
- 香港八达通卡如何激活?没用失效过期余额怎么办
2023-02-17 18:34:51
- 中兴通讯被曝将裁员20% 称只裁国外的
2023-02-17 18:33:26
- 苹果新iPhone15Pro手机终于改用USB-C(火牛)数据线??Lightning充电接口退出
2023-02-17 16:57:22
- 突发!蓝色光标曾为中国民企500强龙头 如今业绩亏损断崖下跌
2023-02-16 14:31:19
- 三星发布自家carplay车载中控系统 Car Mode for Galaxy 可以连接carplay吗?
2023-02-14 00:53:17
- Opera浏览器宣布集成ChatGPT 一键生成网页内容摘要
2023-02-14 00:32:08
- 谷歌google计划重返进入中国市场?但结果可能令你失望
2023-02-13 16:57:15
- Zoom紧急裁员1300人 佔员工总数15%
2023-02-08 14:59:11
最新资讯
- YouTube更新违反规定政策,提升惩处透明度和一致性2023-12-31 14:00:52
- 美国法院裁定阿里须为Squishmallows玩具侵权案答辩2023-12-28 19:59:34
- 小米汽车传员工3700人 雷军称小米汽车不可能卖9万92023-12-28 19:41:57
- 吉利飙逾6% 电动车品牌极氪新车款极氪007昨上市 预售价格22.99万元2023-12-28 19:30:28
- 日本丰田汽车厂11月全球产量创新高2023-12-28 19:26:02
手机
- 中国11月手机出货量增34% 5G手机出货量2709.2万部2023-12-28 19:27:57
- 荣耀发布新一代旗舰荣耀Magic5系列,新款上市价格分期0首付3999元起2023-03-06 16:12:32
- 美国商务部指违禁,长江存储被美国拜登制裁名单面临停工裁员2023-02-17 18:41:53
- 苹果Apple iOS车载系统CarPlay支持哪些更多汽车品牌2023-02-02 17:33:27
- 香港去哪买三星手机回来吗? 买香港便宜售价手机市场地点和网站2023-02-02 11:03:11
数码
- 华为5G芯片正式亮相:预示华为将发首款5G手机2023-08-31 13:22:33
- 腾讯传计划放弃虚拟现实VR硬件计划2023-02-17 23:32:30
- 三星手机份额大跌!三星手机中国市场份额变化国内仅剩3%2023-02-01 17:06:15
- 三星手机份额大跌在中国没市场了!国内市场占有率仅剩1%国外比苹果销量高2023-02-01 16:59:53
- vivo发布2022 vivoNEX手机极简易浏览器下载:简洁流畅无广告!2022-12-02 17:29:30
科技
- 中兴受美国制裁事件 被罚了20亿美元过程事件始末 中兴被制裁后公司现状2023-11-02 22:12:46
- B站怎么炸崩了哔哩哔哩服务器今日怎么又炸挂了?技术团队公开早先原因2023-03-06 19:05:55
- 苹果iPhoneXS/XR手机电池容量续航最强?答案揭晓2023-02-19 15:09:54
- 华为荣耀两款机型起内讧:荣耀Play官方价格同价同配该如何选?2023-02-17 23:21:27
- google谷歌原生系统Pixel3 XL/4/5/6 pro手机价格:刘海屏设计顶配版曾卖6900元2023-02-17 18:58:09