2010-03-13 2 views
3

Итак, у нас есть этот продукт, и он очень медленный в IE. Мы уже применили множество рекомендаций, рекомендованных самими ребятами IE (like this и), и попытайтесь пожертвовать чистым кодом для производительности в критических частях, таких как манипуляции с DOM.Javascript, IE, строки и проблемы с производительностью

Однако, как вы можете видеть на скриншоте IE профилировщика .. alt text http://i43.tinypic.com/24g57c1.png

Просто "String" является крупнейшим преступник. Почти 750 мс эксклюзивного времени.

Означает ли это, что IE тратит 750 мс, просто создавая строки? Я также прочитал этот материал на Opera dev blog:

Сценарий сборки может удалить пробелы, комментарии, заменить строки с массива выборок (чтобы избежать MSIE создания объекта строки для каждого экземпляра строки - даже в условиях)

Но не более подробная информация об этом. Кто-нибудь может уточнить? Похоже, что IE должен создавать полный экземпляр String каждый раз, когда у вас есть «» в вашем коде, что может объяснить это, но я не знаю, как выглядела бы оптимизация поиска массива. BTW- мы действительно не делаем много конкатенации строк в любом месте кода.

Библиотека мы используем MooTools 1.2.4

Любые предложения будут оценены! Thx

UPDATE- Меня особенно интересует упомянутый выше отзыв о «оптимизации поиска массива». Наша библиотека большая (1 МБ), поэтому в ней много строк, как и любой другой JS-код. Но поскольку наша библиотека больше, чем большинство, эти строки фактически вызывают проблемы с производительностью.

Кроме того, кто-нибудь знает, добавляет ли материал в String.prototype каждый экземпляр медленнее?

+0

Возможно ли иметь профиль профилирования дерева вызовов? –

ответ

5

Я бы взял профилировщик, который даст вам более глубокое представление, вы можете точно видеть, что такое String так долго. Для IE конкретно есть dynaTrace AJAX Edition (да, это бесплатно).

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

+0

Seconded - dynaTrace настолько потрясающий, что почти странно – Pointy

+0

dynaTrace выглядит довольно круто, но наш продукт не работает, когда он работает. Нет ошибок или чего-то еще, это просто не работает. Отстой. Но я уже знаю, какая низкоуровневая функция вызывает большую часть проблемы с производительностью, и это 'String'. Так что я спрашиваю, если кто-нибудь знает, как оптимизировать использование строк – adamJLev

+0

+1 для dynaTrace. Никогда не слышал об этом раньше. –

0

Строки неизменяемы в Javascript. Значение, когда вы делаете что-то вроде этого:

alert("hello" + " world"); 

три строки Создаются:

  1. привет
  2. слово
  3. привет мир

Обнаружение таких случаев и фиксируя те могут быть полезным. Как сказал Ник, используя профилировщик, чтобы точно определить, какой именно код с Strings вызывает проблемы, скорее всего, лучший способ.

+0

Нет никакой конкретной части кода, которая делает что-то сумасшедшее со строками, большинство библиотек имеют тысячи строк в исходном коде, но когда у вас есть библиотека размером 1 МБ, тогда это становится проблемой. Меня особенно интересовал отзыв разработчиков Opera, упомянутых в их блоге – adamJLev

Смежные вопросы