【问题标题】:javascript web worker posting messagejavascript web worker 发布消息
【发布时间】:2017-01-15 20:57:07
【问题描述】:

我的脚本正在紧张处理,所以为了不阻塞 UI 并避免浏览器处理上限(chrome 上为 12.5),我尝试了 web worker

问题是对象太大并且包含数组 所以帖子消息不会通过投掷来传输 "在 'Worker' 上执行 'postMessage' 失败:无法克隆对象"

所以我考虑对其进行字符串化,对象没有完全转移,因为它包含数组,以及字符串化为“[]”的数组

所以我考虑将数组转换为字符串/对象以便能够将它们传输回来,但由于对象很大,我的堆栈内存不足(即使使用第三方插件)

那么在这种情况下我缺少什么可以帮助的吗?

  • 任何更好的方法来处理耗时的功能,而无需 阻止用户界面并允许我报告进度;会解决 这个
  • 任何将对象转移到网络工作者的方法 对象和数组;会解决这个问题

debugging picture of the problem

the sub object that isn't stringified

【问题讨论】:

  • object wasn't fully transferred as it contains arrays, and arrays where stringified to "[]" 这听起来像是对结果的误解......数组很容易被字符串化......你能解释一下你正在尝试使用什么样的对象 - 你能解释一下为什么你'当问题明显与浏览器相关时,我标记了 node.js
  • 嗯,它是我的主对象中的一个对象数组,它不会对其进行字符串化(在 chrome 开发工具上调试,对象已完全填充,并且在 json 字符串化调用后它没有完全字符串化)
  • debugged on chrome dev tools 不要总是相信您在控制台中看到的内容 - 如果 JSON.stringify 没有抛出错误,那么您几乎可以肯定它有效
  • 你仍然没有解释你正在处理的对象是什么类型 - 如果它包含 DOM 元素,那么JSON.stringify 不会给你整个 enchilada
  • 我在使用 chrome 开发工具调试时添加了一张图片

标签: javascript arrays json node.js web-worker


【解决方案1】:

如果您执行以下操作,您是否正确地重新创建了对象?

在你的主线程上:

var worker = new Worker('myworkerfile.js')
worker.postMessage(JSON.stringify(myclusters))

在工作线程上:

onmessage =  function(e) {
  var myclusters = JSON.parse(e.data);
  console.log(myclusters)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多