JavaScript kód tárolása PNG-ben
Eredetileg csak blogmarkként gondoltam hivatkozni Jacob Sedelin elképesztő ötletére, de nem bírtam megállni, hogy ne mutassam be néhány szó erejéig ezt a kísérleti fogást. Az erősen a JavaScriptre támaszkodó felületek kiszolgáló és ügyfél közötti adatátvitel csökkentése érdekében több megoldás is alkalmazható, ezek tárházát bővíti az alábbi elgondolás. Jacob a szerzője JavaScript alapú Super Mariónak, ott vetette először be ezt a kódtömörítésen alapuló technikát.
Az ötlet lényege, hogy a JavaScript kódot – példának okáért vegyük a Jacob által említett Prototype kódtárat – képbe ágyazva küldjük le a kliensnek. A használt képformátum lehetőleg legyen veszteségmentesen tömöríthető, erre a célra a szerző a 8 bites PNG formátumot találta az ideálisnak. A kép előállítása során az egyes képpontokat a JS kód karaktereinek ASCII értéke határozza meg. A kreált képet a böngészőben betöltjük egy
A Prototype függvénytár esetében (
Az elgondolásnak több sebezhető pontja is van. Egyrészt a megoldás alkalmazhatósága a
■ Az ötlet lényege, hogy a JavaScript kódot – példának okáért vegyük a Jacob által említett Prototype kódtárat – képbe ágyazva küldjük le a kliensnek. A használt képformátum lehetőleg legyen veszteségmentesen tömöríthető, erre a célra a szerző a 8 bites PNG formátumot találta az ideálisnak. A kép előállítása során az egyes képpontokat a JS kód karaktereinek ASCII értéke határozza meg. A kreált képet a böngészőben betöltjük egy
canvas
elembe, a pixeleket visszaolvassuk, a kapott sztringet pedig kiértékeljük.Prototype kódtár PNG-be ágyazva
A Prototype függvénytár esetében (
prototype-1.6.0.2.js
) az eredeti 123 KB-os méret PNG-ként tárolva annak csupán 24%-a, mintegy 30 KB. Érdekességképpen a korábban már bemutatott YUI Compressor (obfuszkálással együtt) gzippelve ugyanezt a kódmennyiséget 22 KB-ra tömörítette.Az elgondolásnak több sebezhető pontja is van. Egyrészt a megoldás alkalmazhatósága a
canvas
elem miatt leszűkül az azt támogató motorok körére, másfelől nagyobb kódtárak esetén a kép kirajzolása és beolvasása a kliensre jelentős terhelést dobhat, így inkább csak gondolatébresztő Jacob írása, mint élesen bevethető technika.
Hány százaléka?
22K obfuszkált, gzippelt kód
Az ötlet nem új...
http://www.phpconf.hu/2003/5kcompo.php/Gorcso/csongor
Szteganográfia
[Off]
[off] - nem kód :-)
szintén off
GZIP?
Megint feltaláljuk a spanyolviaszt, csak egy sokkal bonyolultabb módszerrel...
letöltés
Ahogy a postban is van, nem cél a gzip kiváltása, csupán egy érdekes eszközt mutat be, amiről tudni nem árt...
Mire a felháborodás?
Nem felháborodás
Azt meg nem láttam, hol írta, hogy kissebb, lenne, mint a gzip-nél jobb eredmények (lehet az én figyelmem kerülte el), viszont azt láttam, hogy van más is, aki úgy gondolja, hogy vicces, de haszna nincs és még rosszabb is.
Sajnálom, hogy probléma az, hogy nem látok fantáziát a dologban sem most, sem a jövőben. A javascript egy lassú nyelv, képfeldolgozás szintén nem egy gyors dolog. Ha a kettőt egyesíteni próbáljuk abból csak egy még lassabb valami jön ki. És akárhova is fognak gyorsulni a processzorok, nem úgy tűnik, hogy ez jelentősen változna a jövőben.
Ennek tükrében nem értem a nagy felhajtást körülötte, mert az eredeti célját (gyorsabb oldalletöltés) nagyon nem teljesíti. Hiába érdekes, ha gyakorlati haszna nincs.
Mea culpa
Szerintem senki sem gondolja, hogy ezzel bármit is lehet kezdeni, egyszerűen csak ötletes és vicces megoldás.
tetszik