我的javascript网络工作者在随机的地方默默地死去。我该怎么调试呢?

时间:2011-01-22 20:36:37

标签: javascript debugging web-worker

网络工作者只是停止,没有错误或任何事情。代码完全是确定性的,但它会在代码中的不同点死掉。

编辑:问题是我没有保留对工人的引用,因此当他们被垃圾收集时,他们似乎随机死亡。

3 个答案:

答案 0 :(得分:1)

问题在于我没有保留对工人的提及,所以当他们被垃圾收集时,他们似乎随意死亡。

答案 1 :(得分:1)

我在Firefox中发现了类似的情况,我的工作人员在对postMessage进行随机调用之后似乎默默地失败了。经过多次挖掘,我发现了真正的问题。显然,Firebug中的工人被调用是个问题。 Firebug正在触摸Firefox的Chrome JS(特权代码空间)中的服务,导致工作者间歇性地失败,你可以在这里看到它的补丁:https://bugzilla.mozilla.org/show_bug.cgi?id=651980

只要您按照工作规范执行所有操作,就不应该看到此问题。至于对Firebug / Fx的修复,它应该在6月底到达Firefox 5。希望这能帮到你!

答案 2 :(得分:0)

与此同时,一名网络工作者在Firefox中默默地失败,但在Chrome中没有。正在使用arborjs.org这样称呼:

buildVisualization = function() {
  var sys = arbor.ParticleSystem(200, 200, 0.9); // create the system with sensible repulsion/stiffness/friction 
  sys.parameters({gravity:true}); // use center-gravity to make the graph settle nicely (ymmv) 
  sys.renderer = Renderer("#viewport"); // our newly created renderer will have its .init() method called shortly by sys... 
}

其中arbor是使用网络工作者的对象。

我添加了window.sys = sys;行,现在它就像firefox和chrome中的魅力一样。

buildVisualization = function() {
  var sys = arbor.ParticleSystem(200, 200, 0.9); // create the system with sensible repulsion/stiffness/friction
  window.sys = sys;
  sys.parameters({gravity:true}); // use center-gravity to make the graph settle nicely (ymmv)
  sys.renderer = Renderer("#viewport"); // our newly created renderer will have its .init() method called shortly by sys...
}