Php css, és js összfűzés
Mostanság arról olvasgattam, hogy célszerű a javascript és css fájlokat összefűzni egy-egy fájlba, hogy minél kevesebb kérés legyen a kliens és s szerver között.
Mivel egy MVC rendszeren dolgozom, ahol a controllerben kerül meghatározásra a model alapján, hogy milyen javascript illetve css fájlokat kell használni, arra gondoltam, hogy célszerűbb lenne egy php szkript ami összevágná a kért css fájlokat egy fájlba, és azzal térne vissza.
Mivel a kapcsolt fájlok nem mindig ugyanazok egy adott oldalnál, a manuális megoldás nem jöhet szóba.
A kérdés, hogy mi a gazdaságosabb: szerver oldalon megcsinálni a fenti összefűzést, és esetleg van plusz htacces szabály is, vagy ez túl nehézkes ahhoz képest, amit a több css/js fájlból fakadó kérés növekedés jelent?
■ Mivel egy MVC rendszeren dolgozom, ahol a controllerben kerül meghatározásra a model alapján, hogy milyen javascript illetve css fájlokat kell használni, arra gondoltam, hogy célszerűbb lenne egy php szkript ami összevágná a kért css fájlokat egy fájlba, és azzal térne vissza.
Mivel a kapcsolt fájlok nem mindig ugyanazok egy adott oldalnál, a manuális megoldás nem jöhet szóba.
A kérdés, hogy mi a gazdaságosabb: szerver oldalon megcsinálni a fenti összefűzést, és esetleg van plusz htacces szabály is, vagy ez túl nehézkes ahhoz képest, amit a több css/js fájlból fakadó kérés növekedés jelent?
Összefűzés kezelése
Mivel élesben sehol nem használom ezt a keretrendszert még, ezért nincs cache-elés, különben el kellene cache-elni az összefűzött fájlokat és azokat kiszolgálni ha nincs változás a forrásfájlokban, ha van változás akkor újra összefűzni őket és frissíteni a cache-t, így nem nő lényegesen az oldal előállításának ideje.
Magad, uram, ha szolgád nincsen
Azert az konnyen elo tud
Nekem eddig a legkenyelmesebb az volt, amikor egy config file-ban lehetett definialni a js/css modulokat, amik kepesek voltak fuggosegeket kezelni. Tehat pl egy modulba egy masik modult is be lehetett agyazni.
Ezutan minden actionnek meg lehetett mondani, hogy melyik modulokra van szukseg. Itt gyakorlatilag egy action is megfelel egy sima modulnak, csak azokbol a build script generalt minden actionnek egy osszefuzott file-t, amit utana be lehetett illeszteni az oldalba.
Esetleg olyan dolgokat, amik biztosan kellenek a website osszes oldalan (pl. JS framework), azokat erdemes kulon letoltetni.
Az osszefuzes szuksegessege es modja meg leginkabb attol fugg, hogy mekkora file-okrol van szo. Par 10 vagy mondjuk 100 Kb eseten mehet egybe, de par 100 utan mar erdemes lehet elgondolkodni, hogy valoban kell-e minden oldalra minden file.
Igazad van
több dologtól is függ.
Benchmarkolj és az alapján nézd meg, hogy érdemes-e ezzel ügyködnöd és merre mozogj.
Azért azt hozzá kell tenni,
Amíg nincs túl sok fájl
Egyébként meg annyira nem bonyolult, van két Set-ed amikben felsorolod a használt fájlokat, a View Helper-ekben letárolod, hogy milyen css-re és js-re van szükségük, és amikor használsz egy helper-t, akkor hozzácsapod az adott set-hez a függőséget. Utána el lehet dönteni, hogy egybefűzöd őket, vagy egyesével szúrod be, az összefűzött nevet meg lehet generálni, ha tömbre alakítod a set-et, rendezed, string-re alakítod (implode vagy serialize), és fájlnévként használható formára alakítod (crc32 vgy md5).
Drupal megoldása az, hogy van
Természetesen nem csak a modulok(működési logika) adhat hozzá js és css fájlokat, hanem a smink(megjelenítési logika) is. Az egyik hozzászólásban említett dependencia kérdésekre is kínál megoldást a rendszer, de az már egy másik történet. :)
Kösz a hozzászólásokat. A
A szerver várhatóan elég komoly terhelésnek lesz kitéve, a css fájlok nem nagyok a legkisebb jelenleg 1kb, a legnagyobb meg 8kb, ennél várhatóan nem lesznek nagyobbak, de akár 15-20 darab is kellhet, egy lap legeneráláshoz.
Ami engem rémiszt pl a drupalos linkek kapcsán, hogy masszív kód van mögötte.
Ilyenkor nem veszíti el kapott előnyt a kliens, a szerver oldali munka hossza miatt?
20 darab 8k-s fájl 160k,
Az szerintem nem túl optimális helyzet, ha legenerálsz n darab JS és CSS fájlt, amelyekben lévő kódoknak nagy a metszete, azaz egy-egy függvény vagy stílusdefiníció több helyen is megvan.
Az azért hozzátartozik, hogy
pp
Ilyenkor nem veszíti el
Ha kesseled az összefűzött fájlt, akkor nem.
Akkor talán az lenne az
hash