这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战
SharedArrayBuffer
SharedArrayBuffer与ArrayBuffer具有同样的API。这两个的主要区别是ArrayBuffer必须在不同执行上下文间切换,SharedArrayBuffer则可以被任意多个执行上下文同时使用。
原子操作
在正常情况下,JavaScript的单线程环境是可以随时进行这种优化的。但多线程下的指令重排可能导致资源争用,而且极难排错。Atomics API 有两种主要方式来解决了这个问题,分别为所有原子指令相互之间的顺序永远不会重排和使用原子读或原子写保证所有指令(包括原子和非原子指令)都不会相对原子读/写重新排序。
XDM
XDM是一种在不同执行上下文(如不同工作线程或不同源的页面)间传递信息的能力。其中的核心是postMessage()方法,接收三个参数,分别为消息、表示是目标接收源的字符串和可选的可传输对象的数组。对于安全来说第二个参数很重要,可以用来限制浏览器交付的数据目标。XDM接收消息后,window对象会触发message事件,而且这个事件是异步的,当onmessage事件处理程序的event对象会存在3个参数信息,分别为data表示传给postMessage()的字符串数据。origin用来表示发送消息的文档源,指的是网址。第三个是source表示发送消息的文档中window对象的代理。XDM还存在一些特别的地方,就是当postMessage第一个参数始终是一个字符串,可以允许改变任何结构的数据传入。
let zss = document.getElementById("test").contentWindow;
zss.postMessage("zss", "https://www.baidu.com");
file
工作中我们会用到文件选择,当用户在选择一个或者多个文件进行操作时,files集合中就会包含这些选中文件的File对象。比如name用来表示本地系统中的文件名,size用来表示字节计的文件大小。type表示文件MIME类型字符串。我们可以通过FileReader进行异步文件读取,而且有读取文件的方法,例如readAsDataURL(file)等,当出现错误error时,有时候由于某种原因是无法读取文件时触发。load会在文件加载成功后触发,但是如果遇到error被触发,那么load就不会被触发。
let zss = document.getElementById('test');
zss.addEventListener('change', (e) => {
let a = e.target.files, i = 0, l = a.length;
while(i < l) { const x = a[i]; console.log('111'); i++ }
})
除此之外还是在整个文件都加载到内存之后才会继续执行的方法,以及用来读取拖放文件的方法。媒体自定义媒体播放器的方法。原生拖拽的事件方法。还有Date.now()方法只适用于日期时间相关操作,而且是不要求计时精度的操作。计时API允许开发者直接访问这些信息并基于这些信息实现自己想要的功能。随机数和自定义元素周期的方法。