首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在Web Worker中使用什么?

我可以在Web Worker中使用什么?
EN

Stack Overflow用户
提问于 2011-09-21 14:01:41
回答 2查看 7.2K关注 0票数 18

我有几个关于网络工作者的问题

  • Does工作者是否有权访问存储空间?例如,初始化工作者的文件的索引DOM /webSQL和本地存储from?
  • How我可以在工作者中包含文件吗?我有一个具有许多快速应用程序相关功能的functions.js,在工作者中复制粘贴文件内容只是为了有两个不同的位置更新我的functions.
  • Can更新我在工作者中有一个DOM?加载音频文件,这真的没有意义在临时音频标签中读取其持续时间以及它是否可播放。不访问父页面的dom,但在worker本身中有一个DOM。
  • 如果任何问题的答案都是否定的,那么如何手动完成?

这是一个chrome应用程序,所以我可以访问最新的Chrome API,我不需要关心向后兼容性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-21 14:17:22

没有来自web worker阶段的任何类型的DOM访问。所有的DOM操作都必须在主JS线程中完成。Web Workers只能通过消息传递与主线程通信。

这个previous SO question告诉你,网络工作者不能访问本地存储,这是通过谷歌搜索很容易找到的。

相同的线程有一个web工作者可以访问的列表。

不清楚您所说的“在worker中包含文件”是什么意思。您可以导入脚本。我不知道你还在问什么。如果对音频文件有帮助,您可以使用ajax调用来获取数据。

对我来说,这听起来像是你需要做一些基础的研究,关于你可以和网络工作者做什么和不能做什么(因为在网络上有一大堆关于它的文章),然后带着更具体的问题回来,结合这些知识。

对于网络工作者来说,没有黑客可以让你做比你应该做的更多的事情。

如果您有很多工作要做,并且希望主UI尽可能具有响应性,那么您可以在主JS线程中执行工作,并使用setTimeout分成小块执行。这是一个非常古老的设计模式,可以追溯到线程出现或易于使用之前的日子。它涉及到设计你的工作,使得它可以以状态存储在某个持久化对象中的小片段来完成,然后你可以重复做少量的工作,然后返回,只是在下一个计时器滴答时拿起下一个工作。

票数 9
EN

Stack Overflow用户

发布于 2013-08-28 22:09:13

您可以加载javascript库。请参阅此示例:

代码语言:javascript
复制
<body>
    <button>Start</button>
    <div id="output"></div>
    <script id="worker_1" type="text/js-worker">
        importScripts(base_url + '/worker_lib2.js');

        function run(event) {
            var msg = event.data;
            this.postMessage({ answer: hello(event.data.name)});
        }

        this.addEventListener('message', run, false);
    </script>

    <script>
        var base_url = window.location.href.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
        var array = ['var base_url = "' + base_url + '";' + $('#worker_1').html()];
        var blob = new Blob(array, {type: "text/javascript"});

        $('button').click(function() {
            var url = window.URL.createObjectURL(blob);
            console.log(url);
            var worker = new Worker(url);
            worker.addEventListener('message', function(event) {
                $('#output').html(event.data.answer);
            }, false);
            worker.postMessage({
                name: 'Steve'
            });
        });
    </script>
</body>

使用包含hello函数的库worker_lib2.js。

代码语言:javascript
复制
function hello(msg) {
    return 'Hello... ' + msg;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7495227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档