У меня очень большое приложение javascript, которое содержит в основном код asm.js(он построен на urho3d С++ engine, который их компилируется в asm.js).
Он отлично работает на большинстве браузеров (хром, firefox, сафари, край), но очень медленный на IE11. Дело в том, что это только медленно, пока вы не откроете инструменты для разработчиков. С открытыми инструментами разработчика IE11 становится ~ 10 раз быстрее и почти так же быстро, как и другие браузеры.
Вот минимальный пример, который воспроизводит проблему:
http://test.sebbia.com/urho3d/test.html
Откройте страницу в любом рабочем браузере, время между сообщением "Запуск - запуск" и сообщение "Запуск - завершение" должно быть около 1-2 секунд.
Откройте страницу в IE11 без инструментов разработчика, время должно быть около 35-50 секунд.
Откройте инструменты разработчика и перезагрузите, время должно быть около 2-3 секунд.
Еще одно важное замечание: если я начинаю сеанс профилирования в инструментах разработчика, производительность падает, как если бы инструменты разработчика были закрыты. Таким образом, я могу фактически профилировать проблему. Но я провел несколько часов профилирования, и я пробовал вставлять сообщения журнала в большие функции, но я не нашел узкого места. Все функции выполняются примерно в одно и то же время, и если я вставляю сообщение журнала в середине больших функций, они обычно разбиваются на 2 похожие части. Таким образом, нет единой функции, которая отвечает за замедление, выполнение кода происходит просто медленно. Бит сдвиги, вызовы функций, арифметические операции - кажется, что все они просто занимают слишком много времени по сравнению с открытыми инструментами разработчика.
Мне действительно нужно, чтобы мое приложение работало над IE11, и тот факт, что он работает с инструментами разработчика, открывает мне с ума. Я пытаюсь найти способ заставить IE подумать, что инструменты открыты, даже если они отсутствуют, или добиться хорошей производительности любыми другими способами. Итак, мои вопросы: , как я могу достичь производительности, равной IE11, с инструментами разработчика, открытыми без ручного открытия инструментов?
Это очень широкий вопрос, поэтому я хотел бы разбить его на несколько более мелких вопросов:
-
Есть ли способ заставить IE11 думать, что инструменты разработчика открыты? Может быть, есть что-то вроде x-ua-совместимого метатега, которого я не вижу?
-
Что вызывает замедление при закрытии инструментов разработчика? Я слышал, что вызовы функций console.log медленны без инструментов разработчика в IE8 и 9, может быть, есть что-то подобное в IE11? Может быть, asm.js не оптимизирован? Если бы я знал, что это значит, я мог бы хотя бы попытаться переписать код, чтобы избежать этого.
-
Есть ли способ открыть инструменты разработчика из javascript-кода? Возможно, я могу попросить пользователей нажать кнопку на веб-сайте, чтобы "сделать приложение быстрее". Попросить их нажать F12 или изменить параметры навигации слишком много.