Výkon
TUIX Core je navrženo pro vysokou propustnost. Zkompilované C jádro zajišťuje renderování, kompozici a vstup, zatímco Python vrstva řídí konfiguraci a orchestraci.
Souhrn benchmarků
Benchmarky měřeny na Windows 10, 12th Gen Intel Core i5-12450HX, 24GB RAM.
| Scénář | Průměrná latence | Operací/s | Max RSS |
|---|---|---|---|
| Start | 302 µs | 3,311 | 3.9 MB |
| Sestavení stromu (10 položek) | 110 µs | 9,126 | 3.9 MB |
| Sestavení stromu (100 položek) | 104 µs | 9,635 | 3.9 MB |
| Sestavení stromu (1000 položek) | 97 µs | 10,309 | 4.0 MB |
| Přerenderování (bez změn) | 10 µs | 96,154 | 3.9 MB |
| Aktualizace obsahu | 134 µs | 7,463 | 3.9 MB |
| Zátěž layoutu (mřížka 10×4) | 1,142 µs | 876 | 4.0 MB |
| Zátěž scrollu (2000 položek) | 112 µs | 8,929 | 4.1 MB |
| Virtuální seznam (100K položek) | 70 µs | 14,388 | 18.3 MB |
Optimalizace renderování
Delta renderování
Renderer zpracovává pouze řádky, které se mezi snímky změnily. Každý řádek je hashován pomocí FNV-1a na surových pixelech (před kvantizací barev). Nezměněné řádky se přeskočí celé — bez kvantizace, bez SGR sekvencí, bez výstupu.
LUT pro kvantizaci barev
Předpočítaná lookup tabulka o velikosti 128KB mapuje RGB565 (65 536 položek) na nejbližší terminálovou barvu v ANSI16, ANSI256 nebo truecolor. LUT se vytvoří jednou při prvním renderu a poté je párování barev O(1) na pixel.
Seskupování SGR
Po sobě jdoucí pixely se shodnou barvou popředí, pozadí a stylovými příznaky se seskupí do jedné SGR (Select Graphic Rendition) escape sekvence. To snižuje množství escape bajtů emitovaných na řádek.
Výstup po blocích
Vyrenderovaný ANSI výstup se akumuluje v 256KB bufferu a flushuje po blocích. To snižuje počet systémových volání write() a zvyšuje propustnost na Windows i POSIX.
Cache ukazatele scén
Hlavní smyčka cachuje ukazatel na aktivní scénu napříč snímky. Názvy scén jsou internované řetězce porovnávané ukazatelem místo hodnoty, takže vyhledání scény na snímek je O(1).
Paměťový profil
TUIX Core má malé paměťové nároky. Základní RSS při startu je přibližně 3,9 MB. Růst paměti je primárně dán počtem pixelů v aktivních bufferech. Plnohodnotný canvas 120×30 využije přibližně 120 × 30 × sizeof(TuixPixel) bajtů.
Srovnání
TUIX Core bylo benchmarkováno proti několika terminal UI frameworkům napříč jazyky:
| Framework | Jazyk | Strom 1000 položek | Přerenderování | Max RSS |
|---|---|---|---|---|
| TUIX.Core | Python/C | 97 µs | 10 µs | 3.9 MB |
| Ratatui | Rust | 125 µs | — | 3.2 MB |
| Bubble Tea | Go | 311 µs | — | 11.2 MB |
| blessed | Node.js | 5,800 µs | 124 µs | 152 MB |
| Ink | Node.js (React) | 3,200 µs | — | 87 MB |
Spouštění benchmarků
# Full benchmark suite (25 scenarios, outputs JSON + CSV)
python tests/benchmarks/full_benchmark.py
# Micro scene benchmark (command buffer execution speed)
python tests/benchmarks/micro_scene_bench.pyPlný benchmark generuje benchmark.json, benchmark_summary.csv a benchmark_frames.csv. Mikro benchmark měří náklady na provedení command bufferu na objekt v mikrosekundách.