2013-03-24 20 views
7

Se si esegue codice javascript che ad esempio esegue un'azione su un timer e questo codice è incorporato nelle pagine Web nella scheda 1 e nella scheda 2 di un browser Web, quindi il codice client può essere eseguito contemporaneamente ? Oppure il codice del client javascript viene eseguito sempre in un solo thread del browser?threading JavaScript/browser Web modello

In alternativa, se è presente un set di frame con frame padre e figlio, il codice javascript potrebbe essere eseguito contemporaneamente in questa situazione?

Esiste un modello standard specificato o dipende dal browser?

Il mio ambiente di destinazione principale è IE9, quindi sarei interessato a sapere cosa succede lì.

EDIT Non sto cercando supporto per il threading o come eseguire il threading in javascript. Personalmente non vedo il bisogno. Rende anche la vita più complicata. Voglio solo sapere se ho bisogno di preoccuparmi, e se sì su quali browser.

+0

Due schede sono completamente indipendenti; non esiste uno standard per Ad esempio, Chrome esegue ognuno di essi in un processo * diverso *, mentre Opera è noto per eseguire tutto in un solo thread. – Bergi

risposta

5

Per un singolo "spazio oggetti" JavaScript (una singola pagina in un browser o un'istanza dell'interprete in node.js), esiste al massimo un thread in esecuzione. In effetti parlare di thread nel contesto di JavaScript non è significativo. Il modello di esecuzione JS è basato su loop eventi e callback.

I frame diversi non possono mai essere eseguiti contemporaneamente perché possono accedere al DOM (e per estensione a oggetti arbitrari) l'uno dall'altro. Ciò renderebbe il threading non sicuro.

Con gli operatori Web non è possibile accedere direttamente a qualsiasi struttura dati attraverso il confine del lavoratore, pertanto il threading non è osservabile e può verificarsi in modo sicuro. L'unica comunicazione qui è attraverso il passaggio dei messaggi.

+0

Perché pensi che i frame comunichino solo usando i messaggi? Due pagine (non limitate da SOP) possono interagire direttamente con elementi dell'altro. – Bergi

+0

@Bergi, giusto! Ho cambiato la mia risposta di conseguenza. Questo in realtà mostra che diversi frame non possono essere eseguiti contemporaneamente. – usr