Qual è l'esperienza migliore per l'utente: attendere una volta all'avvio per un lungo periodo di tempo o attendere spesso per un breve periodo? [chiuso]

8

Attualmente sto progettando un'applicazione che richiede molti calcoli. Ora ho generalmente due possibilità che ho provato entrambe:

1) Durante l'avvio dell'applicazione ho calcolato solo i valori più importanti e questi valori che consumano molto tempo. Quindi l'utente deve attendere circa 15 secondi durante l'avvio. Ma d'altra parte molte interazioni dell'utente richiedono un ricalcolo in modo che l'utente debba spesso attendere 2-3 secondi dopo aver cliccato da qualche parte fino a quando l'applicazione non ha calcolato e caricato tutti i valori

2) Carico tutto durante l'avvio. Questo richiede da 90 a 120 secondi ... Questo è un tempo piuttosto lungo, ma il grande vantaggio è che tutte le interazioni dell'utente vengono eseguite immediatamente.

Quindi cosa considereresti generalmente l'approccio migliore? Caricamento di tutte le operazioni che richiedono tempo durante l'avvio o quando necessario?

    
posta RoflcoptrException 27.02.2011 - 18:10
fonte

8 risposte

20

Avvia il più velocemente possibile, usa una discussione per eseguire i calcoli più importanti. Quindi l'utente riceve immediatamente un feedback e può iniziare a lavorare dopo 15 secondi. Sullo sfondo, lascia che un altro thread calcoli tutto, quindi dopo due minuti anche quei tempi di risposta di 2-3 secondi spariscono.

    
risposta data 27.02.2011 - 18:41
fonte
6

Usa un thread separato dalla GUI per fare qualsiasi calcolo tu abbia bisogno. Chiedi al tuo modulo di iscriversi a un evento e quando hai finito di calcolare quell'evento in modo che il tuo modulo agisca di conseguenza.

Non bloccare la GUI, è molto, molto fastidioso per gli utenti finali e può essere preso come un segno di un prodotto scadente.

Nel tuo caso, mostra qualcosa all'utente il più velocemente possibile e fai tutti i calcoli in background.

    
risposta data 27.02.2011 - 18:20
fonte
4

Sicuramente non bloccare mai il thread dell'interfaccia utente per uno, avere un feedback se si vuole mantenere l'utente in attesa in situazioni inevitabili.

Direi mai di non calcolare o recuperare il "tutto" di qualcosa in un'applicazione a meno che tu non sia assolutamente sicuro che ogni volta che usano l'applicazione, sei sicuro che utilizzeranno completamente tutti questi dati.

Dipende davvero anche da quanto sono volatili i dati. Se cambia poco, perché è necessario ricalcolare ogni volta che l'applicazione si avvia? Sono sicuro che non c'è nulla di significativo nell'avvio di un'applicazione, quindi è possibile che il calcolo venga memorizzato nella cache e aggiornato solo quando cambiano i valori sottostanti dei dati?

Attendere 1-2 minuti per un carico dell'applicazione è fuori questione per le situazioni MOST. Come ho detto prima, tutti i dati devono essere disponibili per tutte le funzioni dell'applicazione?

Tienilo reattivo il più possibile tenendo i calcoli dei dati come e quando ne hai bisogno. Metti i calcoli sui thread in background se sono davvero dati globalmente necessari. Prendi in considerazione alcune parti dei dati caricate o calcolate pigre.

Non penso che ciò che hai affermato possa aiutarci a darti una risposta esatta perché non conosciamo la natura dei dati sottostanti o casi d'uso dell'applicazione.

    
risposta data 27.02.2011 - 18:38
fonte
2

Non spieghi troppo qual è la tua applicazione e perché c'è bisogno di calcolare qualcosa, quindi è difficile rispondere con precisione. In tutti i casi, dichiari di avere la possibilità di scegliere tra l'attesa di per 15 secondi o per 90 secondi . In entrambi i casi, c'è un problema . Ogni applicazione che ho usato è stata caricata in meno di dieci secondi, tranne in alcune circostanze molto specifiche (ad esempio, Visual Studio può richiedere fino a 30 - 40 secondi quando si carica per la prima volta dopo un'installazione pulita).

