wtorek, marca 28, 2023

Chyba najtrudniejszy komponent UI - pasek postępu ;-)

Wpadlibyście na to, że Progress Bar to jeden z trudniejszych elementów UI? ;-)
Jeśli nie najtrudniejszy.

Niby prosty, wystarczy powiedzieć jak daleko jesteśmy w procesie... I to nie jest trudne jak przerabiamy coś, idziemy przez powiedzmy 10000 cosiów i updatujemy Progress Bar za każdym krokiem, albo w jakichś batchach.
W tym przypadku można się nawet posłużyć ETA i podać czas do zakończenia... i jak długo tak przeciętnie rozmiar problemów jest stały to wszystko będzie ładnie działać.

Przykładem tutaj może być np. pobieranie pliku z sieci gdy znamy jego rozmiar.
Wiemy ile już pobraliśmy, możemy wiedzieć ile to już zajęło i nawet możemy wyliczyć ile czasu zostało i podać czas zakończenia ;-)

Używamy wzoru:

ETA = time_from_start/downloaded_bytes*total_bytes+start_time

Jak chcemy tylko ile czasu zostało to nie dodajemy start_time.

Pasek postępu jest prosty gdy mamy znaną liczbę problemów i problemy są tej samej wielkości (tak mniej więcej) 

Problem w tym, że to są nudne przypadki ;-)

Ciekawiej jest jak nie znamy rozmiaru/liczby problemów, albo nie są one tej samej wielkości.

Pierwsze to np. gdy pobieramy plik z sieci, a serwer nie podał nam Content-Length i każe używać Chunked. Pobieramy i nic nie wiemy, czy te 100 MB to już prawie cały plik czy dopiero zaczęliśmy?

Drugi to użycie paska postępu do schowania różnych rzeczy pod jednym paskiem. Mamy np. 10 kroków i każdy trwa inaczej, a do tego są zależne od jakichś rzeczy, które są poza naszą kontrolą.

Jeśli np. widzimy pasek postępu dla aktualizacji OSa, bo pod jenym paskiem jest pobieranie danych z sieci (zależne od prędkości Twojego internetu), walidacja pliku (prędkość Twojego CPU i dysku), instalacja (CPU i dysk) i ewentualna walidacja apek (w Androidzie coś takiego jest i zależy od CPU, prędkości storage'u i ilości apek). 
Tutaj dobrze działający pasek postępu to super wyczyn, który się nie zdarza ;-)

A niby takie to proste i ktoś Ci zgłosi błąd "make progress bar more reliable" ;-)




Podobne postybeta
ETA - liczymy szacowany czas zakończenia [przybycia ;-)]
OOo2GD (OpenOffice.org2GoogleDocs) 1.2.2
Idioci
"Zapomniałem napisać, że w piątek (albo sobote, choć chyba był to czwartek)"
Język a postrzeganie rzeczywistości

Brak komentarzy:

Prześlij komentarz