2012-04-27 31 views
6

Avere un problema con uno spinner che gira effettivamente mentre ember.js sta facendo la cosa. Ho un esempio jsfiddle molto generico che illustra il problema:Pause gif animate quando gli oggetti ember.js si stanno caricando

http://jsfiddle.net/h4ZcZ/2/

Presumo che ci deve essere un modo semplice per fare questo lavoro come previsto, ma io non sto trovando. Ho provato a utilizzare un'implementazione JavaScript/CSS di uno spinner (spin.js) con gli stessi risultati. Ho visto alcune cose che indicano che questo era tipicamente un problema di IE, ma non è questo il caso. Questo succede su tutti i browser su Windows e ho provato anche su Safari Mac.

+0

Quanti oggetti ci sono nella tua collezione? –

+0

50 elementi nella raccolta che è un oggetto Ember.js. Ogni oggetto contiene una serie di altri oggetti per un totale di 6 ciascuno. – BrianB

risposta

1

Il problema è il ciclo for - in pratica stai bloccando il thread. Vorrei utilizzare i timeout e ridurre il lavoro da fare per dare ad altre esigenze di elaborazione sulla pagina la possibilità di eseguire.

+0

L'iterazione dell'array non è il grande momento in cui succhiare (o almeno è solo una parte del problema). L'implementazione di handlebars.js di Ember sta iterando attraverso gli itemsController con il tag {{#each}}. Ho esaminato alcuni schemi di rendimento usando setTimeout e [Nick Fitzgerald's Patterns] (http://fitzgeraldnick.com/weblog/35/) ma ciò aiuterà solo con il caricamento di elementi nel controller, non con l'aggiornamento di Ember del DOM che in il mio caso specifico è dove sta accadendo la parte del leone sul blocco del thread. – BrianB

+0

Ah, giusto punto. Questo ha molto più senso. –

1

Per quanto riguarda la causa principale, @ChristopherSwasey è corretto. Ho chiesto ad alcuni altri sviluppatori Ember su questo. Nessuna soluzione, ma due pensieri interessanti che potrebbero essere d'aiuto:

1) Uno sviluppatore ha riferito di aver incontrato questo problema e di averlo aggirato assicurandosi che la gif animata iniziasse prima della lunga esecuzione di javascript.

2) Un altro sviluppatore ha suggerito che l'utilizzo di un elenco virtualizzato è il percorso corretto, in modo che vengano visualizzati solo i nodi visibili. Tuttavia, temo di non sapere ancora una classe di elenco virtualizzato Ember open source.

Spero che questo aiuti.

+0

Il caricamento della gif prima degli aggiornamenti DOM da ember non ha alcun impatto per me. Non ha alcun impatto nell'esempio di js fiddle. – BrianB

Problemi correlati