我使用正交投影制作了一张地图,现在我需要提高性能,因为旋转不够流畅(大约6-7FPS)。这是一个使用topojson文件(world-100m)构建的世界地图。我需要与国家进行交互并彩色显示,因此SVG:path与国家数量相同。加载后,我使用启动自动旋转功能:
为了理解为什么速度如此慢,我在Chrome中做了一个性能分析记录,以下是结果:
似乎“Animation Frame Fired”是个慢的过程,但我不太清楚它是什么。当我打开它时,出现了2次GC事件(垃圾回收器?),但周围没有其他信息...您知道这90毫秒内发生了什么吗?
欢迎提供任何改善性能的技巧 :-)
提前感谢!
顺便说一下,它看起来像这样:
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中做了一个性能分析记录,以下是结果:
![Chrome profiling 1/2](https://istack.dev59.com/9urg2.webp)
![Chrome profiling 2/2](https://istack.dev59.com/On9qt.webp)
欢迎提供任何改善性能的技巧 :-)
提前感谢!
顺便说一下,它看起来像这样:
![Map overview](https://istack.dev59.com/CkwtN.webp)