2014-11-25 16 views
13

Ho un javascript abbastanza complesso prodotto da GWT e funziona perfettamente su tutti i browser (incluso IE10) ma in IE11 sto affrontando problemi di prestazioni.Prestazioni di Internet Explorer 11 con JS

Attivazione profiler ho scoperto come il codice più consumo è ... (in ordine dal più consumo)

clientWidth, offsetHeight e metodi simili con valori impressionanti:

clientWidth 32 secondi (32806ms) per soli 60 chiamate 29 secondi offsetHeight per 181 chiamate

mi sembra la causa dei miei problemi di prestazioni localizzate in IE11 (considerare l'esecuzione in IE10 è di circa 2 secondi per l'intero codice) e accanto, naturalmente, posso iniziare a ottimizzare la riduzione del numero di chiamate (se possibile) Mi piacerebbe capire se c'è qualcosa di sbagliato con i metodi che sto usando o qualcos'altro Qualcuno sa cosa c'è di sbagliato in IE11?

UPDATE: solo per dare un termine di paragone: clientWidth nello stesso codice in modalità documento = 10 è 15ms ... una differenza di 2000 volte così strano non riesco a trovare un bug di IE in questo stesso codice , stessi metodi profilati in bordo modalità documento (11) vs 10

UPDATE: andare più in profondità con profiler sembra che clientWidth scavare dentro il mio albero più tempo:

vedo: clientWidth -> layout -> HTML-> corpo -> tabella x -> genitore generato per la visualizzazione: tabella -> td -> tabella-> tabella generata per la visualizzazione: tabella -> td -> tabella .......

e così via per un enorme quantità di tempo (non riesco a raggiungere la fine dell'albero!

qualcuno sa cosa significa tabella generata per la visualizzazione: tabella esattamente? l'unica cosa che posso immaginare è che IE11 per qualche ragione continua a funzionare sempre più sull'albero DOM per calcolare la larghezza ... ma non riesco a indovinare come rompere questo lungo ciclo

AGGIORNAMENTO con WORKAROUND: Interessante abbastanza (e confermando quanto visto fino ad ora) esiste un modo per "risolvere" il problema delle prestazioni: impostare il div/contenitore più esterno su una dimensione fissa in pixel (almeno una delle due dimensioni) per rendere più facile per IE calcolare le dimensioni del contenitore e risolvere ogni problema. È una soluzione interessante che potrebbe essere utile per alcuni casi, purtroppo nel mio caso avrei bisogno di mantenere la mia dimensione "100%" per adattare schermi diversi ... quindi non è una soluzione accettabile

AGGIORNA con un campo possibile limite: Sembra che il grande uso di cellWidth e cellHeight sia implicito, il mio JS ha impostato per quasi tutte le div le dimensioni della cella e le dimensioni effettive in percentuale, eliminando la dimensione della cella sembra ridurre il tempo per il calcolo della dimensione a 1ms per ogni chiamata!

+0

Si potrebbe essere un problema con la modalità standard contro la modalità quirk.Per qualche ragione, forse, il tuo IE11 entra in modalità quirks, e questo è il motivo della prestazione lenta. Prova a controllare in quale modalità viene eseguito IE11. – davidkonrad

+0

nop, selezionato con javascript: window.alert ('Sei in' + (document.compatMode === 'CSS1Compat'? 'Standard': 'Quirks') + 'modalità'.) e la risposta è la Modalità standard ... come previsto – noone1

+0

Che dire di documentMode? http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx e http://msdn.microsoft.com/en-us/library/dn321432.aspx – davidkonrad

risposta

3

Non posso dire che ho raggiunto una comprensione perfetta ma in qualche modo ho risolto:

Prima di tutto l'uso di dimensioni dei pixel espresso aiuta, ma il problema reale e principale era stavo installando in almeno un componente di GWT cellHeight = "150px" e per lo stesso elemento Altezza = "100%" questo tradotto in JS e html ha generato una tabella con dimensioni confuse per IE mentre altri browser erano in grado di gestirlo. Fondamentalmente l'intero problema è che se c'è qualcosa di non esattamente lineare il tempo di calcolo per le dimensioni diventa enorme senza sollevare alcun avvertimento o errore!

+5

Ecco perché esistono cose come questa -> ** https: //image-store.slidesharecdn.com/4a0419d3-9de8-4158-a6d8-6a2b6ee9f044-originale. jpeg ** :) – davidkonrad

Problemi correlati