Свой движок на WebGL2. 11 KB против 60 KB у lightweight-charts, загрузка в 40× быстрее, рендер на GPU вместо Canvas2D. Не на словах — прогони бенчмарк ниже.
01 Живой бенчмарк
Как Speedtest: сначала гоняем график lightweight-charts, потом наш. Один и тот же стресс — пан большого окна свечей каждый кадр. FPS считается в реальном времени по кадрам твоего браузера.
Стресс: 80 000 свечей в памяти, видимое окно ~4 000 свечей, непрерывный пан. lightweight-charts перерисовывает все видимые свечи на CPU каждый кадр; zerox-lite — один инстансированный вызов на GPU. FPS = по интервалам кадров (rAF), потолок = частота твоего дисплея.
02 Вес
Что реально качает клиент, gzip. Меньше — лучше.
03 Скорость · Apple M5, ANGLE Metal
Замеры на одной машине, синхронные, не оценки. База — 50 000 свечей.
04 Почему быстрее
Каждый кадр процессор обходит все видимые свечи и рисует их по одной на 2D-канвасе. Больше свечей — больше работы CPU — ниже FPS.
OHLC заливается в GPU один раз. Пан/зум — это смена одной uniform-переменной, рисование — один инстансированный вызов. Миллион свечей или сотня — стоимость кадра одна.
05 Функционал
lite повторяет весь набор lightweight-charts и добавляет то, что Canvas2D не вытягивает.
| параметр | 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+ |
| Типы серий | 5 candle·line·area·baseline·hist | 6 | 5+ | все |
| Толстые AA-линии | ● | ● | ● | ● |
| Панели · неск. шкал | ● panes+L/R | ● (v5) | ● | ● |
| Маркеры · price-lines · watermark | ● ● ● | ● ● ● | ● ● ● | ● ● ● |
| Встроенные индикаторы | opt-in | — | ~50 | 100+ |
| Инструменты рисования | — | — | ● | ● |
| Real-time | ● O(1) | ● деградирует | ● O(1) | ● |
| 1M свечей плавно | ● 120 fps | — | ● 120 fps | ◐ |
| Лицензия | своё / открыто | Apache-2.0 | своё | проприетарная |
Полная таблица со всеми параметрами и оговорками → /table.html
06 Два продукта — один движок