我用正交投影法制作了一張地圖,我試圖改善性能,因爲旋轉不平滑(大約6-7FPS)。d3.js:正交旋轉優化
這是用topojson文件(world-100m)構建的世界地圖。我需要與國家互動,並將它們着色,所以有像國家那樣多的svg:路徑。
加載我有一個自動旋轉功能後使用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中的個人資料記錄,這裏是結果:
看來動畫幀燃煤是慢的一部分,但我真的不知道它是什麼。而當我打開它時,有2個GC事件(垃圾回收器?),但周圍沒有任何東西......你知道在這90ms期間發生了什麼?
提高性能的任何提示都比歡迎:-)
感謝提前!
順便說一句,它看起來像這樣:
在生成topojson文件的同時添加--simplify-proportion 0.6,將性能從11改進到20 FPS,而不會泄露太多細節。 –