私はRaphaelJSを使用してIE8のいくつかのパフォーマンスの問題をデバッグしています。ラファエルの最大1000個の要素とテキストノードからグラフを作成しています。特に、1つのグラフがレンダリング時に問題を引き起こしています。IE9では、レンダリングするマシンに応じて2〜7秒かかり、IE8では1分以上かかります。
あなたはここで問題のウェブサイトを見ることができます。3番目のグラフです(クリックしてください)。
基本的に、データの各ポイントの要素を作成し、それらをラファエルキャンバスに描画します。
私はIEDeveloperToolsプロファイラーを使用し、それが両方から呼び出された関数setFillAndStroke()
であり、要素の塗りつぶし、ストローク、スタイル、およびその他のいくつかの設定を変更したときに呼び出されることを確認しました。関数はの犯人です。attr()
text()
getBoundingRect()
setFillAndStroke()
これがプロファイラー出力のスクリーンショットです
私の研究では、IE8で問題を抱えている人々に出くわしましattr()
たtext()
。
だからいくつかの質問:
- Raphael要素に「デフォルト」の塗りと線を設定して、その塗りと線で作成できるようにすることはできますか?これにより、への呼び出しが削除され
getClientBoundingRect()
ます。ドキュメントでそのような関数を探してみましたが、うまくいきませんでした。 - これは、グラフのルックアンドフィールを変更せずに解決できるものですか?
- これがコードだけでできることである場合、RaphaelJSを変更せずにそれを行うことは可能ですか?
- 他のアイデアはありますか?
誰かが古いバージョンのRaphaelで同様の問題を抱えているようで、明らかに2.0.0で修正されましたが、バージョン2.0.2を使用しています(2.1.0でも同じ問題があることがテストされています)。
これがgithubの問題レポートです。