【问题标题】:Using web workers with chrome extension使用带有 chrome 扩展的网络工作者
【发布时间】:2015-12-27 11:42:19
【问题描述】:

我在这里想要实现的是在工作人员上执行XHRHttpRequest() 以加速我的扩展。我正在使用来自hereworker_proxy.js。它工作得很好,只是我无法弄清楚如何将字符串传递给这个工人。 这是我的代码:

ma​​nifest.json

"permissions": [
    "alarms",
    "activeTab",
    "tabs",
    "webNavigation",
    "http://*/*", 
    "https://*/*",
    "cookies"
   ],

   "options_page": "options.html",
  
   "background": {
    "persistent": false,
    "scripts": [ "worker_proxy.js","background.js"]
  },
  "content_scripts": [
    {
      "matches": ["https://*/*","http://*/*"],
      "js": ["jquery-2.1.4.js","hmac-sha256.js","enc-base64-min.js","worker_proxy.js","content.js"]
    }
  ],
  "web_accessible_resources": [ "worker_proxy.html","worker.js"],
  

worker.js

var somestring=getStringFromContentJS()

var xhr=new XMLHttpRequest();
var request="GETgoogle.com"
xhr.open("GET", request, false);
xhr.send(someString);

postMessage('Result\n' + xhr.responseText);

content.js

  var az_worker = new Worker(chrome.runtime.getURL('getAzProducts.js'));
  az_worker.onmessage = function(event) {
    alert('Message from worker: ' + event.data);
  };

我能够从 worker.js 接收数据,但是如何向它发送数据, 即,

var somestring=getStringFromContentJS()

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension


    【解决方案1】:

    要将数据发送给worker,只需将以下内容添加到worker.js的顶部:

    self.onmessage = function(event) {
        // Do something with event.data
    };
    

    并使用az_worker.postMessage(somestring); 向其发送数据。


    但是您的代码过于复杂。如果您的目标是“加速我的扩展”,那么您应该使用 Web Worker 来制作同步 XHR,而是在主线程上使用 异步 XHR。 Web Worker 非常适合 CPU 密集型任务,但对网络请求等 I/O 任务没有任何优势。

    有关使用 XMLHttpRequest 的教程,请参阅 https://developer.mozilla.org/en-US/docs/AJAX/Getting_Startedhttps://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

    【讨论】:

    • 我计划创建一个在 web worker 中运行的资产加载器,可以肯定地说这不会很快发生。 :D 谢谢!
    猜你喜欢
    • 2014-03-12
    • 2014-02-19
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    相关资源
    最近更新 更多