Инструменты4 августа 2026 г., 12:17 МСК🤖 Auto

Reflex XY: Rust-движок для Python-графики, рендерящий 100 млн точек за 0.08 с

Компания Reflex открыла библиотеку XY — высокопроизводительный инструмент для интерактивной 2D-визуализации в Python. Благодаря Rust-ядру и WebGL2, XY рендерит 100 миллионов точек менее чем за 0.1 секунды, что на порядки быстрее Plotly и Matplotlib.

Баннер новости 5031

Проблема масштабирования в Python-графике

Большинство популярных библиотек визуализации в Python (Matplotlib, Plotly) создают отдельный объект отрисовки для каждой строки данных. Это приводит к критическому падению производительности при работе с наборами данных свыше нескольких сотен тысяч точек: замедляется рендеринг, интерактивные элементы (зум, наведение курсора) становятся неюзабельными. Reflex решила эту проблему, перенеся вычислительное ядро на Rust и изменив способ передачи данных в браузер.

Техническая архитектура XY

Библиотека XY (версия 0.0.1, лицензия Apache-2.0) использует следующие ключевые оптимизации:

  • Rust Core: Вычисления и подготовка данных происходят в нативном коде Rust, что исключает узкие места GIL (Global Interpreter Lock) Python.
  • Binary Transport: Вместо передачи тяжелых JSON-структур, в браузер отправляются типизированные бинарные буферы.
  • WebGL2 Rendering: Отрисовка происходит через GPU, что позволяет обрабатывать миллионы маркеров без перегрузки CPU.
  • ColumnStore: Канонические данные хранятся в виде столбцов f64 в Python, сохраняя точность для операций hover и selection, даже если визуализация использует децимацию.

Результаты бенчмарков

Тестирование проводилось на Apple M5 Pro. Измерялось время до момента, когда холст становился стабильным и идентичным в 10 последовательных кадрах. XY демонстрирует практически постоянное время рендеринга независимо от количества точек (от 10 000 до 100 млн), так как отрисовываются только видимые на экране пиксели, а не отдельные маркеры.

Количество точек Reflex XY Matplotlib (WebAgg) Plotly (scattergl)
1M 0.084 s 0.357 s 0.614 s
10M 0.083 s 2.804 s 3.367 s
50M 0.076 s 13.385 s
100M 0.081 s

При этом пиковое потребление памяти Python-процессом для 10 млн точек составляет всего 0.32 GiB у XY, против 0.84 GiB у Matplotlib и 1.86 GiB у Plotly.

Практическое применение и ограничения

XY особенно полезна в областях, где объем данных является главным ограничителем: количественные финансы (тик-данные), геномика (Манхэттенские графики), телеметрия и астрономия. Библиотека поддерживает 14 семейств графиков (scatter, line, histogram, heatmap и др.) и предлагает совместимость с Matplotlib через import xy.pyplot as plt.

Важное замечание: XY находится в стадии early alpha (v0.0.1). Рекомендуется использовать её для внутренних аналитических дашбордов, Jupyter-ноутбуков и исследовательских задач. Для критически важных пользовательских интерфейсов (customer-facing) требуется дополнительное тестирование. Размер экспорта HTML-файла с 10 млн точек составляет всего 258 KiB (против 259 MiB у аналогов).

Как установить

Требования: Python 3.11+. Установка стандартная через pip:

pip install xy

Источник: MarkTechPost ↗