Я работаю над приложением JavaScript для создания простых диаграмм, и у меня есть некоторые проблемы с производительностью в Internet Explorer (версия 8).
Приложение может использоваться для рисования линий на диаграмме (см. Рисунок),Есть два основных обработчика для рисования линии.Событие ONMOUSEUP собирает щелчки пользователя, которые указывают на то, что пользователь хочет разместить точку на линии и начать новый сегмент (строки состоят из нескольких сегментов).
Обработчик ONMOUSEMOVE рисует затемненный сегмент каквизуальная помощь пользователю, когда он рисует линию.
Пожалуйста, обратитесь к этим изображениям для скриншота процесса рисования линии: http://imgur.com/TuueR http://i51.tinypic.com/fxjqf.jpg
Если пользователь щелкает мышью(mousedown), но не освобождает его и вместо этого начинает перетаскивать мышь, IE полностью зависает.Через некоторое время он разморозится и продолжит работу как обычно.
С другой стороны, Chrome отлично справляется с этим (во время операции перетаскивания обработчик MOUSEMOVE выполняет свою работу, и точка помещается только послесобытие ONMOUSEUP срабатывает.
Моя теория состоит в том, что Explorer может быть однопоточным, в этом случае он получает события MOUSEMOVE, но выполняет их только после завершения события ONMOUSEUP (что означает, что по существу ничего не делается длядлительность операции перетаскивания), но я не знаю, как проверить, верно ли это, или как это исправить.
Я провел некоторое профилирование с помощью встроенного в IE8 профилировщика JS и обоих обработчиков.Вызываются обычное количество раз, нет функций, вызываемых тысячи раз, которые могли бы вызвать зависание. Профилировщик заморожен, а IE заморожен и ничего не выводит, пока не разморозится, после чего результаты выглядят так же, как если бы не былодействие замораживания.
РЕДАКТИРОВАТЬ: Вот график временидля инструмента профилирования dynaTrace: http://i51.tinypic.com/348sxty.jpg.