正射投影を使用してマップを作成しましたが、回転がスムーズではないため (6 ~ 7 FPS 程度)、パフォーマンスを改善しようとしています。
topojsonファイル(world-100m)で構築した世界地図です。country とやり取りして色付けする必要があるため、countries と同じ数の svg:path が存在します。
ロード後、 d3.timer を使用して自動回転機能を起動しました:
autoRotate = () =>
@start_time = Date.now() # Store the current time (used by automatic rotation)
d3.timer () =>
dt = Date.now() - @start_time
if @stopRotation or dt > @config.autoRotationDuration
true
else
@currentRotation[0] = @currentRotation[0] - @config.autoRotationSpeed
@projection.rotate @currentRotation
redrawPathsOnRotationOrScale(@currentRotation, @projection.scale())
false
redrawPathsOnRotationOrScale = (rotation, scale, duration = 1) =>
@currentRotation = rotation
@projection
.rotate(@currentRotation)
.scale(scale)
@groupPaths.selectAll("path")
.attr("d", path)
なぜ遅いのかを理解するために、Chrome でプロファイル レコードを作成しました。結果は次のとおりです。
Animation Frame Firedが遅い部分のようですが、それが何であるかはよくわかりません。それを開くと、2 つの GC イベント (ガベージ コレクター ?) がありますが、周りには何もありません... この 90 ミリ秒の間に何が起こっているか分かりますか?
パフォーマンスを改善するためのヒントは大歓迎です:-)
よろしくお願いします!
ちなみにこんな感じです。