2014-11-25 17 views
13

Mam dość złożony javascript wyprodukowany przez GWT i działa świetnie we wszystkich przeglądarkach (w tym IE10), ale w IE11 mam problemy z wydajnością.Wydajność przeglądarki Internet Explorer 11 z JS

Aktywacja profilera odkryłem jak najbardziej kodu zużywające jest ... (w kolejności od najbardziej czasochłonne)

clientWidth, offsetHeight i podobne metody z wartościami, zaskakujących:

clientWidth 32 sekund (32806ms) do zaledwie 60 połączeń 29 sekund offsetHeight do 181 połączeń

wydaje mi przyczynę moich problemów z wydajnością zlokalizowanych w IE11 (rozważyć wykonanie w IE10 jest około 2 sekundy na cały kod), a obok naturalnie mogę zacząć optymalizować obniżając numer połączenia (jeśli to możliwe) chciałbym zrozumieć, jeśli coś jest nie tak z metodami, których używam lub czymś innym Ktoś wie, co jest nie tak w IE11?

AKTUALIZACJA: tylko po to, aby podać termin porównania: clientWidth w tym samym kodzie w trybie dokumentu = 10 to 15 ms ... różnica 2000 razy jest tak dziwna, że ​​nie mogę znaleźć błędu IE w tym samym kodzie , te same metody profilowanych krawędzi w trybie dokument (11) vs 10

UPDATE: zagłębiając z profilera wydaje się, że clientWidth kopać w moim drzewie więcej czasu:

widzę: clientWidth -> Układ -> formacie HTML> body -> table x -> generated parent dla wyświetlania: table -> td -> table-> generated table for display: table -> td -> table .......

i tak przez ogromną ilość czasu (nie mogę osiągnąć końca drzewa!

czy ktoś wie, co oznacza wygenerowana tabela dla wyświetlacza: tabela dokładnie? jedyne co mogę zgadnąć to to, że IE11 z jakiegoś powodu działa coraz częściej na drzewie DOM, aby obliczyć szerokość ... ale nie potrafię odgadnąć, jak przełamać ten długi cykl:

AKTUALIZACJA z OBEJRZYCIEM: Interesujące wystarczy (i potwierdzając to, co do tej pory widziałem) istnieje sposób na "rozwiązanie" problemu z wydajnością: ustaw najbardziej zewnętrzny div/container na stały rozmiar w pikselach (przynajmniej jeden z dwóch wymiarów), aby ułatwić IE obliczyć rozmiar pojemnika i rozwiązać każdy problem. To interesujące obejście może być przydatne w niektórych przypadkach, niestety w moim przypadku musiałabym zachować mój rozmiar "100%", aby dostosować różne ekrany ... więc nie jest to dopuszczalne obejście problemu

AKTUALIZACJA z możliwym polem limit: Wydaje się, że w dużym stopniu wykorzystuje się cellWidth i CellHeight, mój zestaw JS dla prawie każdego div rozmiaru komórki i rzeczywisty rozmiar w procentach, usunięcie rozmiaru komórki wydaje się skracać czas obliczania rozmiaru do 1 ms dla każdego połączenia!

+0

Może to stanowić problem w trybie standardowym w trybie dziwactwa.Z jakiegoś powodu, może twój IE11 przechodzi w tryb dziwactwa, i to jest powód powolnej wydajności. Spróbuj sprawdzić, w jakim trybie działa IE11. – davidkonrad

+0

nop, sprawdzane za pomocą javascript: window.alert ("Jesteś w" + (document.compatMode === "CSS1Compat"? "Standardy": "Dziwactwa") + "tryb".) i odpowiedzią jest tryb standardów ... jak oczekiwano – noone1

+0

Co z trybem documentMode? http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx i http://msdn.microsoft.com/en-us/library/dn321432.aspx – davidkonrad

Odpowiedz

3

Nie mogę powiedzieć, że osiągnęła doskonałe zrozumienie ale jakoś rozwiązany:

Przede wszystkim wykorzystaniem pikseli wyrażona rozmiarach pomaga ale rzeczywistą i głównym problemem było i zachodziło w przynajmniej składową GWT cellHeight = "150px" i dla tego samego elementu Height = "100%", który został zhakowany w JS, a html wygenerował tabelę o mylących rozmiarach dla IE, podczas gdy inne przeglądarki były w stanie nią zarządzać. Zasadniczo cały problem polega na tym, że jeśli coś nie jest dokładnie liniowe, czas obliczania rozmiarów staje się ogromny bez żadnego ostrzeżenia lub błędu!

+5

. Dlatego takie rzeczy istnieją -> ** https: //image-store.slidesharecdn.com/4a0419d3-9de8-4158-a6d8-6a2b6ee9f044-oryginalny. jpeg ** :) – davidkonrad

Powiązane problemy