Свой графический движок против обоих продуктов TradingView — lightweight-charts и Charting Library. Вес, скорость, функционал. Все цифры — реальные замеры на Apple M5 (ANGLE Metal), не оценки.
Два продукта — один движок
Один монорепо, две сборки. Lite — минимальный примитив против lightweight-charts. Full — полный терминал против TradingView Charting Library.
Вес бандла
Что реально качает клиент. Ноль рантайм-зависимостей у всех наших сборок.
Наш полный терминал (124 KB) с ~50 индикаторами + рисованием + WebGL — всё ещё легче, чем lightweight-charts двух версий вместе, и в ~25× легче TV Charting Library.
Производительность · Apple M5, ANGLE Metal
Время от вызова setData до первого кадра. Чем больше свечей, тем сильнее разрыв.
zerox-lite грузит и 200k (3.6 мс) и 1M (59 мс) свечей; lightweight-charts на Canvas2D уже на 50k тратит ~49 мс на кадр.
Производительность · Apple M5
База 50 000 свечей. Горячий путь трейдинга — тики в формирующуюся свечу. У lightweight-charts стоимость обновления растёт с размером серии; у нас O(1).
forming-update: 650× · аппенд: 73×. Наш живой путь — bufferSubData O(1) на GPU (не перезаливаем буфер).
Производительность · Apple M5, реальная GPU
Пан/зум по датасету в 1 000 000 свечей. У нас — кадр уходит на GPU инстансированным рисованием; на экране 120 fps (потолок vsync) с запасом в 99%.
| сценарий (1M свечей в памяти) | zerox-lite | наш full | lightweight-charts |
|---|---|---|---|
| пан, видно 300–5000 свечей | 0.1 мс · 120 fps | 0.1–0.6 мс · 120 fps | Canvas2D (CPU) |
| чистый GPU-draw 1M инстансов | 3.8 мс | 3.8 мс | — |
| full-fit весь 1M в один экран | 2.5 мс | 81 мс | — |
| пропускная способность | 262 000 свечей/мс | 262 000 свечей/мс | — |
Пан-fps lightweight-charts не измерить синхронно в headless (rAF замораживается), но рендер у него Canvas2D на CPU — каждая перерисовка пропорциональна числу свечей; наш GPU-инстансинг от этого не зависит.
Функционал
| параметр | zerox-lite | lightweight-charts | zerox-chart full | TV Charting Library |
|---|---|---|---|---|
| Технология рендера | WebGL2 GPU | Canvas2D | WebGL2 GPU | Canvas2D |
| Вес (gzip) | 11 KB | 49–60 KB | 124 KB | ≈3 MB+ |
| Рантайм-зависимости | 0 | 0 | 0 | пакет ассетов |
| Типы серий | 5 candle·line·area·baseline·hist | 6 | 5+ | все |
| Встроенные индикаторы | opt-in (0 в lite) | 0 | ~50 | 100+ |
| Инструменты рисования | — | — | ● тренд/фибо/ганн/фигуры | ● |
| Слой сделок/позиций | маркеры | маркеры | ● GL-слой | ● |
| Маркеры · price-lines | ● ● | ● ● | ● ● | ● ● |
| Crosshair · легенда | ● ● | ● ● | ● ● | ● ● |
| Мультипанель / неск. шкал | ● panes + left/right | ● (v5) | ● | ● |
| Watermark | ● | ● | ● | ● |
| Темизация | ● runtime | ● | ● setTheme | ● |
| Real-time обновление | ● O(1) | ● деградирует | ● O(1) | ● |
| 1M свечей плавно | ● 120 fps | — (Canvas2D) | ● 120 fps | ◐ |
| API-совместимость с LWC | ● drop-in | — | ◐ через createChart | — |
| Лицензия | своё / открыто | Apache-2.0 | своё | проприетарная + agreement |
Методология и честные оговорки