Подтвердить что ты не робот

A script на этой странице вызывает то, что работает медленно

Проблема в заголовке - IE плохо себя ведет и говорит, что есть script работает медленно - FF и Chrome не имеют этой проблемы.

Как я могу найти проблему.. На этой странице много JS. Проверка вручную не является хорошей идеей

EDIT: Это страница из проекта, над которым я работаю... но мне нужен инструмент, чтобы найти проблему.

Конец: Оказалось, что это UpdatePanel - так или иначе он будет "запутан" и слишком долго будет обрабатывать что-то. Я просто выбросил его из окна - теперь только JQuery будет использовать: D.

И я выбираю Remy Sharp, потому что я действительно не знал об этом инструменте, и это выглядит довольно круто.

4b9b3361

Ответ 1

Получите себе копию профайлера страницы IBM:

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=61d74777-1701-4014-bfc0-96067ed50156

Это бесплатно (всегда выигрыш). Запустите его в фоновом режиме, дайте ему несколько секунд, а затем обновите страницу в IE. Вернитесь к профилировщику и в нем будут перечислены все ресурсы, используемые на странице, и вы получите подробную информацию о профиле - в частности, где JavaScript занимает много времени.

Это должно стать хорошим началом для поиска источника вашей проблемы.

Если теги script являются встроенными, я бы предложил создать локальную копию файла и отделить теги script, чтобы отделить файлы, если сможете.

Ответ 2

Длинные сценарии по-разному обнаруживаются разными браузерами:

  • IE поднимет предупреждение после выполнения 5 миллионов заявлений (больше информации о MSDN)
  • Firefox будет предупреждать, если script занимает больше 10 секунд (больше информации о MDN)
  • Safari будет предупреждать, если script занимает больше 5 секунд
  • Chrome (1.0) не имеет установленного предела и будет просто продолжать попытки до исключения OutOfMemory, после чего он сбой
  • Opera будет продолжать работать вечно, без предупреждения.

Николас Закас написал прекрасную статью, посвященную этой теме.

Как таковой - лучший способ избежать этих проблем - сокращение циклов, рекурсия и манипулирование DOM.

Ответ 3

Удалите половину кода и посмотрите, все ли это происходит. Если нет, то в половине вы удалили. Повторяйте, пока не выясните, какой кодовый блок вызывает проблему.

Ответ 4

Обычно это бесконечный цикл. Проверьте свои петли и условия их выхода.

Ответ 5

Для IE диалог основан на обработке # команд JS. См. Здесь информацию и метод для изменения значения по умолчанию: http://support.microsoft.com/kb/175500

Ответ 6

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

Спасибо

Гвидо

Ответ 7

вы также можете проверить, есть ли в вашей странице javascript Google Analytics. Ошибка произошла только с IE, и как только код google был удален, он сработает!

Ответ 8

Убедитесь, что под кодом JavaScript выполняется только один раз:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(win_onload);

Над кодом внутри функции win_onload().

Ответ 9

Я обнаружил, что добавление предупреждения ( "до X" ) ( "после X" ) помогло мне найти мою проблему. Я добавил их к моей $(function() {

}

Ответ 10

Я не считаю, что есть инструмент, который может найти оскорбительный script. Вы можете попробовать установить отладчик IE, например Visual Studio, и, возможно, он сломается в точке, где возникает проблема. Но я не могу дать никаких гарантий в отношении этой работы.

В прошлом, когда у меня были подобные проблемы, я просто прокомментировал разделы кода, чтобы проверить узкие места, где возникает проблема, обычно в шаблоне типа двоичного поиска. Комментируйте половину библиотек javascript и т.д.

Кроме того, как говорили другие, этот тип проблемы возникает из больших циклов и многих вызовов функции setTimeout или рекурсивных циклов setTimeout.

Ответ 11

Если javascript связывает обработку страниц более 10 секунд, вы получаете это сообщение. IE явно имеет более медленный механизм javascript, вызывая это.

Я предполагаю, что некоторая оптимизация кода, безусловно, поможет, и попробуйте уменьшить количество выполняемых javascript при загрузке страницы. Возможно, используйте setTimeout(), чтобы отложить обработку некоторых ненужных вещей, если вам нужно.

Что касается инструментов, воспользуйтесь профилировщиком Firebug, чтобы узнать, где вы тратите столько времени.

Ответ 12

Если у вас есть контроль над JavaScript, вы можете разбить его на отдельные сценарии или попробовать подход с "ленивой загрузкой".

Просто мои $.02

Ответ 13

В моем случае слишком много элементов управления ASP.NET HoverMenuExtender в GridView, привязанных к множеству строк, вызывают чрезвычайно низкую производительность. Я удалил HoverMenuExtender, и мои проблемы с скоростью (и диалог) исчезли. Не совсем связано с тем, почему открывается диалоговое окно, но это может помочь кому-то.

Ответ 14

@nikmd23 ответ информативен.

Мои 2 цента здесь... У меня была проблема с предупреждением script - из-за загрузки элементов dropdown list с помощью цикла for.

Я отправил сообщение @Eric Leschinski в Отключение сообщения long-running- script в Internet Explorer.

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

Ответ 15

Есть несколько причин для такого рода оповещений

  • Нет. инструкций JS, выполняемых IE, превышает предопределенные пределы. Это можно устранить, отредактировав реестр Windows, см. Здесь

  • Оптимизируйте код javascript, чтобы сократить время выполнения.

  • Оптимизация кода JS - это реальный объект проб и ошибок, и для этого есть несколько правил большого пальца. Просто Google это.