2013-05-01 5 views
5

Ich verwende IE9, in IE8-Standards-Modus mit F12-Tools, um meine Seite zu testen. Das Seitenskript verwendet getBoundingClientRect, um herauszufinden, was im Ansichtsfenster sichtbar ist.Warum ist getBoundingClientRect in IE8 langsam?

Mit dem Profiling-Tool sehe ich Anrufe an getBoundingClientRect, die eine Menge Zeit brauchen. Zum Beispiel, 244 Aufrufe an die Funktion dauerte eine exklusive Zeit von 4.361ms!

Gibt es einen Grund dafür, dass diese Funktion im IE8 so langsam ist? Wenn Sie im IE9-Modus, Chrome, FireFox usw. arbeiten, scheint die Funktion schnell zu sein.

+0

Jeder Aufruf kann einen DOM-Reflow auslösen, je nachdem, wie und wo Sie ihn verwenden? – Bergi

Antwort

0

Die getBoundingClientRect wurde zuerst von Microsoft in IE5 eingeführt, und es gibt keine bekannten Leistungsprobleme.

jQuery UI und andere, verwenden Sie es, und wenn sie in der Vergangenheit um es zu bewegen, war genial: http://ejohn.org/blog/getboundingclientrect-is-awesome/

ich ein Vergleich gefunden zwischen jQuery similar calculation und getBoundingClientRect: Sie http://jsperf.com/getboundingclientrect-vs-jquery in der Regel gewinnen getBoundingClientRect

führen Ihre Website im IE8-Kompatibilitätsmodus aus, der die Leistung manchmal veräppeln kann, können Sie es in einem echten IE8-Browser testen? Hier muss die Leistung gleich sein.

+0

Ich werde später in dieser Woche eine IE8 VM einrichten und testen. Ich hoffe, es ist nur der compat-Modus ist langsam. –

+4

@AndrewDavey Ich stoße auf das gleiche Problem - haben Sie herausgefunden, ob die Leistungsprobleme nur ein Nebeneffekt des Kompatibilitätsmodus sind? –

+3

@LarsGrammel - Dies scheint angemessen: http://xkcd.com/979/ – Bobson