Производительность jquery scrollTop в IE 8 - PullRequest
5 голосов
/ 06 декабря 2010

Я использую jQuery .scrollTop для прокрутки изображения в div. Он отлично работает в Firefox - прокрутка очень плавная и быстрая. В IE 8 прокрутка очень медленная и сбойная - изображение прокручивается раз в секунду - две секунды. Размер изображения в среднем составляет от 2000 * 2000 до 4000 * 4000 пикселей.

Есть ли способ улучшить это для IE 8?

Производительность в IE 7 немного лучше, но все еще недостаточно хороша.

Спасибо

Редактировать: Я считаю, что проблема в том, как прокрутка реализована в IE 7 и 8. Я включил обе полосы прокрутки (overflow-x и overflow-y), и я попытался прокрутить изображение с помощью этих полос прокрутки. Вопрос точно такой же. Я пытался запустить его на довольно слабом ПК - двухъядерном Pentium несколько лет с 2 ГБ оперативной памяти, а также на настольном компьютере Core i7 с 2,8 ГГц процессором 1600 МГц, и результаты практически идентичны. FireFox прокручивает намного быстрее, однако его загрузка процессора в среднем на 10% выше, чем загрузка процессора IE. Это оставляет меня озадаченным ... наверняка Microsoft уже решила бы эту проблему?

Другая вещь, которую я нашел немного странной, заключается в том, что прокрутка выполнялась быстрее на ноутбуке с Core 2 Duo. Мне интересно, имеет ли это какое-либо отношение к драйверам видеокарты ... IE 7/8 даже использует GPU?

Извините, если это звучит глупо, но я действительно заинтересован в решении этой проблемы ... IE не может быть таким плохим ..

1 Ответ

6 голосов
/ 15 февраля 2011

jQuery's .scrollTop() печально известен своей медлительностью, т. Е. Если разметка даже немного сложная или большая, вы никогда не добьетесь ее хорошей производительности.

Решение состоит в том, чтобы не использовать jQuery * 1004.* функционируйте, но создавайте свои собственные, основываясь на собственных свойствах .scrollHeight и .scrollTop.

Причина в том, что вы вычисляете смещения, которые являются основой медлительности .scrollTop() в jquery - вам нужно идтивверх по дереву DOM и рассчитать смещения для каждого родителя, т. е.

jQuery делает это как можно лучше, но вы всегда сможете сделать это быстрее, поскольку заранее знаете разметку и можете оптимизировать ее - выМожно даже выполнять вычисления смещения заранее большую часть времени и просто использовать константу в качестве модификатора.

Все это говорит о том, что это не может быть ошибкой jQuery - это может быть просто проблема с конвейером рендеринга ie - в зависимости отв зависимости от того, как вы сделали пометку и как ее стилизовать, прокрутка может заставить т.е. полностью перерисовать / перерисовать страницу для каждого пикселя, который вы прокручиваете, и это будетвсе это до ползти.

...