JavaScript standard e l'API DOM non hanno assolutamente alcun meccanismo di esclusione che consente a più thread di accedere in sicurezza agli stessi oggetti.
La soluzione scelta più spesso per consentire il multitasking in JavaScript consiste nell'isolare i thread e consentire loro di scambiarsi tramite messaggi (o eventi). Dare accesso al DOM ai webworkers spezzerebbe quell'isolamento.
Si noti che questo non è completamente specifico per JavaScript: quasi tutti i framework GUI, indipendentemente dalla lingua, limitano le modifiche della GUI a un thread dedicato. JavaScript è più restrittivo poiché il più delle volte (sempre nel browser) non è possibile condividere oggetti.
La soluzione semplice consiste nel consentire al thread principale del browser di apportare le modifiche necessarie, quando il thread in background fornisce le istruzioni through messages. O meglio: esegui solo le numerose attività della CPU nel webworker, lasciando che il thread principale ottenga i dati di input e aggiorni il DOM quando il webworker invia i dati di output.
fonte
2015-05-25 08:26:30
Va notato che è molto semplice rallentare il programma utilizzando mutex e blocchi (il problema comune "perché il mio programma multithread è più lento"). Il modo per velocizzare i programmi di memoria condivisa è quello di strutturare il codice in modo che raramente tocchi i blocchi di scrittura. Sfortunatamente, i programmi GUI tendono a modificare molto lo schermo. Ciò significa che rendere il sottosistema dell'interfaccia utente multithreaded tenderà a rendere il programma molto più lento di un programma con un solo thread. Il messaggio che passa costringe i programmatori a disciplinarsi per non scrivere sul DOM da più thread. – slebetman