2012-08-08 3 views
9

Je sais que les travailleurs Web ne peuvent pas accéder directement au dom. Mais serait-il une mauvaise idée de faire quelque chose comme ceci:Passage de l'objet document à un travailleur Web

var doc = $(document); 

var worker = new Worker("worker.js"); 

worker.postMessage({ cmd: 'doDomStuff', data: doc }); 

Voyez-vous des inconvénients avec ce morceau de code?

Tous les conseils/commentaires sont très appréciés. Pour être clair: je veux seulement obtenir des données du DOM, ne pas définir de nouvelles valeurs ou manipuler le DOM de quelque façon que ce soit.

+1

Dans d'autres langues, le seul thread pour manipuler l'interface utilisateur est le fil qui l'a créé (je pense en particulier .Net, mais Java et d'autres pourraient le faire aussi). À moins que les navigateurs ne gèrent les choses différemment, c'est probablement la raison pour laquelle les web workers n'ont pas naturellement accès au DOM. –

+1

@CoreyOgburn S'il vous plaît voir ma mise à jour – Johan

+2

Semble comme quelque chose assez facile à tester. –

Répondre

6

Je ne vois aucune raison pour laquelle vous ne pouvez pas faire, mais cela pourrait conduire à des problèmes lorsque vous essayez de manipuler le même élément dans le travailleur et dans le code du principal en même temps .

Vous devrez ajouter un verrouillage de mutex à votre code.

Désolé érafler ci-dessus ...


Les travailleurs ne pas ont accès à:

Le DOM (il est thread-safe)
L'objet fenêtre
L'objet document
L'objet parent

Source

+3

Je sais que le travailleur n'a pas un accès direct au DOM, c'est pourquoi je tente de le passer comme un objet. J'ai oublié de mentionner que je n'avais pas l'intention de le manipuler chez le travailleur. Je veux juste obtenir des valeurs, ne rien définir. – Johan

+0

@Johan il ne peut pas ** rien ** à la dom. quoi que ce soit de la dom que vous passez il sera essentiellement un clone de l'objet et vous ne serez pas en mesure de faire quelque chose avec lui .... – Neal

+0

Oh ok, bien merci pour l'info – Johan

Questions connexes