● WebGL2 · замерено на твоей видеокарте

Графики, которые
рвут TradingView

Свой движок на WebGL2. 11 KB против 60 KB у lightweight-charts, загрузка в 40× быстрее, рендер на GPU вместо Canvas2D. Не на словах — прогони бенчмарк ниже.

zerox-lite · WebGL2 · 11 KB
11 KB
вес gzip · в 5.4× легче lightweight-charts
40×
быстрее загрузка 50k свечей
120 fps
пан/зум на 1 000 000 свечей

01 Живой бенчмарк

Прогони сам — на своей видеокарте

Оба движка раз за разом перерисовывают один и тот же график с нуля. Спидометр показывает, сколько полных перерисовок в секунду каждый успевает на твоём железе. Стрелки — вживую на твоей видеокарте.

zerox-lite WebGL2 · 11 KB
VS
глубина истории — больше свечей, больше разрыв
lightweight-charts Canvas2D · 60 KB
zerox-litelightweight-charts

Кадр = полная перерисовка графика с нуля (setData + отрисовка 50 000 свечей). Спидометр = сколько таких кадров в секунду движок генерит на твоём железе (1000 ÷ время кадра, без потолка); красная зона за 120 — что дисплей уже не показывает; внизу — реальные fps на экране. Нагрузка идентична для обоих. zerox-lite заливает свечи в GPU одним вызовом → тысячи перерисовок/сек; lightweight-charts перестраивает Canvas2D на CPU → десятки. Честно: это сценарий переключения символа/таймфрейма/реплея. На статике (пан) и на инкрементальном тике в одну свечу lightweight-charts тоже быстр — там мы не выигрываем кратно. Кратный разрыв — именно на полной перерисовке и холодной загрузке.

02 Вес

В 5.4× легче. Ноль зависимостей.

Что реально качает клиент, gzip. Меньше — лучше.

zerox-liteWebGL2 · наш
11 KB
lightweight-charts 4Canvas2D · TV
49 KB
lightweight-charts 5Canvas2D · TV
60 KB
zerox-chart fullWebGL2 · полный терминал
124 KB
TV Charting LibraryCanvas2D · лицензия
≈3 MB+

03 Скорость · Apple M5, ANGLE Metal

Не «немного быстрее». В разы.

Замеры на одной машине, синхронные, не оценки. База — 50 000 свечей.

загрузка данных
setData 50k свечей
наш 1.2 мс · их 48.6 мс
аппенд нового бара
добавление свечей в реальном времени
наш 278k/с · их 3 820/с
тик в свечу
горячий путь — обновление цены
наш 2.5M/с · их 3 820/с

04 Почему быстрее

GPU против CPU. Вот и всё.

lightweight-charts Canvas2D

Статичный график отрисован умно (даунсэмплинг). Но каждое живое обновление цены пересчитывает и перерисовывает серию на CPU — чем длиннее история, тем дороже один тик. На потоке котировок захлёбывается.

update() = O(размер серии) на CPU

zerox-chart WebGL2

OHLC живёт в GPU. Обновление свечи — точечная запись в буфер (bufferSubData), пан/зум — смена одной uniform. Сколько бар в истории и тиков в секунду — стоимость кадра не меняется.

update() = O(1) на GPU

05 Функционал

Всё, что есть у них — плюс GPU

lite повторяет весь набор lightweight-charts и добавляет то, что Canvas2D не вытягивает.

параметрzerox-litelightweight-chartszerox-chart fullTV Charting Library
РендерWebGL2 GPUCanvas2DWebGL2 GPUCanvas2D
Вес (gzip)11 KB49–60 KB124 KB≈3 MB+
Типы серий5 candle·line·area·baseline·hist65+все
Толстые AA-линии
Панели · неск. шкал● panes+L/R● (v5)
Маркеры · price-lines · watermark● ● ●● ● ●● ● ●● ● ●
Встроенные индикаторыopt-in~50100+
Инструменты рисования
Real-time● O(1)● деградирует● O(1)
1M свечей плавно● 120 fps● 120 fps
Лицензиясвоё / открытоApache-2.0своёпроприетарная

Полная таблица со всеми параметрами и оговорками → /table.html

06 Два продукта — один движок

Каждый бьёт свой класс

zerox-lite

против lightweight-charts
  • 11 KB вес gzip, в 5.4× легче
  • 40× загрузка 50k свечей
  • 73× аппенд баров
  • WebGL2 GPU-рендер против Canvas2D

zerox-chart full

против TV Charting Library
  • 124 KB против нескольких MB
  • ~50 индикаторов + рисование
  • 120 fps на 1M свечей
  • $0 своё, без лицензии