График принудительной компоновки D3 вызывает замедление в браузере Firefox

У меня есть динамический график силы, который запускается каждые 3 минуты (используя setInterval, я вызываю обновление, запускайте в указанном ниже порядке)

  • viz.update(); //attach new data from server like viz.path.data(data.links),
  • viz.nodes.data(..)
  • viz.enter(); // viz.path.enter().append("path")
  • viz.exit(); // path.exit().remove()
  • force.start();

когда я оставляю браузер открытым на какое-то время, браузер замедляется, и узлы медленно перемещаются, когда я их перетаскиваю. Я что-то пропустил здесь..

Помощь приветствуется. Спасибо.


person user2300875    schedule 24.04.2013    source источник
comment
Можете ли вы опубликовать рабочую скрипку, чтобы помочь вам?   -  person Pablo Navarro    schedule 24.04.2013
comment
О каком количестве узлов идет речь? Если вы постоянно получаете новые узлы, вы довольно быстро столкнетесь с различными ограничениями производительности.   -  person nrabinowitz    schedule 24.04.2013
comment
У вас такая же проблема с Chrome/Chromium? Я обнаружил, что d3.js работает там намного лучше (за счет использования большего количества памяти)   -  person Marjancek    schedule 24.04.2013
comment
Количество узлов приближается к 100. Кроме того, я не буду постоянно получать новые узлы. В первом случае, если это 90, при следующей перезагрузке оно будет варьироваться от 90 до 100.   -  person user2300875    schedule 24.04.2013


Ответы (1)


Производительность SVG в Firefox ниже, чем в Webkit/Chrome и IE10.

Тем не менее производительность в Firefox неплохая. Есть несколько вещей, которые вы можете попробовать.

  • Убедитесь, что вы не оставляете неиспользуемых/пустых элементов (например, ‹g›s), и все должным образом очищено. Слишком много элементов быстро убьет вашу производительность.
  • Уменьшите количество узлов, использующих непрозрачность, постарайтесь использовать ее как можно меньше.
  • Уменьшите количество элементов.

Я также сделал одну вещь, но не уверен, что это поможет, - это вызвать force.stop() перед повторным вызовом force.start().

person Drakonen    schedule 24.04.2013
comment
Сейчас я работаю над сложным набором интерактивных графиков с d3 и angular... и все, кроме IE‹=8 и FF, работает отлично. Это плохая группа для FF. - person SgtPooki; 20.11.2013