2013-09-24 2 views
2

В настоящее время у меня есть страница с графикой Highcharts около 22, и они могут быть выбраны пользователем пользователем. Каждое взаимодействие фильтра удаляет текущую серию и добавляет новые.Лучшая производительность для обновления многих экземпляров Highcharts по запросу

Я начал с двумя подходами, первым состоял в том, чтобы цикл, который прошел через все сохраненные объекты, например, удаление каждую Серии,

while currentChart.series.length > 0 
    currentChart.series[currentChart.series.length - 1].remove() 

, а затем, после того, как другой цикл, который проходит через массивы для поиска данные фильтра и

currentChart.addSeries 
    name: operatorName 
    data: data 
    type: options.chartType 

но эта реализация оказалась довольно тяжелой.

Затем я осуществил таймаут, чтобы позволить плагину немного дышать и не складывать столько, установив тайм-аут 1 мс между каждым циклом, я получил лучшую производительность и мог видеть анимацию, но это делает его немного вялым. Установка более высокого тайм-аута делает страницу трудной для навигации, и фильтрация изменений будет стека, так как для всего графического обновления потребуется много времени.

ответ

2

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

Я думаю, вы могли бы попробовать удалить серию и добавить новую для каждой диаграммы за раз, вместо того, чтобы удалять все, а затем добавлять все. Я думаю, что это сильно изменит вашу отзывчивость вашей страницы.

chart: { 
     animation: false 
    }, 
    plotOptions: { 
     series: { 
      animation: false 
     } 
    }, 
+0

В этом случае очевидным решением является более efective. Думаю, мне придется работать без анимации, чтобы обеспечить лучший UX. –

+1

wow Я не думал, что анимационная часть заставит мои диаграммы не отображать, спасибо – tinybyte

1
while currentChart.series.length > 0 
    currentChart.series[0].destroy() 

например: http://jsfiddle.net/5B9c7/1/

+0

Предоставление некоторого контекста принесет пользу этому ответу. – Thomas

Смежные вопросы