- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从 here 学习 HTML5 worker,作者使用 self.onmessage
和 self.postmessage
在主线程和 worker 之间进行通信“因为worker 无法访问 DOM。”但在下面似乎 self
指的是主线程和 worker。
function CalculatePi(loop)
{
var c = parseInt(loop);
var f = parseFloat(loop);
var n=1;
//these errors will need more work…
if (isNaN(c) || f != c ) {
throw("errInvalidNumber");
} else if (c<=0) {
throw("errNegativeNumber");
}
for (var i=0,Pi=0;i<=c;i++) {
Pi=Pi+(4/n)-(4/(n+2));
n=n+4;
}
self.postMessage({'PiValue': Pi});
}
//wait for the start 'CalculatePi' message
//e is the event and e.data contains the JSON object
self.onmessage = function(e) {
CalculatePi(e.data.value);
}
上面的代码来自一个单独的包含worker的js文件,我理解self.onmessage
中的self
指的是worker从主线程开始计算,但为什么它会使用 self.postMessage
向自己发送消息? #postMessage 和#onmessage 的默认回执是否包括主线程和工作线程?
后面作者贴出了通过这个函数计算圆周率的方法:
worker.onmessage = function(e) {
document.getElementById("PiValue").innerHTML = e.data.PiValue;
};
当工作人员无权访问 DOM 时,这是如何工作的?它显然在这里使用了 document.getElementById。
最佳答案
在您的文件 worker.js 中,将 self.postMessage
视为工作人员(自己)应该发布消息的命令/指令。因为它只能与创建它的 mainJS 通信,所以这条消息就在那里。 :)同样在您的 mainJS 中,worker.onmessage
应该被理解为“消息来自 worker ”的事件。
所以基本上您在两个脚本中都有两个选项:在 mainJS 中:worker.postMessage("message");
向工作人员发送消息 - 和 worker.onmessage = function(event){...}
收听来自 worker 的消息
在 worker 脚本中:(self or) this.onmessage = function(event){...}
用于监听来自 mainJS 的消息 - 和 self.postMessage("message");
将一些东西发送回 mainJS
关于javascript - #onmessage 和#postmessage 如何在主线程和 HTML5 的网络 worker 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38532535/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!