In generale, l'utente non deve attendere né all'avvio, né durante il flusso di lavoro. Se l'applicazione impiega 15 secondi per essere avviata, la maggior parte degli utenti tenterà di non chiuderla mai, o di avviarla quando lascerà prendere una tazza di caffè. In tutti i casi, probabilmente penseranno: "Dovrei investire di più nell'acquisto di un software corretto invece di perdere il mio prezioso tempo".

I casi in cui hai veramente bisogno di molti calcoli sono estremamente rari e possono essere facilmente rimossi. Ad esempio, Adobe Lightroom, all'avvio, deve mostrare l'ultimo catalogo con le miniature delle foto. Quando lo avvio con un catalogo contenente diverse centinaia di foto, 20 MB su disco per foto , richiede un sacco di hard disk e CPU per caricare quelle foto, leggerle, apportare trasformazioni (inclusa la distorsione prospettica) ecc.) e generare una miniatura. In realtà, Lightroom impiega meno di cinque secondi per caricarsi su un PC non così nuovo, perché i dati vengono memorizzati nella cache in modo intelligente e perché non mostrano tutte quelle centinaia di anteprime immediatamente dopo l'avvio, ma piuttosto uno alla volta una volta la finestra principale è già visualizzato.

Quindi nel tuo caso dovresti probabilmente pensare meno a quando l'utente deve aspettare, e altro su come per evitare che i tuoi utenti sprechino il loro tempo.

Modifica: ovviamente ho dimenticato un gruppo di applicazioni che possono comportarsi in modo diverso: videogiochi . In un videogioco, puoi lasciare che l'utente aspetti un minuto per caricare la grafica. Ciò è possibile perché il rendering 2D / 3D può richiedere un utilizzo intensivo della CPU e non puoi permetterti di sprecare risorse della macchina per caricare e calcolare cose durante il gioco: le prestazioni visive devono essere le migliori possibili e l'esperienza di gioco deve essere estremamente fluida.

Ma anche in questo caso, penso che quelle applicazioni provino a spendere meno di un minuto per caricare elementi. Oppure carica piccoli pezzi , consentendo all'utente di avviare il gioco molto velocemente, giocare senza problemi, ma attendere cinque secondi liberi quando passi da un livello all'altro (questo è quello che ho visto nella serie Half Life per esempio).

    
risposta data 27.02.2011 - 18:45
fonte
1

Questi valori devi calcolare come li usi? Vuoi semplicemente visualizzarli?

Hai detto che puoi calcolarli tutti in una volta, non puoi salvarli da qualche parte in modo che non debbano essere ricalcolati?

Se questa non è un'opzione, opterei per l'utilizzo del multithreading e mostrerò un'animazione "calcolatrice" in cui si desidera visualizzare i valori. Una volta che i valori sono stati calcolati possono essere mostrati.

In questo modo la GUI non si blocca, il che è estremamente fastidioso. L'utente può ancora scegliere di interrompere e andare su un'altra schermata, ecc ...

    
risposta data 27.02.2011 - 18:17
fonte
1

Non puoi calcolarli quando ne hai bisogno, quindi memorizzarli in modo che non debbano essere calcolati di nuovo?

Quindi quando hai bisogno di un numero controlla se è memorizzato, se non lo calcoli e lo memorizza.

    
risposta data 27.02.2011 - 18:27
fonte
1

La percezione è praticamente la realtà. L'attesa in linea sembra richiedere molto più tempo rispetto a quando siamo effettivamente servizi. È nella natura umana sviluppare un set mentale che la tua applicazione sia lenta (e sarà sempre lenta in tutto ciò che fa) se dovremo aspettare troppo a lungo per caricarla all'inizio.

Rompi i calcoli se puoi. Idealmente, molti di loro verrebbero eseguiti in background o eseguiti in base alle necessità.

    
risposta data 27.02.2011 - 19:27
fonte
1

Se quelle sono le mie uniche due scelte, prenderò il tempo di avvio lento. Non mi dispiace aspettare un po 'per iniziare qualcosa, ma lo odio quando il mio sistema è in ritardo mentre sto cercando di fare un po' di lavoro.

Naturalmente, nessun tipo di attesa è una buona esperienza utente, e sono d'accordo con gli altri intervistati che dovresti investigare sul multi-threading. Ovviamente, se la tua app è quasi terminata, probabilmente non sarai in grado di "aggiungere" facilmente il multi-threading, quindi forse guardalo per la prossima versione.

    
risposta data 27.02.2011 - 23:10
fonte

Leggi altre domande sui tag