Свой движок на WebGL2. 11 KB против 60 KB у lightweight-charts, загрузка в 40× быстрее, рендер на GPU вместо Canvas2D. Не на словах — прогони бенчмарк ниже.
01 Живой бенчмарк
Оба движка раз за разом перерисовывают один и тот же график с нуля. Спидометр показывает, сколько полных перерисовок в секунду каждый успевает на твоём железе. Стрелки — вживую на твоей видеокарте.
Кадр = полная перерисовка графика с нуля (setData + отрисовка 50 000 свечей). Спидометр = сколько таких кадров в секунду движок генерит на твоём железе (1000 ÷ время кадра, без потолка); красная зона за 120 — что дисплей уже не показывает; внизу — реальные fps на экране. Нагрузка идентична для обоих. zerox-lite заливает свечи в GPU одним вызовом → тысячи перерисовок/сек; lightweight-charts перестраивает Canvas2D на CPU → десятки. Честно: это сценарий переключения символа/таймфрейма/реплея. На статике (пан) и на инкрементальном тике в одну свечу lightweight-charts тоже быстр — там мы не выигрываем кратно. Кратный разрыв — именно на полной перерисовке и холодной загрузке.
02 Вес
Что реально качает клиент, gzip. Меньше — лучше.
03 Скорость · Apple M5, ANGLE Metal
Замеры на одной машине, синхронные, не оценки. База — 50 000 свечей.
04 Почему быстрее
Статичный график отрисован умно (даунсэмплинг). Но каждое живое обновление цены пересчитывает и перерисовывает серию на CPU — чем длиннее история, тем дороже один тик. На потоке котировок захлёбывается.
OHLC живёт в GPU. Обновление свечи — точечная запись в буфер (bufferSubData), пан/зум — смена одной 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 Два продукта — один движок