A szerző azon állításával nem értek egyet, hogy egyből sprite-ot készítsünk, mert ezt kevésbé tartom hatékonynak több szempontból is:
természetesen egy jó sitebuilder egyből látja, hogy mit és hol kell felvágni, de amíg ennek képességét nem szerezzük meg, addig folyamatosan plusz munkát generálunk magunknak a rossz sprite-ok javítgatásával;
bármikor előfordulhat, hogy módosul a design, és szükséges a sprite némely elemének cseréje – ebben az esetben többlet munkát adunk magunknak versus build/deploy során egy eszközzel automatizáltan készítjük el a sprite-okat;
az utólagos sprite készítés az eddigi gyakorlatokra transzparensen ráépül; a megszokott módon készítjük a stíluslapot, amely majd forgatókönyvként szolgál a sprite készítő eszköz számára.
Szerintem is teljesen megéri a befektett munkát egy ilyen kis eszköz elkészítése. Nálunk is előjött már, hogy jó lenne, csak aztán határidő áldozata lett. Csináltál már ilyet? Tapasztalatok, mire érdemes figyelni?
Többen felvetették kommentben, hogy nem igazán jók a sprite-ok, mert egy 1000×2000px-es sprite ~8Mb-ot foglal memóriából. Ez persze teljesen így van, ezzel nem nagyon lehet vitatkozni, de ugye ha valamit optimalizálunk, akkor valamilyen céllal optimalizálunk. Optimalizálhat az ember ugye sebességre, memória igényre, de a kettő általában nem találkozik, azaz ha valami gyors akkor általában több a memóriaigénye, és ha valaminek kicsi a memóriaigénye, akkor pedig általában lasssú (vagy lassabb).
A képek esetén is pontosan ugyanez a helyzet, ha az ember megspórol mondjuk 40 HTTP kérést egy sprite-tal, ezzel mondjuk 1-5 másodpercel rövidíti le az oldal letöltődését, az lehet hogy megéri. Ugyanakkor, ha olyan eszközre optimalizálja a weboldalt, aminek kicsi a memóriakapacitása, mondjuk mobiltelefon, akkor pedig a sprite-ok helyett valószínűleg a szétvágott képek megérik, mert így legalább befér a telefon memóriájába.
ha az 1000x2000 pixeles kép helyett mondjuk 200(!) darab 100x100-as képet használok, akkor az mennyivel lesz jobb memória-használat szempontjából? tényleg nem értek ehhez a részhez, ezért kérdezem.
szerk: na beleolvastam a kommentekbe
I should also mention — images will generally take up width * height * 4 memory. So that 1000×2000 image on AMO, with most of it completely unused, takes up ~8MB of memory!
azaz - ha ez igaz - semmivel sem lesz kevesebb memória-igénye. viszont kérdés, hogy ebbe az 1000x2000-es képbe nagyjából az összes kis képet megpróbálták-e beleerőltetni, és ha igen akkor mennyi értelme van egy weboldal összes grafikai elemét egyetlen képbe sűríteni. szerintem ez már a ló túloldala (mint a css preloaderek). én általában a hoverre változó (ugye eleve erre megoldás a sprite) és az egy oldalhoz (ésszel) vagy elemhez (menü, szövegdobozok) tartozó elemeknél próbálok a http kérésekkel spórolni.
Nem tudom, hogyan tárolják a böngészők ezeket az objektumokat a memóriában, de biztosan van egy nyilvántartás, hogy melyik objektum hol van a memóriában, mi az azonosítója, a típusa, mérete, stb. Szóval szerintem 100 db 1 byte-os kép sokkal több memóriát fogyaszt mint 1 db 100 byte-os, hiszen 100 objektumhoz 100 leíró tartozik, míg ugye 1-hez csak 1... Vagy nagyon benézem ezt?
Ugye itt jórészt olyan képek voltak, ahol rengeteg rajta a "zaj", azaz olyan adat, mit nem használunk fel, ezek voltak a fehér / átlátszó hátterek a képek között, amiket semmire nem használ az oldal, azaz a kép kb 50%-a "zaj", felesleges információ. Ha ezeket a képeket egyesével vágná ki az ember, akkor ugye a "zaj" jórésze (80-90%) eltűnik, és máris jóval kevesebb a memória igény.
ha nagyon sok a zaj, akkor felesleges a sprite. a sprite-ra nem önmagáért van szükségünk. ha nem lehet megoldani hogy bizonyos szint alatt maradjon akkor kár erőltetni. szerintem.
Illetve nem feltétlenül csak egy sprite a szerencsés, sőt. Két sprite-tal már nagyon jó zajmentes képeket lehet készíteni. A poszt szerzője kicsit átesett már a ló túloldalára, ahogy te is írod.
A sok fehér területtel is ugyanannyi a letöltési idő, mint fehér terület nélkül, tehát ezt a részét ugyanúgy megspórolják.
A memóriaigénye lesz nagy, egyrészt mert a memóriában a kép tömörítetlenül tárolódik (tehát itt már számít a fehér terület), másrészt mert ez a tömörítetlen kép X alkalommal kirenderelődik (különböző eltolásokkal meg takarásokkal, de az más kérdés) a canvasra. Az a screencast videó ott elég meggyőző.
Egy másik szempont lehet, hogy pl. a hoverre változó hátterek, egyéb "mozgó alkatrészek" sprite alapú tervezése során mentesülünk pl. a javascriptes előtöltéstől, illetve a zavaró villanásoktól.
Automatizált eszközzel készítsük
Megvalósítás?
Meglévő eszközt használok
Optimalizálás
A képek esetén is pontosan ugyanez a helyzet, ha az ember megspórol mondjuk 40 HTTP kérést egy sprite-tal, ezzel mondjuk 1-5 másodpercel rövidíti le az oldal letöltődését, az lehet hogy megéri. Ugyanakkor, ha olyan eszközre optimalizálja a weboldalt, aminek kicsi a memóriakapacitása, mondjuk mobiltelefon, akkor pedig a sprite-ok helyett valószínűleg a szétvágott képek megérik, mert így legalább befér a telefon memóriájába.
naiv kérdés
szerk: na beleolvastam a kommentekbe
Adminisztratív memória?
én is így gondoltam.
"Zaj"
zaj
Több sprite is segít
A sok fehér területtel is
A memóriaigénye lesz nagy, egyrészt mert a memóriában a kép tömörítetlenül tárolódik (tehát itt már számít a fehér terület), másrészt mert ez a tömörítetlen kép X alkalommal kirenderelődik (különböző eltolásokkal meg takarásokkal, de az más kérdés) a canvasra. Az a screencast videó ott elég meggyőző.
Szerintem itt a lényeg
tehát olyan képrészek vannak benne, amiket nem használunk. És egyébként igazad van.
Nem csak optimalizálás