Aktualizace dat na frontendu rubrika: Programování: JavaScript

2 unabombe
položil/-a 1.11. 16:43

Zdravím,
potřebuji napsat frontend k appce, ale jsem primárně backenďák, takže mi chybí teorie o tom, jak to správně uchopit.
Zobrazujeme na webu data z databáze, konkrétně se jedná o 200 html tabulek, každá má 10 řádků a 20 sloupců - spousta dat.
Data v databázi se mění, každé 3 sekundy je větší či menší update - někdy změna obsahu jedné buňky, někdy všechny buňky v řádku, zároveň uživatel může nad daty provádět filtraci, zobrazovat/skrývat sloupce, řádky nebo celé tabulky.

Momentálně se html generuje na backendu, včetně updatů - pokud se aktualizují data v řádku, server odešle , pokud je potřeba přepsat tabulku, posílá se celý . Pokud uživatel provede akci (zobrazení, skrytí, filtrování, etc.) odešle se request na server a vrátí se změněná data (tr, table, nebo celý div se všemi daty). Všechno se posílá jako json object stylem {'table_123_tr_321':'....'} a následně javascriptem nahrazuje v html.

Informace které se zobrazují jsou informace z jednoho časového úseku, uživatel může zvolit jiný a tím dojde k přepsání všech dat na stránce. Zároveň některé filtrace/řazení vyžadují veškeré řádky tabulek mít v jedné tabulce, takže se těch 200 tabulek odstraní a vytvoří se jedna s 2000 řádky, po deaktivaci filtrace zase opačně.

Současně řešení popsané výše (posílání html ze serveru, javascript/jquery na frontendu) naráží na výkonostní problémy. I na desktopu se s tím pracuje poměrně špatně (pomalé reakce, několiavteřinová vytuhnutí atp) a mělo by to být ideálně použitelné na telefonech, takže hledám jinou cestu.

Zobrazení všech dat najednou je nezbytné - je to podstata aplikace a nelze se tomu vyhnout.
Nebráním se ani větší změně technologie, ale samozřejmě zázračná rada, jak ty problémy vyřešit jednoduše by se hodila.
Jak jsem psal, nejsem frontenďák, takže i obecné rady a tipy jak to správně uchopit jsou vítané.

Díky

Komentáře

  • harrison314 : V prvom rade by som zistil, kde je vlastne problem a zmeral, co je pomale, ci server alebo klient a potom riesil. No urcite by som presiel z posielnia HTML na posielanie JSON-u a vykreslovanie v prehliadaci, plus pridal nejaku cache na serveri. Podla mna ajax by mal stacit, ked nie tak prejst na WebSokety (najlepsie nieco inteligetnejsie - SignalR), porpiade ak nemas vela pouzivatelov tak Blazor Server (na realtime veci je genialna technologia). 1.11. 22:13
  • unabombe : @harrison314 díky za reakci, na straně serveru je všechno v pořádku, problém je frontend, konkrétně přestavění DOMu a paint. Poslat JSON a z toho teprve vytvořit/aktualizovat tabulky se zdá jako možnost, ale nejsem si jistý, že si nějak moc pomůžu - místo překreslení tabulek nejdřív postavit tabulku z JSONu a pak ji stejně překreslit. Uniká mi něco podstatného, co z toho dělá lepší možnost? 1.11. 23:47
  • harrison314 : Ano je mozne pouzit virtual scorlling (niekde sa to vola virtual components) a vykreslovat len to co co aktualne pouzivatel vidi... lebo pochybujem, ze ma zobrazenych 2000 zzanamov naraz. 2.11. 8:37
odkaz
5 lt
odpověděl/-a 1.11. 17:27
 
upravil/-a 1.11. 17:28

K otázke sa velmi vyjadrovať nebudem, len chcem dať tip na js knižnicu ktorá by sa tu mohla hodiť:

  • https://future-architect.github.io/cheetah-grid/

  • zvláda milióny riadkov rýchlosťou blesku
  • celá definícia sa vykonáva v javascripte, teda nie je potrebné generovanie html kódu tabulky - len pošleš json s dátami.
  • je to reaktívne - keď prídu nové dáta zo serveru, stačí zavolať grid.records = records a celá tabulka by sa mala automaticky aktualizovať.
  • použitelné na mobilných zariadeniach. Na staršom iPade velmi rýchle, na Android telefóne už to bolo trochu pomalšie (ale 1 mil. riadkov), s 2000 to asi bude ok.

Komentáře

  • unabombe : Děkuju, podívám se na to. 1.11. 17:40

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.