Javascript, IE, строки и проблемы с производительностью - PullRequest
3 голосов
/ 13 марта 2010

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

Однако, как вы можете видеть на этом скриншоте IE Profiler .. alt text

Просто «Строка» - самый большой преступник. Почти 750 мс эксклюзивного времени.

Значит ли это, что IE тратит 750 мс просто на создание экземпляров Strings? Я также читал эту статью в блоге Opera Dev :

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

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

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

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

ОБНОВЛЕНИЕ. Мне особенно интересен упомянутый выше совет по поводу "оптимизации поиска в массиве". Наша библиотека большая (1 МБ), поэтому в ней много строк, как и любой другой код JS. Но поскольку наша библиотека больше, чем большинство, эти строки на самом деле вызывают проблемы со скоростью.

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

Ответы [ 2 ]

5 голосов
/ 13 марта 2010

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

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

0 голосов
/ 13 марта 2010

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

alert("hello" + " world");

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...