chart.update()Метод chart.update() является центральным механизмом
перерисовки и синхронизации состояния диаграммы с изменёнными данными
или конфигурацией. Любые изменения, внесённые в объект
data, options, наборы данных
(datasets) или отдельные элементы графика, не применяются
автоматически — они вступают в силу только после явного вызова
обновления.
Основная задача метода заключается в том, чтобы:
chart.update(mode);
Параметр mode определяет поведение обновления: будет ли
применена анимация, как обрабатывать изменения и какие части графика
пересчитывать.
При вызове chart.update() происходит последовательная
цепочка операций:
dirty flags)В зависимости от режима часть этапов может быть пропущена или упрощена.
update mode)undefined или
defaultЕсли режим не указан, используется стандартное поведение, определённое в конфигурации графика:
chart.update();
Характеристики:
options.animation
включена);nonechart.update('none');
Особенности режима:
Типичные сценарии применения:
resizechart.update('resize');
Этот режим используется, когда необходимо пересчитать размеры графика без глубокого пересчёта данных.
Поведение:
Применяется при:
activechart.update('active');
Режим активного обновления фокусируется на взаимодействии пользователя с графиком.
Характеристики:
Используется при:
resetchart.update('reset');
Режим сбрасывает анимационное состояние элементов и запускает их заново.
Поведение:
Применяется:
В некоторых конфигурациях Chart.js поддерживает поведенческие режимы, связанные с появлением и исчезновением элементов:
showhideupdate() на
datasetsИзменение данных без вызова update() не приводит к
визуальному обновлению.
Пример:
chart.data.datasets[0].data.push(42);
chart.update();
При вызове обновления происходит:
В сложных сценариях можно изменять только часть структуры:
chart.data.labels.push('New label');
chart.data.datasets[1].data[3] = 100;
chart.update('none');
Такой подход снижает нагрузку при частых обновлениях.
update() на
optionsИзменение конфигурации также требует вызова обновления:
chart.options.scales.x.title.text = 'Новый заголовок';
chart.update();
Обновление может затрагивать:
Некоторые изменения требуют полного пересчёта layout, особенно при изменении:
По умолчанию update() запускает анимацию перехода между
состояниями.
chart.update('none'); // без анимации
или через конфигурацию:
options: {
animation: {
duration: 1000
}
}
При обновлении Chart.js интерполирует значения:
При работе с потоковыми данными важно учитывать производительность.
1. Использование none
chart.update('none');
Минимизирует перерасчёт анимации.
2. Группировка изменений
chart.data.datasets[0].data.push(10);
chart.data.datasets[0].data.push(20);
chart.data.datasets[0].data.push(30);
chart.update('none');
3. Ограничение объёма данных
Удаление старых значений:
if (chart.data.datasets[0].data.length > 50) {
chart.data.datasets[0].data.shift();
}
chart.update('none');
При вызове chart.update() происходит взаимодействие
нескольких подсистем:
Каждый режим обновления влияет на глубину перерасчёта этих компонентов.
| Режим | Анимация | Пересчёт layout | Производительность | Назначение |
|---|---|---|---|---|
| default | да | полный | средняя | стандартные изменения |
| none | нет | полный | высокая | частые обновления |
| resize | частично | да | средняя | изменение размеров |
| active | нет/частично | частичный | высокая | интерактивность |
| reset | да | полный | средняя | сброс состояния |
Частые вызовы chart.update() могут приводить к:
Для предотвращения используется:
Пример:
let pending = false;
function safeUpdate(chart) {
if (pending) return;
pending = true;
requestAnimationFrame(() => {
chart.update('none');
pending = false;
});
}
Добавление нового набора данных требует полного пересчёта структуры:
chart.data.datasets.push({
label: 'Новый набор',
data: [10, 20, 30]
});
chart.update();
При этом:
Метод chart.update() является точкой синхронизации
состояния графика с визуальным представлением. Режим обновления
определяет глубину перерасчёта, влияние на анимации и
производительность, позволяя адаптировать поведение библиотеки под
конкретный сценарий — от редких интерактивных изменений до
высокочастотных потоковых обновлений данных.