Zastanawiam się, czy używać Web Workers, aby zapewnić funkcjonalność tła, podczas gdy użytkownik przegląda moją witrynę (do czego służą pracownicy WWW, prawda?). Nie chcę jednak ryzykować pogorszenia komfortu użytkownika, powodując opóźnione przewijanie, brak kontroli itp. Pracownicy sieci są mapowani na wątki systemu operacyjnego, stąd oczekiwałbym pewnej kontroli priorytetu tych wątków, jednak w miarę możliwości jak wiem, nie ma czegoś takiego w obecnym API. Czy wiesz, jak to osiągnąć? Nawet z hackowaniem?Czy istnieje sposób ustawienia Web Worker na niski priorytet?
Odpowiedz
Cóż, nie ma żadnego połączenia API, aby kontrolować takie szczegóły na niskim poziomie. Jednak uważam, że najpierw należy zaimplementować to, co chcesz zrobić, a następnie przetestować, czy skuteczność działania jest zbyt duża w odniesieniu do wygody użytkownika. Zakładam, że skoro nie dodali precyzyjnej kontroli nad sposobem wykonywania wątków, prawdopodobnie są dobrze zarządzani przez podstawową implementację.
Nawet z hakiem? [...] użytkownik prześle fotografię i pracownika stosuje Photoshop jak filtr do niego, co jest bardzo obciąża CPU, wtedy pracownik alarmuje główny wątek
Oto hack.
Zwolnij swój kod. Coś w tym jest to, czego obecnie używam do symulacji cząstek:
var TIME_STEP = 10,
paused = false,
state; // set by commands.start()
function main_loop() {
if (paused) {
return;
}
// update state incrementally. Break your process into chunks
// for example pixels or rows of pixels
state = ____________;
// send state or progress to main thread
if (finished) {
self.postMessage(state);
} else {
self.postMessage(progress);
}
setTimeout(main_loop, TIME_STEP);
}
var commands = {
//...functions that can be called from main thread (pause/start/cancel/etc)...
};
function message_handler (event) {
var data = event.data;
var command = commands[data.command];
command.apply(this, data.args);
}
self.addEventListener('message', message_handler, false);
TIME_STEP
jest czas pomiędzy obliczeń i będą musiały być różne w zależności od tego, co robisz i jak długo można sobie pozwolić na zwiększenie nadszedł czas. Jedną dobrą rzeczą w robieniu tego w ten sposób jest to, że możesz akceptować wstrzymywanie i anulować żądania między iteracjami.
- 1. Wyciek pamięci Web Worker?
- 2. Czy istnieje sposób ustawienia priorytetu ładowania obrazów w witrynie?
- 3. Parsowanie XML w Web Worker
- 4. Web Worker 20x gorszy występ
- 5. Ograniczanie wykorzystania procesora Web Worker?
- 6. Czy istnieje sposób ustawienia priorytetu wątku tła używanego przez SwingWorker?
- 7. Jak przekazywać funkcje do JavaScript Web Worker
- 8. Przesyłanie plików w przeglądarce Web Worker
- 9. Czy istnieje sposób na uniknięcie wyszukiwania liniowego?
- 10. HTML Web Worker i Ajax jquery call
- 11. Używanie "Google Maps API" w Web Worker
- 12. Czy istnieje sposób na sfałszowanie synchronicznego żądania XHR?
- 13. Czy istnieje sposób na zmusić Core Animation do uruchomienia wątku?
- 14. Czy istnieje sposób ustawienia oddzielnego krótkiego tytułu dla UITabBar?
- 15. Czy istnieje sposób ustawienia domyślnej aplikacji Heroku Toolbet?
- 16. Czy istnieje sposób domyślnego ustawienia flagi dla polecenia git?
- 17. Czy istnieje sposób ustawienia domyślnego parametru równego innej wartości parametru?
- 18. Używanie WebGL z poziomu Web Worker: czy to możliwe? W jaki sposób?
- 19. Czy istnieje sposób ustawienia REPL, aby zawsze pprint?
- 20. Czy istnieje sposób ustawienia domyślnego woluminu HTML5-wideo?
- 21. Czy istnieje sposób ustawienia obrazu tła jako obrazu kodowanego base64?
- 22. Czy istnieje sposób ustawienia pionowego paska przewijania dla elementu div?
- 23. Poczta PHP() - Jak ustawić priorytet?
- 24. Czy istnieje sposób ustawienia Title na Uibutton, który aktualizuje wszystkie UIControlStates na raz?
- 25. Czy istnieje sposób, aby zaplanowane zadanie win2k8 miało normalne pierwszeństwo we/wy?
- 26. Czy istnieje prosty sposób na zapewnienie aplikacji internetowej lub usługi sieci Web opartej na Matlab?
- 27. Włączanie "nowej funkcji" w module Web Worker z CSP
- 28. Czy istnieje sposób ustawienia prostego uwierzytelniania http dla aplikacji na heroku?
- 29. Czy istnieje inny sposób na odzyskanie domyślnego wzorca dla danego ustawienia narodowego?
- 30. Background Worker ReportProgress method
Na jakiej platformie i języku? – rene
Do jakiego zadania zamierzasz korzystać z pracowników sieci? Okresowa aktywność? Jednorazowa realizacja zadania? – Tudor
@Tudor Powiedziałbym, że jednorazowa egzekucja (np. Użytkownik przesyła zdjęcie, a pracownik stosuje do niego filtr podobny do Photoshopa, który jest dość intensywny dla procesora, następnie pracownik powiadamia główny wątek). – tunnuz