A prima vista, sembra che generare una stima accurata del tempo dovrebbe essere abbastanza facile. Dopo tutto, l'algoritmo che produce la barra di avanzamento conosce tutte le attività che deve svolgere prima del tempo ... giusto?
Per la maggior parte, è vero che l'algoritmo sorgente sa cosa deve fare prima del tempo. Tuttavia, definire il tempo necessario per eseguire ogni passaggio è un compito molto difficile, se non addirittura impossibile.
Il modo più semplice per implementare una barra di avanzamento è utilizzare un grafico rappresentazione del contatore di attività. Dove la percentuale completa viene semplicemente calcolata come Attività completate / Numero totale di attività . Mentre questo ha un senso logico al primo pensiero, è importante ricordare che (ovviamente) alcune attività richiedono più tempo.
Considera le seguenti attività eseguite da un installer:
In questo esempio, i passaggi 1, 3 e 4 si completerebbero molto rapidamente mentre il passaggio 2 richiederebbe un po 'di tempo. Quindi una barra di avanzamento che lavora su un conteggio semplice salta al 25% molto velocemente, si blocca per un po 'mentre il passaggio 2 sta funzionando, e poi salta al 100% quasi immediatamente.
Questo tipo di implementazione è in realtà abbastanza comune tra le barre di avanzamento perché, come detto sopra, è facile da implementare. Tuttavia, come puoi vedere, è soggetto a compiti sproporzionati che distorcono la percentuale di avanzamento effettiva in relazione al tempo rimanente.
Per ovviare a ciò, alcune barre di avanzamento potrebbero utilizzare implementazioni in cui i passaggi sono ponderati. Considerare i passaggi precedenti in cui viene assegnato un peso relativo a ogni passaggio:
Utilizzando questo metodo, la barra di avanzamento si muoverà in incrementi del 10% (come il peso totale è 10) con i passaggi 1, 3 e 4 spostando la barra del 10% al completamento e il passaggio 2 spostandolo 70%. Sebbene certamente non perfetti, metodi come questo sono un modo semplice per aggiungere un po 'più precisione alla percentuale della barra di avanzamento.
Considera un semplice esempio di me che ti chiede di contare fino a 50 Io uso un cronometro per cronometrarti. Diciamo che conta fino a 25 in 10 secondi. Sarebbe ragionevole presumere che conti i restanti numeri in altri 10 secondi, quindi una barra di avanzamento che tiene traccia di ciò mostrerà il 50% completo con 10 secondi rimanenti.
Una volta che il tuo conteggio raggiunge i 25, tuttavia, inizio a lanciare palline da tennis a te. Probabilmente questo ti spezzerà il ritmo man mano che la tua concentrazione si è spostata dal contare rigorosamente i numeri alle palle schivate che hai gettato sulla tua strada. Supponendo che tu possa continuare a contare, il tuo ritmo ha certamente rallentato un po '. Così ora la barra di avanzamento è ancora in movimento, ma a un ritmo molto più lento con il tempo stimato rimanente o inarrestabile o in realtà salire più in alto.
Per un esempio più pratico di questo, si consideri un download di file. Attualmente stai scaricando un file da 100 MB alla velocità di 1 MB / s. Questo è molto facile da determinare il tempo stimato di completamento. Ma il 75% del modo in cui ci sono, alcuni problemi di congestione della rete e la tua velocità di download scende a 500 KB / s.
A seconda di come calcola il tempo rimanente, l'ETA potrebbe passare istantaneamente da 25 secondi a 50 secondi (usando il presente solo stato: Dimensione restante / velocità di download ) o, molto probabilmente, il browser utilizza un algoritmo medio rotante che si adatta alle fluttuazioni della velocità di trasferimento senza visualizzare salti drammatici per l'utente.
Un esempio di L'algoritmo di rolling per quanto riguarda il download di un file potrebbe funzionare in questo modo:
Quindi, usando il nostro scenario sopra (per semplicità, useremo 1 MB = 1.000 KB):
È possibile vedere il modello che emerge qui come il calo della velocità di download viene lentamente incorporato nella media utilizzata per stimare il tempo rimanente. Con questo metodo, se il dip è durato solo 10 secondi e poi è tornato a 1 MB / s, è improbabile che l'utente rilevi la differenza (ad eccezione di uno stallo molto piccolo nel conto alla rovescia del tempo stimato).
Raggiungere i chiodini - questa è semplicemente una metodologia per inoltrare informazioni all'utente finale per l'effettiva causa sottostante ...
In definitiva, l'imprecisione della barra di progresso si riduce al fatto che si sta tentando di determinare un tempo per qualcosa che non è deterministico. Poiché i computer elaborano le attività sia su richiesta che in background, è quasi impossibile sapere quali risorse di sistema saranno disponibili in qualsiasi momento nel futuro - ed è la disponibilità delle risorse di sistema necessarie per completare qualsiasi attività.
Utilizzando un altro esempio, si supponga di eseguire un aggiornamento del programma su un server che esegue un aggiornamento del database abbastanza intenso. Durante questo processo di aggiornamento, un utente invia una richiesta impegnativa a un altro database in esecuzione su questo sistema. Ora le risorse del server, in particolare per il database, devono elaborare le richieste sia per l'aggiornamento che per la query avviata dall'utente - uno scenario che sarà sicuramente dannoso per i tempi di esecuzione. In alternativa, un utente può avviare una richiesta di trasferimento file di grandi dimensioni che imporrebbe il throughput dello storage, il che andrebbe a detrimento anche delle prestazioni. O potrebbe iniziare un'attività programmata che esegue un processo di memoria intensivo. Si ottiene l'idea.
Come, forse, un'istanza più realistica per un utente di tutti i giorni - si consideri l'esecuzione di Windows Update o di una scansione antivirus. Entrambe queste operazioni eseguono operazioni intensive in background. Di conseguenza, i progressi compiuti dipendono da ciò che l'utente sta facendo in quel momento. Se stai leggendo la tua e-mail mentre è in esecuzione, molto probabilmente la richiesta di risorse di sistema sarà bassa e la barra di avanzamento si muoverà in modo coerente. D'altra parte, se stai facendo un editing di grafica, la tua richiesta di risorse di sistema sarà molto più grande e il movimento della barra di avanzamento sarà schizofrenico.
Nel complesso, è semplicemente che non c'è la sfera di cristallo. Nemmeno il sistema in sé sa quale sarà il carico in futuro in qualsiasi momento.
L'intento della barra di progresso è, beh, indicare che il progresso viene effettivamente fatto e il rispettivo processo non è appeso. È bello quando l'indicatore di avanzamento è preciso, ma in genere è solo un fastidio minore quando non lo è. Per la maggior parte, gli sviluppatori non dedicheranno molto tempo e sforzi agli algoritmi della barra di avanzamento perché, francamente, ci sono compiti molto più importanti su cui trascorrere del tempo.
Naturalmente, hai tutto il diritto di essere infastidito quando una barra di avanzamento salta al 99% completa all'istante e quindi ti fa attendere 5 minuti per il restante 1 percento. Ma se il rispettivo programma funziona bene nel complesso, ricordati che lo sviluppatore aveva le sue priorità dritte.
Il menu Start dovrebbe essere sacro (ma è ancora un disastro in Windows 10)
Il menu Start è un punto fermo dell'esperienza Windows e deve essere semplificato, efficiente e non molestato dal maggiore mondo al di là del sistema operativo e dei programmi che funge da portale. Microsoft ha riportato il menu Start in primo piano in Windows 10, ma lo ha rovinato nel processo. È sempre più diffuso e irritare le modifiche nei sistemi operativi quando vengono rilasciate al pubblico importanti iterazioni.
Come mantenere Netflix dall'utilizzo di tutti i dati del tuo telefono
Netflix ha recentemente aggiornato la sua app mobile con una funzione tanto attesa: ora puoi specificare quanti dati (approssimativamente) usa, quindi non superi il limite dei dati del tuo cellulare. Netflix utilizza molti dati, circa 1 GB all'ora mentre guardi il contenuto della definizione standard.