← Všechny projekty
Webová aplikace

PerfectSizeMe - lokální optimalizace obrázků

Nástroj, který pomocí WebAssembly komprimuje obrázky přímo v prohlížeči a neposílá je na server.

KategorieWebová aplikace
Aktualizováno26. 01. 2026
RepozitářSource code is not publicly available
Technologie
Next.jsWebAssemblyWeb WorkersComlinkTailwind CSSTypeScript

Přehled

Application Interface

Většina online kompresorů nejprve nahraje soubor na vzdálený server. PerfectSizeMe jej místo toho zpracuje v prohlížeči pomocí WebAssembly (WASM).

Uživatel může vložit celou dávku obrázků, zvolit způsob komprese a porovnat výsledek. Soubory neopustí zařízení a aplikace funguje i bez internetového připojení.

Hlavní funkce

Results View

WebAssembly a lokální zpracování

Jádro aplikace obchází tradiční zpracování na serveru. Využívá předkompilované WASM binárky pro spouštění kompresních algoritmů přímo v paměti prohlížeče.

  • Nulová latence: Odpadají časy pro nahrávání a stahování; velké dávky zpracuje tak rychle, jak to dovolí lokální CPU.
  • Soukromí: Aplikace neposílá data souborů do API, funguje offline a data zůstávají u uživatele.

Paralelní architektura s workery

Aby UI nezamrzalo při náročných výpočtech, implementoval jsem vlastní systém Worker Pool.

  • Dynamická souběžnost: Aplikace detekuje počet hardwarových vláken (např. 4 jádra na desktopu, 1 na mobilu) a spustí optimální počet dedikovaných Web Workerů.
  • Load balancing: Frontový systém efektivně distribuuje úlohy mezi dostupné workery, aby nedocházelo k pádu paměti na slabších zařízeních.

Správa stavu

Zpracování rychlých aktualizací z více paralelních workerů vyžadovalo sofistikovanou architekturu React stavu.

  • Atomické aktualizace: Funkcionální aktualizace stavu zabraňují race conditions při simultánním dokončení více obrázků.
  • Detailní zpětná vazba: Systém „Heartbeat" sub-stavů (např. Ve frontěWASM EngineRendering) udržuje UI responzivní a uživatele informované o přesném průběhu.
  • Timeout: Systém automaticky přeskočí soubory zpracovávané déle než 60 sekund. Jeden poškozený soubor tak nezablokuje celou dávku.

Processing View

Nástroje pro porovnání

Aplikace obsahuje detailní sadu nástrojů pro kontrolu kvality.

  • „Blink" porovnání: Vedle standardního posuvníku lze podržením přepínat mezi oběma verzemi a hledat artefakty komprese.
  • Prevence vizuálních posunů: Layoutové skoky při přepínání obrázků jsou eliminovány předmontováním pohledů a správou viditelnosti přes CSS místo odmontovávání z DOM.

Comparison View

Použité technologie

  • Frontend: Next.js 16 (App Router)
  • Jádro: WebAssembly (WASM), Web Workers (Comlink)
  • Stylování: Tailwind CSS, Lucide Icons
  • Utility: JSZip pro hromadné stahování, Canvas API pro dynamická pozadí