Qual è un modo semplice per consentire a un utente di selezionare una cartella da un albero?

0

Ho un'app Python-Flask in cui gli utenti possono inserire i file in una cartella. A partire da ora la struttura della directory è qualcosa del tipo:

/app
    /storage
    /templates
    .
    .
    .
    server.py

L'utente può creare directory e sottodirectory entro storage per organizzare i file.

Finora sto facendo chiamate AJAX al server per ottenere dettagli sulle cartelle ecc. e compilare un elenco a discesa da cui gli utenti possono attraversare l'albero. Funziona, ma non sembra giusto. Quale altro approccio potrei prendere?

Il problema principale che spero di affrontare (e cosa sto facendo in questo momento):

C'è un ritardo tra quando l'utente seleziona una cartella quando viene mostrato il contenuto. Ovviamente non mi aspetto che sia veloce come aprire le directory su un file system locale, ma sarebbe bello migliorare UX lì.

Soluzione corrente: sto caricando informazioni sui contenuti di tutte le sottodirectory non appena viene selezionata una directory. Posso quindi mostrare il contenuto della sottodirectory non appena viene selezionato.

Supponiamo che la struttura della directory sia:

/foo
    /bar
        /sub
        hello.py
        world.py
    /car
        hello.c
        world.c

Sto recuperando informazioni su file / sottodirectory in bar e car non appena viene aperto foo . Ciò aiuta a mostrare i contenuti non appena viene selezionato bar o car .

Vantaggio: UX è buono

Svantaggio: trasferisce troppi dati non necessari dal server. E mentre sto effettivamente accedendo al disco per aprire ogni sottodirectory, questo potrebbe rallentare se sono presenti molte sottodirectory!

Inoltre, non sono sicuro di quanto sarà scalabile, se sarà mai necessario.

    
posta rohithpr 21.07.2015 - 05:53
fonte

1 risposta

2

Chiaramente, devi fare richieste al server a un certo punto per ottenere le informazioni dell'utente. Per l'UX ottimale, supponendo che non sia pratico caricare tutto in anticipo, sarebbe sciocco non usare una qualche tipo di richiesta AJAX. Quindi la vera domanda è: quale dovrebbe essere la granularità delle tue richieste?

La risposta corretta ha più a che fare con UX della qualità del codice e dipenderà molto da come il tuo pubblico tende a usare la tua app. Ma, dal momento che hai chiesto in primo luogo, quasi certamente vuoi ottenere di più in ogni richiesta rispetto al contenuto del file / della cartella su cui l'utente ha fatto clic. Alcune regole di prefetch che potresti voler considerare quando l'utente apre una cartella:

  • Tieni traccia quando l'utente ha effettuato l'ultimo accesso a ciascun file, quindi puoi precaricare il contenuto degli ultimi accessi.
  • Tieni traccia del numero di volte in cui l'utente ha aperto ciascun file, quindi puoi precaricare il contenuto di quelli più utilizzati.
  • Tieni traccia dei tempi di creazione di ogni file / cartella, in modo da poter precaricare le cose create più di recente.
  • Preincronizza incondizionatamente qualsiasi file super-minuscolo nella cartella corrente.
  • Se uno dei file è "condiviso" con altri utenti, questi potrebbero essere considerati una priorità elevata per il precaricamento.
  • In realtà, probabilmente otterrai una media ponderata di molte di queste regole.

Ovviamente, la prima cosa da fare è parlare con i tuoi utenti / tester per vedere se c'è un frutto in sospensione che tutti, ma tu conosci. È probabile che una o due di queste regole le colpirà immediatamente come ovvia vittoria rapida.

Infine, una volta che hai un prefetch, imposta una sorta di logging che ti dice ogni volta che un utente accede a qualcosa che non hai precaricato. Questo è il modo più affidabile per scoprire dove è possibile migliorare il tuo attuale set di regole, senza che gli utenti debbano risolverlo.

    
risposta data 21.07.2015 - 20:53
fonte

Leggi altre domande sui tag