2009-10-15 12 views
7

Javascript nie ma widocznych tematów (jeszcze - nadchodzą wątki pracownicze, zobacz więcej informacji w JavaScript and Threads).Jak działa "wiele scen wykonawczych" Javascriptu?

Jednak wydaje się, że ma wiele kontekstów wykonawczych, które wydają się istnieć jednocześnie - niezależnie, gdy masz wiele okien Firefox i wiele kart Firefox/IE.

Jeśli na stronie znajduje się wiele elementów iframe, każdy ma swój własny kontekst wykonania, ale ma udostępnione dane. Jeśli dwa elementy iframe znajdują się w tej samej domenie, mogą uzyskiwać dostęp do swoich struktur DOM i nawiązywać połączenia między sobą. Mimo to nie mogłem znaleźć w Google opisu modelu planowania, tj. Czy jest:

  • równoległy/wyprzedzający, w takim przypadku - czy można czasowo zawiesić? jakiejkolwiek formy wzajemnego wykluczenia?
  • spółdzielnia, w takim przypadku - w jaki sposób dochodzi się do innego kontekstu?
  • Brak nakładania się - tzn. Procedura obsługi zdarzeń w głównej ramce musi zostać zwrócona, zanim można wywołać procedurę obsługi zdarzeń w elemencie iframe (i na odwrót)?

Więc pytanie brzmi:

  • Czy istnieje zagwarantowane kontekst modelu przełączanie?
  • Jeśli nie, jakie są dominujące modele przełączania kontekstów?
    • Wygląda na to, że Firefox i IE mają nie nakładający się harmonogram między kontekstami z tej samej karty i współpracują między różnymi kartami/oknami w tym samym procesie - ale nie jestem pewien.
    • Chrome używa systemowego harmonogramu dla różnych kart (może używać wielu rdzeni, które należą do grupy równoległej/prewencyjnej, ale nie wiem, czego używa do wielu ramek na tej samej karcie.)
    • Nie mam pojęcia o Safari czy Opera.

Dzięki!

Odpowiedz

6

w Firefoksie, wszystkie JavaScript na stronach internetowych działa na głównym wątku, więc wszystko jest w odcinkach. Każda klatka będzie mieć własną JSContext i każda metoda jest wykonywana do końca, nie ma żadnego uprzedzenia.

+1

(Wiesz o tym, ale dla kompletności: to Firefox 3.5. Ponieważ przeglądarki stają się wieloprocesowe, ponieważ Chrome już istnieje, a Firefox będzie kilka wersji później, niepowiązane zakładki prawdopodobnie będą działać niezależnie, podczas gdy (przynajmniej na razie) dla "pokrewnych" "zakładki, które programiści przeglądarki próbują zachować semantykę" run to completion ".) – Nickolay

+0

Oczywiście, ale Firefox jeszcze tego nie robi, i przynajmniej do Firefox 4.0;) – sdwilsh

+0

Oddzielne zakładki są na osobnych procesach, żadnych problemów tam. Elementy iframe/frames na jednej karcie nadal udostępniają ten sam wątek. Programiści Js mogą nadal swobodnie oddychać i nie martwić się o współbieżność. –