2010-07-13 3 views
9

Recentemente mi sono imbattuto in un po 'di dolore. Ho utilizzato la finestra di dialogo JQuery per visualizzare alcune schermate di configurazione in un'app Web. Niente di troppo speciale. Tuttavia ho un paio di casi limite in cui questo modulo di configurazione mostrerà un menu a discesa di alcune ... 11000 opzioni. [DODGES ROTTEN TOMATOES]Finestra di dialogo dell'interfaccia utente JQuery lenta

Inutile dire che è lento. Possono essere necessari fino a 9 secondi per mostrare la finestra di dialogo JQuery (e anche l'init è lento).

La prima domanda è: c'è un modo per velocizzare le finestre di dialogo? Da quello che sembra, copia tutto il contenuto ogni volta che si apre. Se ci fosse un modo per evitarlo, sarebbe di aiuto un po '.

Seconda domanda: ci sono altre finestre di dialogo jQuery che offrono prestazioni migliori quando viene richiesto di visualizzare grandi quantità di dati?

E come sempre, altre soluzioni sono benvenute. Alcuni ajax con completamento automatico non sarebbero male, ma probabilmente sarebbero ancora lenti a meno che non richiedessero almeno un paio di caratteri iniziali.

+3

Man, è un elenco a tendina. Anche se sei in grado di risolvere il tuo problema tecnico, ti suggerirei di utilizzare un controllo diverso, magari un elenco filtrato o un qualche tipo di browser dati. A seconda del contenuto dei dati. – Tx3

risposta

1

Gestito per migliorare un po 'le prestazioni. Mi sono allontanato dall'interfaccia utente di JQuery e ho creato una versione molto più leggera. Invece di copiare il contenuto del mio obiettivo nella mia finestra di dialogo, costruisco il mio dialogo attorno al contenuto.

prestazioni saggio, la finestra è passato da circa 10 secondi a 2.

1

Come scegliere una selezione con tutte le prime lettere possibili ottenute tramite AJAX solo le opzioni che iniziano con quella lettera nella seconda selezione?

1

2 secondi suona molto meglio, ma probabilmente trovare è molto dipendente dalla utenti del browser e del sistema di configurazione - potrebbe essere molto peggio su un sistema più lento in IE ...

Vorrei prendere seriamente in considerazione l'idea di utilizzare qualcos'altro invece del dropdown gigantesco (che sicuramente non può essere molto user friendly) - sembra un buon candidato per un casella di ricerca con completamento automatico o, eventualmente, elenchi a cascata a più livelli.

Si potrebbe anche creare la finestra al caricamento della pagina, e si aprono solo quando necessario (set AutoOpen: false nelle opzioni)

1

Se si deve fare un menu a discesa in una finestra del genere, poi ho suggerisco di caricare le informazioni in uno stile div ajax nascosto dopo il caricamento della pagina e quindi di visualizzare quel div nascosto in qualsiasi lightbox/dialog che stai usando quando è necessario. In questo modo le cose verranno caricate mentre l'utente sta facendo altre cose e, si spera, saranno pronte per il momento.

+0

Questa sarebbe una buona soluzione per il carico iniziale. Anche se il carico non è stato influenzato troppo orribile. Il problema arrivò quando era il momento per IE di rendere il menu a tendina. Inizialmente il div è invisibile e tutto va bene. Il problema più grande era che la finestra di dialogo dell'interfaccia utente JQuery doveva copiare tutte le informazioni nel DOM per spostarlo nei suoi contenitori personalizzati. Lo ha fatto anche ogni volta che è stata caricata la finestra di dialogo. La nuova finestra di dialogo ora avvolge i dati esistenti anziché copiarli. Questo sembrava accelerare un po 'le cose. Ho lottato con il washout semi trasparente ma ora funziona abbastanza bene. –

+0

Sono contento che stia funzionando un po 'meglio. –

2

Ho faccia questo problema e trovato la soluzione qui: http://forum.jquery.com/topic/select-in-dialog-causes-slowness-in-ie8

solo dovuto impostare la finestra di dialogo draggable e resizable opzioni per false.

+0

Mi sono appena imbattuto nella tua risposta mentre combattevo con lo stesso identico problema. Ha funzionato come un fascino! –

+0

Wow, che strana coincidenza. Sto avendo lo stesso problema ancora una volta più di un anno dopo su un box con IE 10 e ho scoperto che ridimensionabili e trascinabili sembrano non avere alcun impatto percettibile sulla lentezza. –

1

Impostazione trascinabile e ridimensionabile a falso lavorato.

+0

Ho un problema simile (ma senza il gigantesco menu a discesa) e impostare draggable e ridimensionabile su false non ha funzionato per me. –

0

Mi sono appena imbattuto in questo problema utilizzando una finestra di dialogo con schede con centinaia di caselle di controllo. Ho trovato this link molto utile. Ci sono voluti 17 secondi per aprire la finestra di dialogo in precedenza, ma ora è sceso a circa 1,3 secondi. (sto usando un trascinabile finestra ridimensionabile non)

Il trucco è quello di staccare il codice html prima di aprire la finestra di dialogo, e quindi utilizzare la funzione di aprire per la finestra di dialogo per ricollegare il contenuto.

$('#triggerDialogFast').click(function() { 
    var $dialogContainer = $('#dialogContentFast'); 
    var $detachedChildren = $dialogContainer.children().detach(); 
    $dialogContainer.dialog({ 
     width: 425, 
     height: 400, 
     draggable: false, 
     resizable: false, 
     open: function() { 
      $detachedChildren.appendTo($dialogContainer); 
     }, 
    }); 
}); 

non sono sicuro ma dovrebbe probabilmente funzionerà semplicemente collegando il codice HTML a cielo aperto funzione di se ciò è possibile nel vostro scenario.