Meine JavaScript -Webarbeiter sterben schweigend an zufälligen Stellen. Wie kann ich das debuggen?
-
22-10-2019 - |
Frage
Der Webarbeiter stoppt nur, keine Fehler oder irgendetwas. Der Code ist völlig deterministisch, wird aber an verschiedenen Stellen im Code sterben.
Bearbeiten: Das Problem war, dass ich keinen Bezug auf meine Arbeiter aufrechterhielt, und so schienen sie zufällig zu sterben, als sie Müll gesammelt wurden.
Lösung
Das Problem war, dass ich keinen Hinweis auf meine Arbeiter aufrechterhielt, und so schienen sie zufällig zu sterben, als sie Müll gesammelt wurden.
Andere Tipps
Ich fand eine ähnliche Situation in Firefox, in der mein Arbeiter nach einer zufälligen Anzahl von Aufrufen der Postmessage schweigend versagte. Nach mehr Graben fand ich das eigentliche Problem. Anscheinend war die Bevölkerung des Arbeitnehmers in Firebug das Problem. Firebug berührte einen Dienst in Firefox 'Chrome JS (privilegierter Coderaum), der dazu führte, dass der Arbeiter zeitweise versagert. Sie können den Patch hier dafür sehen: https://bugzilla.mozilla.org/show_bug.cgi?id=651980
Solange Sie alles in Übereinstimmung mit der Arbeiterspezifikation tun, sollten Sie dieses Problem nicht sehen. Die Fix an Firebug/FX sollte Ende Juni in Firefox 5 ankommen. Hoffe das hilft dir!
Gleiches gilt hier mit einem Webarbeiter, der in Firefox, aber nicht in Chrome, stillschweigend versagt hat. Ich benutzte Arborjs.org so wie folgt:
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...
}
Wo Arbor das Objekt mit einem Webworker ist.
Ich habe das hinzugefügt window.sys = sys;
Linie und es funktioniert jetzt wie ein Zauber sowohl in Firefox als auch in 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...
}