在webworker线程中可以使用indexeddb&47;localstorage吗

2025-05-20 07:16:20
推荐回答(1个)
回答(1):

创建web worker
可以使用web workerAPI轻松的创建一个worker实例,例如:
var worker = new Worker("worker.js")
上面个的这行代码将会加载worker.js这个文件,然后再后台运行。你需要调用Worker()这个构造函数,并将需要在后台执行的文件的URI作为参数。如果你想从worker中得到数据,你需要注册该worker的onmessage事件处理函数,例如:
var worker = new Worker("router.js");
worker.onmessage = function(event){
console.log("called here form the router");
}
同样你也可以通过addEventListener来监听你的worker,
var worker = new Worker("router.js")
worker.addEventListener('message',function(event){
console.log("called here form the router");
},false);
worker.postMessage();//启动这个worker
web worker能做什么?不能做什么?
worker是不能访问“父”页面(即创建页面)的dom,他不能访问以下任何一个对象:
window 对象
document对象
parent对象
并且最后同样重要的是,在worker中不能使用依赖以上对象的javascript库,像jQuery。
由于多线程性质,web worker 只能访问某些特定的javascript特性。下面这些列表时他可以访问的
navigator对象
location对象(只读)
XMLHttpRequest方法
atob()、btoa()方法,可以讲base64编码转成二进制数据,或逆操作
setTimeout() / clearTimeout() and setInterval() / clearInterval()
dump()
应用程序缓存
可以通过importScripts()方法,导入外部js
创建次级worker 即 worker中创建worker
web worker 的执行
在web worker线程自身中,代码会自上而下的同步执行,之后他们会进入到事件响应的异步阶段。这样,就允许将web worker分成两大类:
注册了onmessage事件相应程序的web worker,用来长时间执行任务,并且在后台执行。这个web worker是不会推出的,因为他一直监听新的消息
另一种是没有注册onmessage事件的web worker,处理一个独立的任务(可以从web app 主线程中脱离的),例如抓取和解析超大的json对象。这样的web worker一点操作结束就会退出。(在某些情况下,如果你注册了callback处理,那么将会等待所有的callback结束后再退出。)