IE7 Javascript Performance - PullRequest
       12

IE7 Javascript Performance

1 голос
/ 15 июня 2009

Я пытаюсь разработать приложение, которое имеет довольно много клиентских сценариев. На странице есть разделы, которые взаимодействуют друг с другом на основе различных входных данных. Проблема в том, что когда вы получаете много контента на странице, страница в IE7 ДРАМАТИЧЕСКИ замедляется из-за плохого движка javascript, встроенного в этот браузер, а также частично, потому что на странице гораздо больше данных.

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

У вас, ребята, есть какие-нибудь советы, которые я мог бы использовать для оптимизации этого?

Ответы [ 6 ]

3 голосов
/ 15 июня 2009

Пара нестандартных предложений ...

  1. Вспышка как сопроцессор. Если у вас есть вычислительно дорогие вещи, вы можете передать их Flash. ActionScript будет быстрее, чем паршивый JS в IE. Однако имейте в виду, что если вы переносите много данных назад и вперед между JS и Flash, это очень медленно.
  2. Google Gears. Вы можете ускорить процесс с веб-работниками. Когда вы обнаружите IE7, скажите, что обновление до IE8 или установка Google Gears улучшат работу.
  3. Возможно, Silverlight мог бы использоваться в качестве сопроцессора. У меня нет опыта, однако.

Можете ли вы сказать, что медленно? Это когда ты прикасаешься к DOM?

3 голосов
/ 15 июня 2009

Запустите ваш код в профилировщике и посмотрите, что он на самом деле делает. Посмотрите, где ваше время проведено. IE8 обеспечивает совместимость с IE7 и хороший профилировщик, включенный в его Инструменты разработчика.

Чтобы выполнить профилирование в IE7 напрямую, вам придется возиться с Visual Web Developer или отладчиком в комплекте с MS Office. Нужно больше дурачиться, но можно заставить его работать. Каждый раз, когда мне нужно было установить это на новый компьютер, мне потребовался час или больше, чтобы понять магическое заклинание, чтобы заставить его работать, но это выполнимо.

2 голосов
/ 17 июня 2009

Некоторые довольно регулярные ошибки относятся почти исключительно к DOM, который медленен во всех браузерах. Попробуйте использовать innerHTML везде, где это возможно. Это не совместимый со стандартами способ ведения дел, но он на сегодняшний день самый быстрый.

Если вы просматриваете элементы DOM, используя что-то вроде следующего:

for (var i = 0; i < domNodes.length; i++) { ... }

Обратите внимание, что каждый раз, когда вы запрашиваете длину NodeList, выполняется довольно дорогая операция поиска. Вам лучше кэшировать длину NodeList следующим образом:

for (var i = 0, il = domNodes.length; i < il; i++) { ... }

Улучшения производительности здесь невероятные. Роберт Найман провел интересное сравнение for петель. Если вы никогда не слышали об этом, повышение производительности может вас удивить.

2 голосов
/ 15 июня 2009

Мне кажется, что некоторые из этих ответов могут упускать очевидное.

Какова эффективность используемого вами алгоритма? Линейный? Logorithmic? Экспоненциальный? Мне кажется, что если JAVASCRIPT замедляется по мере увеличения размера документа, то проблема заключается в эффективности ВАШЕГО кода, а не в MS. IE javascript работает медленно, но почему вы так уверены, что это проблема именно с этим браузером? У других движков javascript с этим все в порядке?

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

Еще одна вещь, которую нужно иметь в виду, это то, что взаимодействие с домом очень медленное. Если вы сможете реорганизовать свой код для достижения того же самого, но с меньшим количеством манипуляций в домене, это улучшит производительность

0 голосов
/ 17 июня 2009

Прикрепляйте и отсоединяйте события по мере необходимости и не используйте поведения. Также создайте потоки для ускорения пользовательского интерфейса, используя setTimeout и setInterval. Я делаю это все время, чтобы не допустить скачков IU.

0 голосов
/ 15 июня 2009

Это отличное видео о технологиях Google по оптимизации javascript от гуру javascript Николаса С. Закаса http://www.youtube.com/watch?v=mHtdZgou0qU

Он советует вам использовать локальные переменные, чтобы ограничить поиск в области видимости, свести к минимуму изменения стиля javascript css (вместо этого изменить классы) и делать их пакетами, если вам нужно уменьшить повторный рендеринг в браузере, и множество других полезных советов. :)

...