webWork中屏蔽window与document

如若需要屏蔽浏览器window对象该如何操作(适用场景为恶意注入的js代码更改dom元素等)

首先,js是单线程语言,如若有大量计算代码堵塞,则会引发一系列问题,如性能过差、不利于维护等。
webWork则是可以把本该同步的代码变成异步,在主线程中开辟了子线程,使得相应代码在子线程中自行且不影响主线程,而且执行结果返回给主线程。

而worker的环境是和浏览器环境互相独立的线程

如此

function foo(code) {
  const blob = new Blob([code]);
  const str = URL.createObjectURL(blob);
  
  const worker = new Worker(url);
  return worker;
}

const code = `
  console.log('work环境和浏览器环境是相互独立的线程,此时无法获取浏览器对象的document和window的');
  console.log(typeof window, typeof document); // undefined undefined
`;

foo(code);

webworker

接下来梳理如何使用
js语言采用的单线程模式,也即是说所有任务都只能在一个线程上完成,一次只能做一件事,前面的没有完成,后面的就要等待着。按理说是这样理解的。
随着科技进步,设备的cpu性能增强,出现多核cpu,单线程会导致很大的不方便,多核cpu的性能也没有合理的利用。

缺点:一旦建成就会不断运行,不会被主线程上的东西打断,这导致了可能会大量浪费性能,所以谨慎使用

主线程:调用worker.postMessage()方法,向 Worker 发消息。
worker.postMessage()方法的参数,就是主线程传给 Worker 的数据。它可以是各种数据类型,包括二进制数据。
接着,主线程通过worker.onmessage指定监听函数,接收子线程发回来的消息.

Worker 线程:内部需要有一个监听函数,监听message事件。

const index = `self.addEventListener('message', function (e) {
	//监听主线程事件
    self.postMessage('You said: ' + e.data);
}, false);`
const blob = new Blob([index]);
const str = URL.createObjectURL(blob);
var worker = new Worker(str);
//监听work线程事件
worker.onmessage = (e) => {
    console.log(e);
}

//与work线程交互
worker.postMessage('val')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值