Какие методы можно использовать для воспроизведения отдельных IE "Сценарий на этой странице вызывает медленное выполнение Internet Explorer"?
Я пытаюсь воспроизвести ошибку, о которой сообщил клиент, это уведомление "этот скрипт работает медленно", которое появляется в IE из-за чрезвычайно медленного анализа JS/DOM.
Это не происходит в моей виртуальной коробке IE6 (клиент имеет IE6) и не работает на тестовом компьютере, который у меня есть (некоторые Mac mini).
Однако я могу гарантировать, что происходит много JS, и много HTML обрабатывается после извлечения с использованием XHR, кроме того, много JS работает с добавленными элементами DOM после этого. Я не могу опубликовать весь сценарий, но я уверен, что смогу легко отследить проблему, но я хочу воспроизвести это, чтобы поиграть с оптимизацией.
Это действительно высококлассный клиент, поэтому я не могу просто позвонить или поговорить с ним. Есть ли какие-нибудь способы, которыми я мог замедлить свою машину, чтобы воспроизвести эту ошибку? Или я должен просто спросить спецификации компьютера клиента и попытаться получить доступ к более старому компьютеру, который с большей вероятностью может воспроизвести проблему? Или даже использовать что-то вроде браузера камеры?
Еще одна идея, о которой я подумал, - это заставить JS работать еще больше, чтобы я смог решить проблему и попытаться оптимизировать свой код, чтобы даже с моим дополнительным кодом не появлялась ошибка уведомления скрипта.
Буду признателен за любой совет.
3 ответа
Есть много вещей, которые можно сделать, чтобы замедлить работу компьютера. Реальная проблема здесь заключается в том, хотите ли вы, чтобы это было точным, или просто что-то, что отнимает достаточный цикл процессора, чтобы IE6 мог воспроизводить эту проблему чаще.
Начните с грубых и простых методов: используя виртуальную машину, выделите ей только один процессор, затем запустите что-нибудь с высокой загрузкой процессора, например, при воспроизведении фильма. Попробуйте использовать то, что не занимает слишком много ОЗУ, потому что принудительное использование IE в файле подкачки вам здесь не поможет. Чтобы получить более точное замедление, вы можете разогнать ваш процессор, хотя делать это ради отладки Javascript немного экстримально. Получение доступа к старому компьютеру также может помочь, хотя ни один из них не может воспроизвести проблему.
Использование программного обеспечения для разделения экрана также может быть затруднено - это зависит от того, насколько готов клиент устанавливать и настраивать подобное программное обеспечение, но это определенно должно помочь воспроизвести ошибку. Иметь необходимость играть с ним, пока вы используете компьютерное время клиента, вероятно, будет неприемлемо.
Есть и другие вещи, которые вы можете попробовать, помимо замедления работы компьютера. В соответствии с этой статьей поддержки Microsoft вы можете вручную уменьшить ограничение времени для предупреждения медленного сценария IE, изменив некоторые параметры реестра. Попробуйте выполнить глубокое профилирование Javascript на своем компьютере, даже если вы не можете сгенерировать медленную ошибку сценария, вы все равно можете найти узкие места или места, где сценарий работает плохо.
Работать внутри виртуальной машины и специально уменьшать объем памяти, чтобы обеспечить избыточную перестановку. Если это по-прежнему не работает, вы можете запустить некоторое ПО для тестирования в фоновом режиме, которое, как правило, потребляет много ресурсов процессора.
Я нашел вашу проблему: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;
Конечно, вы можете сделать это так, как вам хочется, используя случайные элементы и т. Д.