Standard-JavaScript und die DOM-API haben absolut keine Ausschlussmechanismen, die mehreren Threads den sicheren Zugriff auf dieselben Objekte ermöglichen.
Die Lösung, die meistens ausgewählt wird, um Multitasking in JavaScript zu ermöglichen, besteht darin, Threads zu isolieren und sie nur durch Nachrichten (oder Ereignisse) austauschen zu lassen. Würden diese Webworker Zugang zum DOM erhalten, würde dies die Isolation zerstören.
Beachten Sie, dass dies nicht ganz spezifisch für JavaScript ist: Fast alle GUI-Frameworks, unabhängig von der Sprache, beschränken die Änderungen der GUI auf einen dedizierten Thread. JavaScript ist restriktiver als am häufigsten (immer im Browser) können Sie Objekte überhaupt nicht freigeben.
Die einfache Problemumgehung besteht darin, dass der Hauptthread im Browser die erforderlichen Änderungen vornimmt, wenn der Hintergrundthread den Befehl through messages enthält. Oder besser gesagt: Erledigen Sie nur die CPU umfangreiche Aufgaben im Webworker, lassen Sie den Hauptthread die Eingabedaten erhalten und aktualisieren Sie das DOM, wenn der Webworker die Ausgabedaten sendet.
Es sollte angemerkt werden, dass es sehr einfach ist, Ihr Programm mit Mutexes und Locks langsamer zu machen (das übliche "Warum ist mein Multithread-Programm langsamer"). Um Shared-Memory-Programme schnell zu machen, müssen Sie Ihren Code so strukturieren, dass Schreibsperren nur selten berührt werden. Leider neigen GUI-Programme dazu, den Bildschirm sehr zu modifizieren. Das bedeutet, dass das Multithreading des UI-Subsystems dazu führt, dass das Programm viel langsamer als ein Ein-Thread-Programm wird. Message Passing zwingt Programmierer, sich selbst zu disziplinieren, um nicht aus mehreren Threads in das DOM zu schreiben. – slebetman