Я отлаживаю некоторые проблемы с производительностью в IE8 с помощью RaphaelJS. Мы строим графики из ~ 1000 элементов и текстовых узлов в Raphael и, в частности, один график вызывает у нас проблемы при рендеринге. В IE9 это занимает 2-7 секунд в зависимости от машины для рендеринга, а в IE8 1 минута плюс.
Вы можете увидеть соответствующий веб-сайт здесь . Это третий график (щелкните по нему).
По сути, мы создаем элементы для каждой точки данных и рисуем их на холсте Рафаэля.
Я использовал профилировщик IE Developer Tools и определил, что это функция setFillAndStroke()
, вызываемая из attr()
и text()
, когда мы меняем заливку, обводку, стиль и некоторые другие настройки элементов. Функция getBoundingRect()
является виновником setFillAndStroke()
.
Вот скриншот вывода профилировщика
В моем исследовании я встречал людей, имеющих проблемы с IE8, attr()
и text()
, например,
Итак, несколько вопросов:
- Можете ли вы установить заливку и обводку по умолчанию для элементов Raphael, чтобы они создавались с этой заливкой и обводкой? Это должно удалить звонок на
getClientBoundingRect()
. Я пытался найти такую функцию в документах, но не повезло.
- Это то, что мы можем решить без изменения внешнего вида графиков?
- Если это то, что мы можем сделать только с помощью кода, возможно ли это сделать без изменения RaphaelJS?
- Есть еще идеи?
У кого-то, похоже, была похожая проблема в более старых версиях Raphael, по-видимому, исправленная в 2.0.0, но мы используем версию 2.0.2 (тестировалась на ту же проблему в 2.1.0).
Вот отчет о проблеме на github .