2013-03-24 9 views
7

Jeśli mam uruchomiony kod javascript, który na przykład wykonuje pewne działanie na zegarze i ten kod jest osadzony na stronach internetowych w zakładce 1 i karcie 2 przeglądarki internetowej, to czy kod klienta może działać jednocześnie ? Czy też kod klienta javascript zawsze działa w tylko jednym wątku przeglądarki?JavaScript/przeglądarka internetowa model gwintowania

Ewentualnie, jeśli istnieje zestaw ramek z ramkami nadrzędnymi i podrzędnymi, to czy kod javascript może działać jednocześnie w tej sytuacji?

Czy istnieje określony standardowy model lub czy zależy on od przeglądarki?

Moje główne środowisko docelowe to IE9, więc chciałbym wiedzieć, co się tam dzieje.

EDYTOWANIE Nie szukam wątków wsparcia lub jak robić wątki w javascript. Osobiście nie widzę potrzeby. To także sprawia, że ​​życie jest bardziej skomplikowane. Chcę tylko wiedzieć, czy muszę się tym martwić, a jeśli tak, to w których przeglądarkach.

+0

Dwie zakładki są całkowicie niepowiązane; nie ma standardu dla. Chrome na przykład uruchamia każdy z nich w innym * procesie *, podczas gdy Opera jest znana z robienia wszystkiego w jednym wątku. – Bergi

Odpowiedz

5

Dla pojedynczej "przestrzeni obiektu" JavaScript (pojedyncza strona w przeglądarce lub wystąpienie interpretera w pliku node.js) istnieje co najwyżej jeden wątek. W rzeczywistości mówienie o wątkach w kontekście JavaScriptu nie ma znaczenia. Model wykonania JS opiera się na pętli zdarzeń i wywołaniach zwrotnych.

Różne ramki nigdy nie mogą być uruchamiane równocześnie, ponieważ mogą uzyskać dostęp do DOM (i przez dowolne obiekty) względem siebie. To może spowodować, że wątki będą niebezpieczne.

W przypadku pracowników WWW nie ma bezpośredniego dostępu do struktury danych na granicy pracownika, dlatego nie można obserwować nawlekania i bezpiecznie. Jedyną komunikacją tutaj jest przekazywanie wiadomości.

+0

Dlaczego myślisz, że ramki komunikują się tylko za pomocą wiadomości? Dwie strony (nie ograniczone przez SOP) mogą oddziaływać bezpośrednio z elementami drugiego. – Bergi

+0

@Bergi w prawo! Zmieniłem odpowiednio odpowiedź. To pokazuje, że różne klatki nie mogą działać jednocześnie. – usr