Witam. Na początku zaznaczam, że jestem laikiem w tematyce webmasteringu. Potrzebuję stworzyć dość dużą tabelę o wymiarach 300 wierszy i około 20 kolumn prezentującą wyniki pomiarów pochodzących z serwera. W każdym wierszu prezentowane jest 5 wartości("pod-wierszy"). Dane w tabeli ulegają zmianie w czasie rzeczywistym, około 5-10 zmian na sekundę na całą tabelę. Obecnie powyższe założenie jest zrealizowane w oparciu o Angulara, ale niestety działa to wszystko bardzo wolno. Wpadłem na pomysł, żeby html tabeli generować w webworkerze, nadawać unikalne id każdej z komórek i podmieniać ich wartości w oparciu o jQuery. Nie mogę użyć pagingu i wirtualnych scrolli itp. Czy jest to dobre wyjście? Czy istnieją inne, lepsze?
Przede wszystkim jest to niemożliwe. WebWorker nie ma dostępu do DOM, zarówno tego w dokumencie jak i tego "odpiętego" od dokumentu.
Nie próbowałem, ale ludzie mówią, że React i jego wirtualny DOM minimalizuje ilość zmian w prawdziwym DOM i dzięki temu jest to szybkie. Może spróbuj Reacta zaprzęgnąć do tego widoku?
Może niedokładnie to opisałem. W webworkerze generuję tylko html(jest dość duży - generacja potrafi zająć parę sekund), który jest przesyłany do głównego wątku i tam wstawiany do drzewa DOM. Zauważyłem duże przyspieszenie, jedynie mam wątpliwości czy jest to poprawne rozwiązanie.
Nie. Szybsze będzie aktualizowanie poszczególnych komórek.
Tak, aktualizowanie po zmianie danych dotyczy tylko poszczególnych komórek, ale najbardziej czasochłonnym procesem jest tylko pierwsze generowanie tabeli, które to chciałem wykonać jest webworkerze.
Nic lepszego, co nie blokuje UI. Możesz próbować generować obiekty DOM odpięte od dokumentu, a potem całość przypiąć, realizując np. każdy wiersz w osobnej klatce (żeby UI nie blokować) - to będzie wolniejsze niż generowanie HTML w stringu, ale podobno wpięcie czegoś takiego do dokumentu, zamiast .innerHTML = html;
niweluje tę różnicę. Podejrzewam jednak, że niewiele tu zyskasz, bo po prostu web jest wolny.