2009-09-19 12 views
11

Mam intensywną pracę z procesorem i nie chcę pogarszać komfortu użytkownika. ponieważ pracownicy sieci (http://ejohn.org/blog/web-workers/) są nową funkcją i nie są obsługiwane przez wszystkie przeglądarki, pomyślałem, aby otworzyć element iframe za pomocą HTML + JS, który wykona całą brudną pracę i wykorzysta komunikację między domenami, aby przekazać wyniki. Niestety zauważyłem, że właściciel elementu iframe cierpi z powodu pracy procesora w oknie elementu pływającego.Czy element iframe działa w tym samym wątku, co właściciel?

Czy to zachowanie jest tak zaprojektowane? czy istnieje sposób na rozwiązanie tego problemu?

Odpowiedz

8

Jednym ze sposobów symulacji wielowątkowości byłoby posiadanie funkcji Javascript wykonującej trochę pracy, a następnie wywołanie setTimeout z tą samą funkcją; następnie funkcja wykona małą pracę i ponownie zadzwoni pod numer setTimeout, a ten cykl będzie kontynuowany na zawsze lub do momentu zamknięcia ramki lub sygnału, aby przestał działać. MDN has a good example of how to set this up.

Pomiędzy timeouts, Javascript nie powinien zużywać żadnego czasu procesora. Być może będziesz musiał trochę zagrać, aby sprawdzić, jak długo powinny być twoje czasy oczekiwania - 1ms to prawdopodobnie zbyt krótko, ale 1s jest zdecydowanie za długi. Innym czynnikiem będzie szybkość procesora komputera, na którym działa zadanie, więc możesz potrzebować pseudo-benchmarkingu po stronie klienta za pomocą Javascript, zanim będziesz mógł określić, ile czasu ma za każdym razem opóźnić.

+6

W3Schools! = W3C –

+0

16ms jest odświeżania ekranu, polecam. – Fresheyeball

4

JavaScript jest jednotorowy. Oddzielne zakładki lub okna mogą działać w oddzielnych wątkach lub procesach w zależności od przeglądarki, jednak nie można komunikować się między tymi oknami, więc nie ma możliwości jawnego wykorzystania więcej niż jednego wątku lub procesu w JavaScript.

Jeśli chodzi o responsywność interfejsu użytkownika, Rushakoff ma dobrą odpowiedź. Podczas działania JavaScript nie działa renderowanie HTML, a interfejs użytkownika nie odpowiada. Wykorzystując limity czasu, kontrola może być okresowo zwalniana z powrotem do wątku renderowania/UI, co daje bardziej responsywną reakcję, nawet jeśli nadal działa tylko z jednym wątkiem.

+5

> jednak nie mogą komunikować się między tymi oknami 'postMessage' –

Powiązane problemy