V8发布7.5版,紧抱WebAssembly大腿

 
 

640?wx_fmt=gif


Ending定律:一切可编译为WebAssembly的,终将会被编译WebAssembly。


最近V5刚发布7.5版本,增强了对WebAssembly的支持。原文可以看这里:https://v8.dev/blog/v8-release-75

640?wx_fmt=jpeg

WebAssembly部分的改进

官方计划在Chrom75版本中对WebAssembly模块增加隐式的缓存支持。也就是说当第二次访问同一个WebAssembly模块是可以从缓存直接加载编译好的WebAssembly模块。

内存批量操作

此外还对WebAssembly的内存披露操作的新指令提供了支持。这是对内存操作进行优化的新提案,新加的指令中,memory.copy提供类似C语言的memmove函数的功能,而memory.fill则用于对内存进行批量填充。

;; Copy 500 bytes from source 1000 to destination 0.(memory.copy (i32.const 0) (i32.const 1000) (i32.const 500));; Fill 1000 bytes starting at 100 with the value `123`.(memory.fill (i32.const 100) (i32.const 123) (i32.const 1000));; Copy 10 table elements from source 5 to destination 15.(table.copy (i32.const 15) (i32.const 5) (i32.const 10))

;; Fill 1000 bytes starting at 100 with the value `123`.
(memory.fill (i32.const 100) (i32.const 123) (i32.const 1000))

;; Copy 10 table elements from source 5 to destination 15.
(table.copy (i32.const 15) (i32.const 5) (i32.const 10))

memory.copymemory.file指令的参数和C语言的memmovememset一样。此外,批量操作不仅仅针对内存,table也有对应的指令,比如table.copy用于辅助表格数据。

内存数据初始化

新的提案还提出一种** passive段,类似传统的只读静态数据段。这些 passive**段在定义模块实例时不会被初始化,但是可以用于填充内存数据。

比如:

;; Define a passive data segment.(data $hello passive "Hello WebAssembly");; Copy "Hello" into memory at address 10.(memory.init (i32.const 10) (i32.const 0) (i32.const 5));; Copy "WebAssembly" into memory at address 1000.(memory.init (i32.const 1000) (i32.const 6) (i32.const 11))

;; Copy "Hello" into memory at address 10.
(memory.init (i32.const 10) (i32.const 0) (i32.const 5))

;; Copy "WebAssembly" into memory at address 1000.
(memory.init (i32.const 1000) (i32.const 6) (i32.const 11))

首先通过data指令定义一个passive只读数据段。然后memory.init指令用只读数据来初始化内存。种种迹象都表明WebAssembly要从走一遍计算机发展的长征路,这对于兲朝来说是绝对一个机遇。

JavaScript还在挣扎自我革命

JS语言天生具备吸星大法的能力,到处吸收各种语法糖。这次是给数字增加了下划线分隔符:

var a = 1000000000000 var b = 1019436871.42 // 新语法var a = 1_000_000_000_000 var b = 1_019_436_871.42 1000000000000 
var b = 1019436871.42 

// 新语法

var a = 1_000_000_000_000 
var b = 1_019_436_871.42 

没什么值得说的。最终发布的时候还是不敢放心使用,还会再编译一次。

性能:流式解析JS脚本

流式解析JS脚本说得通俗一点就是边下载边解析。因为历史包袱,之前的Chrome虽然支持流式解析,但是首先要经过主线程绕一次。大家知道JS的主线程是非常容易导致程序卡顿的,这也导致流式解析经常不能在第一时间启动。

可以看下官方给出的对比:

640?wx_fmt=jpeg

640?wx_fmt=jpeg

红圈圈都是大便梗塞的位置。总之新版本又NB了。

最后

Chrome已经成功继承了IE的垄断衣钵,但是谁来担起FireFox的责任呢?WebAssembly该你上场了……


640?wx_fmt=png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值