Какие методы можно использовать для воспроизведения отдельных IE «Сценарий на этой странице вызывает медленное выполнение Internet Explorer»? - PullRequest
7 голосов
/ 10 сентября 2010

Я пытаюсь воспроизвести ошибку, о которой сообщил клиент, это уведомление «этот скрипт работает медленно», которое появляется в IE из-за чрезвычайно медленного анализа JS / DOM.

Это не 'Это происходит в моей виртуальной коробке IE6 (клиент имеет IE6) и не работает на моей тестовой машине (некоторые Mac mini).

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

Это действительно высококлассный клиент, поэтому яне могу просто позвонить или поговорить с ними.Есть ли какие-нибудь способы, которыми я мог замедлить свою машину, чтобы воспроизвести эту ошибку?Или я должен просто попросить спецификации компьютера клиента и попытаться получить доступ к более старому компьютеру, у которого больше шансов воспроизвести проблему?Или даже использовать что-то вроде browsercam?

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

Буду признателен за любой совет.

Ответы [ 3 ]

5 голосов
/ 10 сентября 2010

запускается внутри виртуальной машины и специально уменьшает объем памяти для избыточного обмена.Если это по-прежнему не работает, вы можете запустить некоторое ПО для тестирования в фоновом режиме, которое, как правило, потребляет много ресурсов процессора.

4 голосов
/ 10 сентября 2010

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

Начиная с грубых и простых методов: используя виртуальную машину, выделите ей только один ЦП, затем запустите что-нибудь с высокой загрузкой ЦП, например, при воспроизведении фильма. Попробуйте использовать что-то, что не занимает слишком много ОЗУ, потому что принудительное использование IE в файле подкачки здесь вам не поможет. Чтобы получить более точное замедление, вам может потребоваться разогнать ваш процессор, хотя делать это ради отладки Javascript немного экстримально. Получение доступа к старому компьютеру также может помочь, хотя ни один из них не может воспроизвести проблему.

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

Есть и другие вещи, которые вы можете попробовать, помимо замедления работы компьютера. На самом деле вы можете вручную уменьшить ограничение времени для медленного предупреждения сценария IE, согласно этой статье поддержки Microsoft , изменив некоторые параметры реестра. Попробуйте глубокое профилирование Javascript на своем компьютере, даже если вы не можете сгенерировать медленную ошибку сценария, вы все равно можете найти узкие места или места, где сценарий работает плохо.

1 голос
/ 10 сентября 2010

Я нашел вашу проблему:
This is a really high profile client so I can't just get on the phone or IM and speak to them. - это то, что вы хотите исправить, если они хотят, чтобы это исправить.


В противном случае, если у вас есть идеяпроблемы, вы могли бы:

  • создать документ XML / HTML с использованием случайной информации и сохранить его в строку
  • , а затем попытаться проанализировать это с использованием XMLDom или чего-то еще

Вы должны попытаться сделать это с миллионами строк:

sXML     = "<?xml version="1.0" encoding="UTF-8"?>\n<rootElement>\n";
for (var i=0;i<1000000;i++){
   sXML += '<element name="' + Math.floor(Math.random()*10001) + '">' 
         +    'some more random text: ' + Math.floor(Math.random()*1001) 
         + "</element>\n";
}
sXML     = "</rootElement>";

var oXML = (new DOMParser()).parseFromString(sXML, "text/xml");
var root = oXML.documentElement;

Конечно, вы можете сделать это так, как вам хочется, используя случайные элементы и т. Д.

...