С версии v4 библиотека D3 была полностью переработана с точки зрения
архитектуры. До этого D3 представлял собой единый монолитный пакет, где
большинство возможностей были связаны через глобальный объект
d3. Начиная с v4 произошёл переход к набору независимых
ES-модулей.
Ключевые изменения v4:
1. Полная модульность Каждый функциональный блок был выделен в отдельный пакет:
d3-selectiond3-scaled3-axisd3-shaped3-forced3-geoТакой подход позволил подключать только нужные части библиотеки, улучшая tree-shaking и снижая размер финального бандла.
2. Переход на ES2015 Кодовая база была переписана с использованием современного стандарта Jav * aScript:
import/export вместо глобального d33. Переработка API Многие методы были унифицированы:
4. Улучшенная система географии Модуль
d3-geo получил переработку проекций и более точную работу с
картографическими данными:
geoPath5. Новая система force simulation Модуль
d3-force был значительно переработан:
Версия v5 сосредоточилась на модернизации работы с асинхронными данными и упрощении потоков загрузки данных.
1. Переход на Promise-based API Основное изменение —
отказ от d3-queue и переход к стандартным промисам:
d3.json, d3.csv, d3.tsv стали
возвращать PromiseЭто сделало загрузку данных более совместимой с современным Jav * aScript:
async/await.then()2. Замена d3-request на d3-fetch Модуль загрузки данных был полностью переработан:
3. Улучшение работы с данными Модуль
d3-dsv получил стабильную основу:
4. Стабилизация модулей v4 v5 не вносила радикальных архитектурных изменений, но закрепила модульную структуру:
Версия v6 (2020) стала одной из наиболее значимых с точки зрения изменения модели взаимодействия с событиями и асинхронностью.
1. Изменение модели событий Ключевое изменение —
отказ от глобального d3.event.
Ранее (v4–v5):
d3.eventВ v6:
selection.on("click", (event, d) => {
console.log(event, d);
});
Это изменение привело к:
2. Усиление строгой типизации поведения Поведение обработчиков событий стало более предсказуемым:
3. Обновление d3-fetch Добавлена поддержка современных возможностей Fetch API:
AbortController4. Улучшения в d3-transition Механизм переходов получил доработки:
5. Очистка устаревшего API В v6 были удалены или помечены как устаревшие части API:
Версия v7 (2022) не изменила архитектуру радикально, но закрепила подходы v6 и сфокусировалась на стабильности, типизации и совместимости.
1. Стабилизация событийной модели Модель передачи событий, введённая в v6, была закреплена:
(event, datum)Это стало финальной точкой перехода от старой модели v3–v5.
2. Улучшение TypeScript-совместимости Значительное внимание уделено типам:
Это усилило использование D3 в крупных инженерных проектах.
3. Очистка и удаление устаревших частей Удалены или окончательно закреплены deprecated-функции:
4. Улучшения производительности Оптимизации затронули:
d3-selection (быстрее обработка DOM-цепочек)d3-scale (оптимизация вычислений домена и
диапазона)d3-array (ускорение агрегаций и статистических
функций)5. Поддержка современных браузеров Сдвиг фокуса в сторону современных стандартов:
Модульность
Асинхронность
События
d3.eventАрхитектура API
Производительность и масштабируемость
С v4 по v7 прослеживается переход от монолитного инструмента визуализации к набору специализированных, независимых модулей с акцентом на интеграцию в современный JavaScript-стек.
Основные направления развития: