IE не регистрирует все нажатия клавиш в тяжелом приложении JS - PullRequest
0 голосов
/ 30 июня 2011

Я работаю над приложением, которое в значительной степени JS, и я заметил, что при наборе текста в текстовых полях IE8 и IE7 (еще не виденных в IE9), кажется, случайным образом останавливается на доли секунды и не регистрирует нажатие клавиши.Кажется, он не связан с конкретным символом или длиной строки.Я думаю, что это происходит чаще, если я набираю быстрее.

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

Используя Process Explorer, я заметил, что приложение увеличивает использование оперативной памяти IE до 165 МБ, и, в то время как загрузка ЦП увеличивается с 4% до 10%.

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

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

(редактировать) Я протестировал приложение в Firefox 3.6 и Chrome, и ни у одного из них не возникло этой проблемы.

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Я бы проверил, работает ли JavaScript при наборе текста в текстовом поле.

Самый простой способ, который приходит на ум, - это использовать Firebug в Firefox с опцией Break On Next ( посмотреть на изображение, если вы не можете его найти ).

Затем, когда вы сосредоточитесь на текстовом поле и начнете печатать, отладчик должен появиться в вызываемой функции.!

1 голос
/ 30 июня 2011

Если вы подозреваете, что обработка JS, то вы должны увидеть значительную разницу между производительностью приложения в IE7 или 8 и IE9 (так как производительность JS в IE9 существенно ускорилась). Вы уже видите существенную разницу в FF и Chrome, которая поддерживает это как проблему с производительностью JS.

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

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

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