nie mam twardych faktów, ale skoro pytasz o opinie ... :)
Jest problem wymowny w Chrome: Zbyt wielu pracowników sieci może spowodować katastrofę cichy (czapki ~ 60-100 , zgodnie z this bug report). Ogólny problem polega na tym, że pracownicy sieci mają duże zasoby, przynajmniej w wersji 8.
Zakładając masz zamiar skończyć wykonywania wielu połączeń HTTP, jeśli robisz synchronicznych połączeń HTTP w sieci Web: Pracownik
- W pewnym sensie jesteś handel asynchronicznych wywołań HTTP dla sieci asynchronicznej Pracownicy, którzy dodadzą do miksu tylko innego pośrednika i nadal będziecie zarządzać rzeczami asynchronicznie.
- Jeśli wybierzesz prostszą i bardziej zasobooszczędną trasę i korzystasz tylko z jednego Web Worker, spędzisz dużo czasu, czekając na odpowiedź.
- Jeśli z drugiej strony korzystasz z wielu pracowników sieci Web, będziesz prawdopodobnie musiał śledzić, który z nich jest bezpłatny, który jest zajęty itp., W którym to przypadku będziesz tworzyć program planujący w domu, zamiast używając tego, co zapiekło się w przeglądarce.
- Wreszcie, pracownicy WWW są drogie (podobno) i może się zdarzyć, że utworzymy wielu pracowników sieci Web, aby mogli usiąść i czekać na zakończenie połączenia HTTP.
Nie uważam się za eksperta w tej sprawie, więc proszę, weź to za to, co jest warte.
Aktualizacja: Dodawanie plusów i minusów dla różnych scenariuszy.
Niektóre plusy/minusy, które przychodzą na myśl, gdy wybierając między podejmowania synchronicznych i asynchronicznych wywołań HTTP przy użyciu pracownika WWW:
- Generalnie synchronicznych żądań będzie łatwiej pisać i spowoduje w kodzie, który jest łatwy podążać. Minusem synchronicznych żądań jest to, że mogą zachęcać do pisania długich funkcji, które powinny zostać wyodrębnione w oddzielne, mniejsze funkcje.
- Jeśli wykonujesz jedno połączenie, nie ma różnicy czasu potrzebnego do zakończenia między tymi dwiema metodami, a synchronizacja jest lepsza, ponieważ jest nieco prostsza. Mówię, że jest to trochę prostsze, ponieważ jedno połączenie asynch z jednym detektorem oddzwaniania jest naprawdę proste.
- Jeśli wykonujesz wiele połączeń, które muszą się zdarzyć w określonej kolejności, np. Ładowanie danych profilu użytkownika, a następnie pobieranie lokalnej pogody na podstawie ich adresu, połączenia synchroniczne będą lepsze, ponieważ łatwiej będzie pisać i dużo łatwiej przeczytać.Najważniejszą rzeczą w czytaniu jest to, że sekwencyjne zależności w połączeniach będą wyraźnie zarysowane przez wybór synchronizacji połączeń i ich kolejności w funkcji. Im więcej połączeń, tym więcej to będzie miało znaczenie. Jeśli jest wiele połączeń, różnica w złożoności może być drastyczna.
- Jeśli musisz wykonywać wiele połączeń, które nie muszą się zdarzyć w określonej kolejności, wtedy żądania asynchroniczne są lepsze, ponieważ ogólny proces prawdopodobnie będzie o rząd wielkości szybszy niż w przypadku żądań synchronicznych. Im więcej połączeń wykonasz lub im wolniejsze połączenie, tym większa będzie różnica w łącznym czasie; różnica ta wzrośnie bardzo szybko (wykładniczo?). Z punktu widzenia kogoś czytającego kod, myślę, że używanie synchronicznych żądań w tej sytuacji byłoby trochę mylące, ponieważ sugerowałoby to, że istnieje sekwencyjny charakter wywołań, nawet jeśli nie ma takiego połączenia. Z perspektywy pisania serii żądań asynchronicznych, które nie są od siebie zależne, nie powinno być tak źle, ponieważ wystarczy ustawić licznik, wykonać wszystkie połączenia, zwiększyć licznik w każdym z wywołań zwrotnych i gotowe. kiedy licznik jest równy liczbie wykonanych połączeń.
Jest to możliwe ... i zależy od Twoich wymagań, chociaż AJAX nie byłby AJAX bez asynchronicznego !!! – geekman
Nie mogę polecić SJAX (synchronicznego javascripta i XML), ale chciałbym zobaczyć także kilka trudnych faktów, a moje obawy nie odzwierciedlają zachowania w środowisku wielowątkowym. –
Dziękuję wam. Znam znaczenie A w AJAX :), ale widziałem wielu ludzi robiących coś takiego, kiedy używają pracowników sieci. – Gecko