Így működik az oCompress
Mi történik, amikor behúzol egy fájlt, hogyan ellenőrizheted, hogy semmit sem töltünk fel, és mit jelent valójában a veszteségmentes és a veszteséges tömörítés.
Röviden
Amikor megnyitsz egy eszközoldalt, a böngésződ letölti az oldalt és egy kis programot, a tömörítőt. Amikor hozzáadsz egy fájlt, a böngésző beolvassa, a tömörítő a saját processzorodon feldolgozza, az eredményt pedig letöltésként visszakapod. A fájl egyetlen pillanatra sem kerül a hálózatra. Az egész folyamat így néz ki:
- Betöltés. Először az oldal és az eszköz felülete töltődik be. Egy fájltípus motorja (képek, videó és hang, vagy dokumentumok) csak akkor töltődik le, amikor hozzáadsz egy megfelelő fájlt, így soha nem töltesz le olyan kódot, amelyet nem használsz.
- Beolvasás. A böngésződ pontosan a kiválasztott fájlokhoz ad hozzáférést az oldalnak, az eszközöd semmi máshoz.
- Tömörítés. A munka egy Web Workerben, a böngésző egy háttérszálán fut, így az oldal reszponzív marad, és bármikor megszakíthatod.
- Mentés. A tömörített fájl a memóriában jön létre (a nagy videók a böngésző privát tárhelyén), és a böngésződ szokásos letöltésével mentődik, egyenként vagy ZIP-ben.
Mi fut a böngésződben?
A modern böngészők a WebAssembly segítségével közel natív sebességgel futtatnak lefordított kódot, és egy WebCodecs nevű felületen keresztül hozzáférést adnak a weboldalaknak az eszköz hardveres videókódolóihoz. Az oCompress mindkettőt használja:
- Képek: JPEG-hez MozJPEG, PNG-hez OxiPNG és egy palettakvantáló, a Google libwebp könyvtárának WebP-kódolója, AVIF-hez libavif, SVG-hez SVGO, GIF-hez és TIFF-hez pedig külön dekóderek és kódolók. A JPEG-, PNG-, WebP- és AVIF-kodekek WebAssemblyre vannak fordítva.
- Videó és hang: WebCodecs a Mediabunny könyvtárral, amely az olyan konténereket olvassa és írja, mint az MP4 és a WebM. A kódolás – ahol elérhető – a grafikus chiped hardveres kódolóját használja, ezért lehet gyors még böngészőben is. Az MP3-fájlokat a LAME, a FLAC-fájlokat a libFLAC kódoló írja; mindkettő WebAssemblyre van fordítva, és csak szükség esetén töltődik be.
- Dokumentumok: nyílt forráskódú PDF- és ZIP-könyvtárakra épülő saját kódunk nyitja meg a PDF- és Office-fájlokat, a képkodekekkel újratömöríti a bennük lévő képeket, és új fájlt ír.
Minden általunk szállított könyvtár nyílt forráskódú: a legtöbb megengedő licenc alatt, mint az MIT, a BSD és az Apache 2.0, a Mediabunny az MPL 2.0, a LAME MP3-kódoló pedig az LGPL alatt, különálló, cserélhető fájlként. Lásd a könyvtárak listáját verziókkal és licencekkel.
Így ellenőrizheted, hogy semmit sem töltünk fel
Nem kell szavunkra hagyatkoznod. Két egyszerű teszt:
- Válj le a hálózatról. Nyiss meg egy eszközoldalt, tömöríts egy fájlt, hogy a motor betöltődjön, majd kapcsold ki a Wi-Fit vagy a mobiladatot, és tömöríts egy másik, azonos típusú fájlt. Működik, mert semmihez sem kell hálózat.
- Figyeld a hálózati forgalmat. A Chrome-ban, az Edge-ben vagy a Firefoxban nyomd meg az F12 billentyűt, nyisd meg a Hálózat lapot, és tömöríts egy fájlt. Látni fogod, ahogy a tömörítő kódja betöltődik az oldalunkról, valamint az analitikai és a reklámkéréseket, de egyetlen olyan kérést sem, amely a fájlodat vinné. Egy 10 MB-os fotó 10 MB-os feltöltésként jelenne meg; ilyen nincs.
Az oldal névtelen használati eseményeket küld a Google Analyticsnek, például hogy „tömörítettek egy néhány megabájtos JPG-t”. Ezek az események az eszközt, a fájltípust, valamint a méretet, a megtakarítást és a feldolgozási időt tartalmazzák durva tartományokban, a fájl nevét vagy tartalmát soha.
Veszteségmentes tömörítés: ugyanaz a tartalom, kevesebb bájt
A veszteségmentes tömörítés megkeresi a redundanciát – azt, ami többször van tárolva, vagy ami megjósolható –, és tömörebben írja le. A dekódolás pontosan visszafordítja a folyamatot. Szinte minden veszteségmentes formátumban három ötlet jelenik meg:
- Jóslás. Egy kép szomszédos pixelei vagy egy hangfelvétel egymást követő mintái általában hasonlók. Ha a teljes érték helyett csak a jóslattól való kis eltérést tároljuk, többnyire nullához közeli számok maradnak. A PNG-szűrők és a FLAC lineáris prediktora így működik.
- Ismétlődés. Az ismétlődő sorozatokat egy rövid, a korábbi példányra mutató hivatkozás helyettesíti. Ez a DEFLATE LZ77-része, amelyet a ZIP, a PNG és az Office-fájlok használnak.
- Entrópiakódolás. A gyakori értékek rövid, a ritkák hosszú kódot kapnak (Huffman- vagy aritmetikai kódolás).
A veszteségmentes tömörítésnek természetes határa van: a véletlen zaj nem jósolható meg, így egy szemcsés fotó vagy egy zajos felvétel veszteség nélkül soha nem zsugorodik sokat. Ezért szinte semmit sem spórol egy már tömörített fájl – például egy ZIP-ben lévő JPEG – tömörítése sem.
Veszteséges tömörítés: elhagyni azt, ami nem fog hiányozni
A veszteséges kodekek tovább mennek: elhagyják azokat az információkat, amelyeket az emberi szem és fül alig érzékel. A JPEG és a WebP a színt kisebb felbontásban tárolja, mint a fényességet, és lekerekíti a finom, magas frekvenciájú részleteket. Az MP3, az AAC és az Opus elhagyja a hangosabbak által elfedett hangokat. Az olyan videókodekek, mint a H.264, időnként eltárolnak egy teljes képet, közöttük pedig főleg a mozgást és a változásokat.
A minőség- vagy bitráta-beállítás dönti el, mennyi vész el. Mérsékelt beállításokkal a veszteség nagyon nehezen vehető észre; ha túl messzire mész, megjelennek a jellegzetes hibák: kockák és fényudvarok a képeken, fémes vagy víz alatti hangzás a hangban, elkenődés a gyors videójelenetekben.
Mit ígérnek az eszközök, és mit nem?
- Soha nem kapsz nagyobb fájlt. Ha az eredmény nem kisebb, az eszköz az eredetit adja vissza, és jelzi, hogy már optimális.
- A dokumentumok és a hangfájlok ugyanarra a fájlra és beállításokra azonos bájtokat adnak; a hardveres videókódolók futtatásonként néhány bájttal eltérhetnek.
- A dokumentumokban a szöveg szöveg marad; az oldalakból soha nem lesz kép.
- A képek metaadatait, például a GPS-helyadatot alapértelmezés szerint eltávolítjuk, a színprofilt és az elforgatást viszont megtartjuk. A videók metaadatai, például a hely, az eszköz és a dátumok szintén alapértelmezés szerint törlődnek; a hangfájlok megtartják címkéiket és borítóképüket, hacsak ezt ki nem kapcsolod.
Amit nem ígérhetünk, az egy adott százalék. A megtakarítás teljes mértékben attól függ, hogyan készült a fájl: egy telefonos fotóban vagy egy szkennelt PDF-ben általában bőven van tartalék, egy már optimalizált fájlban kevés. Az eszköz minden fájlnál mutatja a pontos méretet előtte és utána.
A böngészős tömörítés korlátai
Egy böngészőlap korlátozott memóriájú homokozó, és ez szabja meg a gyakorlatban elérhető határokat. Az eszköz legfeljebb 200 MB-os és 100 megapixeles képeket, 300 MB-os PDF- és Office-fájlokat, valamint számítógépen legfeljebb 4 GB-os (telefonon 1 GB-os) videókat és hangfájlokat fogad, bár a hosszú 4K-s videók így sem feltétlenül férnek bele egy lap memóriájába. A sebesség a hardveredtől függ: tesztjeinkben egy gyors windowsos PC-n a Chrome-ban egy perc 1080p-s videó kb. 20 másodpercig, egy 24 megapixeles fotó kb. 2,5 másodpercig tartott; a telefonok sokkal lassabbak lehetnek. A videóhoz és a legtöbb hangkonvertáláshoz WebCodecs kell, amelyet a Chrome, az Edge és az Opera aktuális verziói, valamint a Firefox 130+ és a Safari 26+ biztosít; a WAV és az AIFF nélküle is MP3, FLAC vagy WAV formátumúvá alakítható.
Néhány formátumhoz egyáltalán nincs dekóder a böngészőkben, ilyen a WMA, az AVI és a WMV, a régi bináris Office-fájlok pedig nem írhatók újra biztonságosan. Ezeknél az eszköz elmagyarázza a lehetőségeket, ahelyett hogy egy esetleg sérült fájlt készítene. Ha egy feladat túl nagy egy böngészőnek, egy asztali program – videóhoz a HandBrake, dokumentumokhoz a LibreOffice – a tisztességes javaslat.