2013-06-18 12 views
19

Ogólnie wykonywanie JavaScript w przeglądarce jest traktowane jako jednowątkowe. Czy ten pojedynczy wątek dotyczy wszystkich kart otwartych w oknie przeglądarki?Czy wszystkie zakładki w oknie przeglądarki udostępniają pojedynczy wątek JavaScript?

Innymi słowy, jeśli (inny) kod JavaScript działa w różnych zakładkach, wszystkie są wykonywane za pomocą pojedynczego wątku?

Co się dzieje, gdy otwarte jest wiele okien tej samej przeglądarki, a każde okno zawiera wiele kart?

Czy odpowiedź na powyższe pytanie zależy od dostawcy/wersji przeglądarki?

+1

Myślę, że ostatnie pytanie odpowiada na wszystkie pytania. – HamZa

+1

Sądzę również, że twoje pytanie najlepiej pasuje do [Security SE] (http://security.stackexchange.com). – HamZa

+0

@HamZa, poza kwestią bezpieczeństwa, jest związana z wydajnością/zachowaniem twojego kodu JS, tak jakby była jednolita na kartach, wtedy część twojego kodu (np. 'SetTimeout') może być opóźniona, co może spowodować niepożądane zachowanie. – MLister

Odpowiedz

8

Nie ma sposobu, aby odpowiedzieć na to w sposób ogólny, ponieważ jest to specyficzna implementacja przeglądarki.

Prawie każda starsza przeglądarka zawsze używała pojedynczego wątku dla każdej zakładki, ale bardziej nowoczesne przeglądarki/wersje mogły to zmienić (na przykład, chrome ma wątek na zakładkę - w rzeczywistości ma nawet cały proces na zakładkę). EDYCJA: poprawka z komentarzem

W rzeczywistości chrome używa procesu na miejsce wystąpienia. Oznacza to, że pojedynczy miejsce otwarte w wielu kartach będzie wciąż świadczonych przez tego samego procesu

Jeśli proszą go ze względu na wydajność (tak jakby pytając „to jest ok, aby zablokować wszystko, co w mojej stronie stosując wieczna, nieskończona pętla, lub która rozprzestrzeni się na inne zakładki "), bezpieczniej jest założyć, że wątek jest wspólny dla wszystkich. Jeśli jest w bieżącej przeglądarce, to zaplanowałeś to, a jeśli nie, to masz lepszą wydajność niż planowano, prawie nie stanowi problemu.

Aby uzyskać kod działający we własnym wątku, należy utworzyć pętlę pod numerem Web Workers, ale w dalszym ciągu nie są one w pełni implementowane w każdej "nowoczesnej" przeglądarce.

+0

dzięki za odpowiedź. Więc Chrome (wszystkie wersje?) Jest jasny, a co z 'FF 11 +' i 'IE 9 +', 'Safari 5 +'? Wszystkie są ogólnie uważane za "nowoczesne" przeglądarki. – MLister

+4

W rzeczywistości chrome używa instancji Process-per-site-instance. Oznacza to, że pojedyncza strona otwarta na wielu kartach nadal będzie renderowana w tym samym procesie. –

+0

@MLister: Naprawdę trudno jest odpowiedzieć poprawnie na pytanie. Na przykład, IE 8 (nie wiem, czy to się zmieniło w kolejnych wersjach), uruchomił kilka procesów (2 na początku przeglądarki i więcej w razie potrzeby), ale rzeczywista liczba procesów nie zgadzała się z liczbą kart. Więc możesz mieć 2 karty dzielące proces, 4 udostępniające kolejne ... – Lepidosteus

Powiązane problemy