Я сделал карту с использованием орфографической проекции, и я стараюсь улучшить производительность, потому что вращение не является гладким (около 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 Event (сборщик мусора?), Но ничего вокруг ... У вас есть идея, что происходит в течение этого 90 мс?
Любые советы по улучшению производительности более чем приветствуется :-)
Спасибо авансом!
Кстати, это выглядит следующим образом:
Добавление -simplify-ratio 0.6 при создании файла topojson улучшает производительность с 11 до 20 FPS, не теряя много деталей. –