ugrás a tartalomhoz

Page Speed – Best practices revisited

Adam · 2009. Jún. 6. (Szo), 12.05
Török Gábor küldött be blogmarkot a Google Page Speedről. Ennek kapcsán szépen sorjában végigmentem az ajánlásokon és néhány helyen az eddigi szemlélettel – amit mindenki „kőbe vésett szentírásnak” vett – homlokegyenest ellenkező javaslatot olvastam. Emiatt gondoltam, hogy a számomra kérdéses dolgokat összegyűjtöm. Nézzük hát egyenként ezeket a pontokat.

Avoid CSS expressions

Egyetértek, hiszen ha nincs a JavaScript futtatása engedélyezve, akkor amúgy sem fognak lefutni a CSS expressionjeink, ráadásul egy-egy expressiont akár minden pixelnyi egérmozgatáskor újra és újra lefuttathatja a böngésző, ami feleslegesen terheli a kliens gépét.

Ahogy írják is, egyszerűbb és jobb megoldás, ha diszkrét JavaScriptet használunk az expressionök kiváltására.

Combine external CSS

Jó meglátás, hiszen eleve törekedni kell a lehető legkevesebb request számra, másrészt – ahogy később ajánlják is –, a böngészők egy időben ugyanarról a hosztról párhuzamos csak 2–6 fájlt töltenek.

Ugyanakkor ez ellentmond annak a megállapításuknak, miszerint minél kevesebb felesleges CSS szabályt szolgáljunk ki. Hiszen ha egyetlen CSS állományunk van, akkor a következő oldalnál megspóroljuk azt az időt, amit a böngésző az állomány letöltésére fordítana, cserébe persze a megnövekedett CSS méret miatt a render picivel lassabb lehet, de véleményem szerint még mindig elenyésző a HTTP kéréshez képest.

Combine external JavaScript

Teljesen egyetértek, nincs nagyon mit rajta boncolgatni. Talán annyi hozzáfűzni való lehet, hogy a Yahoo! YSlow ajánlásban az áll, hogy a body legvégére rakjuk a script elemeinket, mivel így nem fogják megakasztani a renderelést a feldolgozásukkal. Ezzel szemben a Google a példáiban előszeretettel a headbe rakja őket.

Defer loading of JavaScript

Sajnos még nem sikerült olyan oldalt létrehozzak, ahol a masszív tömegű JavaScript alkalmazása – természetesen csakis diszkréten! –, lehetővé tette volna, hogy „defer” betöltést alkalmazzak:

  • ha pl. bármilyen JS könyvtárat is használunk, annak betöltését már nem tehetjük deferre, mivel az összes többi fájlunk rajta alapszik;
  • ha az oldal specifikus JS állományunk tartalmaz load vagy domready handlert, akkor a defer betöltési mód megakadályozhatja azok lefutását.


Persze amennyiben YSlow ajánlás szerint a scripteket a tartalom után helyezzük el, nem lesz szükségünk load handlerekre, mivel a scriptek lefutásakor már minden elemünk létezni fog a DOM-ban, azokra hivatkozhatunk bátran. Ugyanakkor ezen esetekben nem is lesz szükségünk a defer használatára, mert az oldal renderelését már nem fogják megakasztani a scriptjeink feldolgozása.

Enable gzip compression

A tanácsuk megfontolandó, miszerint – azon túl, ahogy a címben is szerepel, minden szöveges tartalmat gzippelve szolgáljunk ki – a CSS szabályokon belül a tulajdonságokat és a HTML tageken belül az attribútumokat is ábécérendbe írjuk, ezzel is növelve a gzip hatékonyságát. Erre megoldás lehet, ha a publikáló scriptünket felkészítjük ennek a lekezelésére, így a fejlesztés alatt ezzel nem kell törődnünk. Ugyanakkor ebben a scriptben figyelnünk kell arra, hogy CSS hackek alkalmazásakor már nem mindegy a tulajdonságok sorrendje a szabályainkban, így azokat saját jelöléssel ellátva lehet megjelölni:

#links ul li
{
    min-height: 100px;
    /* !+ min-height emulálása IE6 és IE7 számára */
    height: auto !important;
    height: 100px;
    /* -! */
}
Így a !+ kezdetű és a -! közötti megjegyzés blokkot érintetlenül hagyhatja, és mondjuk a szabály legvégére sorolhatja, míg a többi szabályt ábécé szerint rendezheti.

Fontos a gzip használatakor tisztában lenni azzal is, hogy Internet Explorer 6 alatt a Flash applet a betöltött gzippelt szöveges tartalmat nem képes feldolgozni, így azokat nem lehet például tömörítve kiszolgálni.

Leverage browser caching

A statikus állományokat Expire vagy Cache-Control fejléccel ellátva nagy sávszélességet és — ami még fontosabb — felhasználói időt spórolhatunk meg. Mindig is gyorsabb lesz kiszolgálni egy fájlt a helyi lemezről, mint hálózatról. Ugyanakkor ez magában hordozza azt a veszélyt, hogy ha a lejárati idő előtt módosítjuk a tartalmat, az a felhasználónál nem fog frissülni. Ennek kiküszöbölésére alkalmazható a kiszolgált fájlok verziózása, ami annyit tesz, hogy az állományokra hivatkozáskor a query stringben elhelyezünk egy, az adott fájlra érvényes verziószámot, ami lehet például az SVN revision száma:

<img src="my-image.jpg?1234" alt="Some picture" />
Vagy magában a fájlnévben:

<img src="my-image_v1234.jpg" alt="Some picture" />

Serve resources from a consistent URL

Egyértelmű, ha más domainről szolgáljuk ki ugyanazt, újra be kell gyorsítótáraznia, egyértelműen kerüljük.

Specify image dimensions

Azzal kapcsolatban egyetértek, hogy a beszúrt képek méretét határozzuk meg, így könnyítve a megjelenítést.

Azzal viszont nem, hogy ne ugyanazt a (tartalmi) képet használjuk fel, ha két különböző méretben akarjuk megjeleníteni, például avatarok esetében. Ez akkor természetesen igaz, ha – vegyük például a Flickrt – a fotók listázásakor nem a teljes felbontású képet használjuk fel.

Use efficient CSS selectors

Logikailag teljesen helytállóak, ellenben ha azt vesszük, a HTML csak jelölésre szolgál, a megjelenésért kifejezetten a CSS a felelős. Legalábbis ezt szajkózták anno, most…

…eddig?

Ráadásul az újrafelhasználása a kódnak is macerás lehet, illetve az ajánlást követve megnövekedik a HTML. Nem rajongok az ötletért! És vajon egy összetettebb oldal esetében is mennyivel növekedhet meg a renderelés ideje? 10-100 ms? És akkor szerintem sokról beszélünk. Bár tény, hogy a YSlow prezentációban megmutatták, hogy egyes szolgáltatások forgalma mennyivel csökkenne ilyen mértékű oldalbetöltődési idő növekedés esetén. Valószínűsítem, ez szolgáltatásfüggő.

Avoid the :hover pseudo-selector for non-anchor elements

Viszont ami miatt igazán ez a bejegyzés született, az nem más, mint hogy a következőt olvashatjuk ebben a pontban:

Avoid the :hover pseudo-selector for non-anchor elements.
Instead of using the pseudo-selector, use a JavaScript onmouseover event handler.

Na most vajon nem pont az lenne a lényeg, hogy JavaScript nélkül is elérhető legyen minden lényegi funkció? Ezt az utolsó gondolatot inkább vitaindítónak szánom, sem mint, hogy én magyarázzam meg. Biztos maga a helyzet az – ebben egyetértek –, ami meghatározza a létjogosultságát a „teljes” JS nélküli funkcionalitásnak, de nem érdemes erre törekedni mindig?
 
1

Köszönjük

Ustak · 2009. Jún. 6. (Szo), 14.46
ez nagyon jó (és hasznos) kis kiértékelő olvasmány volt!
Az utolsó kérdésről a véleményem, hogy a :hover -el és a mouseover -el is valamit jelezni akarok az usernek, valami lényegit, akár anchor-on van akár nem. Így hát minden lehetséges eszközzel el kell hogy juttassam hozzá azt az infót, innentől kezdve nem kérdéses, hogy nem szabad kizárni azokat, akiknek a böngészőjében nincs javascript (vagy fordítva, nincs css, bár az gondolom ritkább).
Üdv:
Gábor.
16

JS-ből törölni a hover-es szabályokat

Adam · 2009. Jún. 7. (V), 00.35
Azon gondolkoztam, hogy mi lehetne a jó megoldás erre… Első gondolatom az volt, hogy akkor hajrá, JSből töröljük a hover-es szabályokat a stylesheet-ekből, de nem érzem eléggé kifinomultnak. Pláne, hogy anno, mikor utoljára az IE6 stylesheets tömbjében módosítgattam, felfalt 4GB memóriát a böngésző, majd utána elhasalt :)
2

– Avoid CSS

Fraki · 2009. Jún. 6. (Szo), 16.01
– Avoid CSS expressions

Hehh. Ez folyton előjön.

1. A css expressionök egyetlen értelmes felhasználási területe az IE6-7 CSS-implementációk egyszerű pótlása.

„hiszen ha nincs a JavaScript futtatása engedélyezve, akkor amúgy sem fognak lefutni a CSS expressionjeink” – nadehát akkor a diszkrét JS-eink se!

2. „ráadásul egy-egy expressiont akár minden pixelnyi egérmozgatáskor újra és újra lefuttathatja a böngésző” – erre a problémára van megoldás, csak szerintem nem sokan tudnak róla.

3. a css expressionök is diszkrét js.

(Egyébként egy IE kikapcsolt JS-sel már eleve paradox helyzet, de ez más kérdés.)
3

diszkrét!

Tome · 2009. Jún. 6. (Szo), 17.24
„hiszen ha nincs a JavaScript futtatása engedélyezve, akkor amúgy sem fognak lefutni a CSS expressionjeink” – nadehát akkor a diszkrét JS-eink se!

A diszkrét JS pont azt jelenti, hogy a kérdéses funkció kikapcsolt JS esetén is működjön, nem?!
4

És a kérdéses funkció hogy

Fraki · 2009. Jún. 6. (Szo), 20.04
És a kérdéses funkció hogy fog működni kikapcsolt _diszkrét_ JS esetén, ha az a JS a megjelenítést korrigálta? A megjelenítést korrigáló JS-re eleve nem is értelmezhető a diszkrét jelző, hiszen a megjelenítés nem működés. Vagy te láttál már olyan – ismétlem: megjelenítést korrigáló – JS kódot, amivel kikapcsolt JS esetén is ugyanúgy nézett ki a weblap?

Azt lehet mondani, hogy JS-sel egyáltalán ne korrigáljunk IE-ben css-implementációs hiányokat. És akkor semmilyen JS-ben. Ennek van értelme, bár sztem tarthatatlan álláspont.

Ha meg már engedjük a JS-t erre a feladatra, akkor teljesen mindegy, hogy expression vagy nem, egyik se fog működni kikapcsolt JS-nél, és mindkettő működni fog bekapcsoltnál.

Az expressionök elleni egyetlen normális érv az említett performance flaw (teljesítményhasadék) volt.
5

Hozzászólás a témához:

CSI · 2009. Jún. 6. (Szo), 20.33
Ha valamiben nincs igazam akkor szóljatok!

Defer loading of JavaScript:
* Azzal, hogy nem a Headerbe teszem bele a JS-et csak az óldal kódja fog nőni, ezáltal több adatott kell letöltenie.
* A head részben elhelyezet scripteket egyes bongészők cache-elik, így gyorsabb a letöltés.

Leverage browser caching:
* Ezt az ötletet díjazom :-)

Use efficient CSS selectors:
* A véleményem szerint, a HTML és a CSS -est külön kell választani! Viszont az már nem fer, hogy a böngészők a szabványokat ..., ezért a fejlesztő szív vele! Sokszor a fapados módszerek a legjobbak, mert minden lekezeli!
Valaki próbált dinamikus táblázatot (colspanolva+rowspanolva) összerakni divből, úgy hogy nem fix a mérete a celláknak és minden böngésző támogatja? (Ha valakniek sikerül megoszthatja velem én feladtam a próbálkozást ahol lehet div ahol meg nem table).

Azt se értem, hogy használj AJAX-ot mert sokkal interaktívabb az oldal és a felhasználónak nem villog a kép meg ilyesmi trend..., da akkor kérdem én? Ha JS levan tiltva, akkor hogy használjak AJAX-ot?
Igaz ezt a problémát a keretrendszerk megoldhatják, de csak a fejlesztő szív vele :-(

Amúgy kössz a cikket :-) Érdekes volt!
7

??

hector · 2009. Jún. 6. (Szo), 20.48
Miért akartál divből táblázatot csinálni? Arra ott a table tag, és társai.
9

Div => Table kérdése

CSI · 2009. Jún. 6. (Szo), 21.36
Példaként hoztam csak fel.

Volt egyszer régen, hogy azt szerették volna, ha minden divből áll és még a táblázat is, mert az a trend, meg gyors meg ilyesmi :-) Eddig nem is volt gond, de jött a csavar a táblázat dinamikus és nem tudjuk a méretét. Volt pár ötletem (megvalósításom), de a méret kérdését PHP-val nem megoldható és ezt nem akarták megérteni miért nem.
11

Félreértelmezted

saxus · 2009. Jún. 6. (Szo), 21.51
Félreértelmezted, a szemantikus webnek nem az volt a lényege, hogy mindent divvel csináljunk, hanem az, hogy minden HTML elemet arra használjunk, amire kitaláltak. h1...h6 elemeket címsorra, table-t táblázatra és nem szerkezet kialakítására stb.
12

SAXUS ott a pont!

CSI · 2009. Jún. 6. (Szo), 21.54
Akkor azt tényleg félreértelmeztem! Sorry
17

Akkor korrigálok

Adam · 2009. Jún. 7. (V), 00.47
Azzal, hogy nem a Headerbe teszem bele a JS-et csak az oldal kódja fog nőni, ezáltal több adatott kell letöltenie.

Ha itt a "header" alatt a response HTTP header-eket érted, akkor biztos nem fog működni, mivel ott nem tudsz JavaScript file-okat meghatározni. Ha pedig a <head> elemet, akkor sincs igazad, mivel valahova be kell ágyaznod a <script> elemet, és mindenhol ugyanannyi byte-ot fog "megenni".

A head részben elhelyezet scripteket egyes bongészők cache-elik, így gyorsabb a letöltés.

A böngészők minden letöltött állományt cache-elnek, akárhol is helyezed el a html-ben — vagy akár JS-ben. Ezáltal minden állományra való hivatkozást ott érdemes megejteni — értsd: a kódban elhelyezni —, ahol arra szükséged van, illetve azt például az ajánlás is javasolja: script-eket a css-ek után, stb.

Azt se értem, hogy használj AJAX-ot mert sokkal interaktívabb az oldal és a felhasználónak nem villog a kép meg ilyesmi trend..., da akkor kérdem én? Ha JS levan tiltva, akkor hogy használjak AJAX-ot?

Az AJAX használatával tehermentesíted a szerveredet, a hálózatot és a kliens gépét is, mivel olyankor csak a szükséges adatok fel–le töltése történik meg, nem töltődik le újra a css, js, képek vagy akár a favicon. Mindemellett a felhasználó — ha pl. egy videót néz az oldalon, miközben azt kedvencnek jelöli — nem irányítódik el az éppen használt funkciótól, hanem azzal párhuzamosan történik az interakció.

Az AJAX pedig, amennyiben nem webalkalmazásokról beszélünk, minden esetben diszkréten kell, hogy működjön, tehát ha nincs JS, akkor ha az adott linkre vagy submit gomb-ra kattint a felhasználó, igenis újratöltődve az oldal fog megtörténni a kívánt művelet.
19

Jogos

CSI · 2009. Jún. 7. (V), 11.24
Van benne valami :-)
30

ajax terhelés

Hodicska Gergely · 2009. Jún. 9. (K), 10.33
Az AJAX használatával tehermentesíted a szerveredet
Ez ebben a fromában talán nem igaz általánosan (persze ez függ az alkalmazás jellegétől is). Inkább mondanám, hogy AJAX használatával egy más jellegű terhelésnek teszed ki a szervered, ami azt jelenti, hogy több, de gyorsabban kiszolgálható kérésed lesz.
38

Gmail

Joó Ádám · 2009. Jún. 10. (Sze), 04.32
Én például máig nem értem, hogy sikerült úgy összerakni a Gmailt, hogy az AJAX-os felülete lassabb, mint a sima HTML…
37

AJAX

Joó Ádám · 2009. Jún. 10. (Sze), 04.29
Azt se értem, hogy használj AJAX-ot mert sokkal interaktívabb az oldal és a felhasználónak nem villog a kép meg ilyesmi trend..., da akkor kérdem én? Ha JS levan tiltva, akkor hogy használjak AJAX-ot?


Először implementálj minden funkciót HTML és PHP alapon. Ha működik, akkor diszkrét JavaScripttel kapd el az adott eseményt és oldalújratöltés helyett küldd el AJAX-szal a kérést.
6

IE

hector · 2009. Jún. 6. (Szo), 20.47
Az uccsó pont gondolom a cross browser kompatibilitás jegyében született. A 6-os IE csak az anchor tag-nél értelmezi a :hover-t.
8

Remélem

saxus · 2009. Jún. 6. (Szo), 21.22
Remélem, mert egyébként elég rossz vicc szerintem.
10

nem vicc

tgr · 2009. Jún. 6. (Szo), 21.42
15

A hover-t minden esetben kerüljük (?)

Adam · 2009. Jún. 7. (V), 00.31
Igazából a Google ajánlás azt írja, hogy a hover-t minden esetben kerüljük, ha nem anchor-ra (link) rakjuk, mivel azok feldolgozása lassítja az oldal megjelenítését.

Amúgy zárójelben: sajnos az IE6 a linkeken sem mindig jól kezeli a hover-t, majd megpróbálok egy minimalizált mintát is bemutatni, csak most nincs a közelemben Windows és ezáltal IE6.
21

Paradicsom

Ustak · 2009. Jún. 7. (V), 14.55
csak most nincs a közelemben Windows és ezáltal IE6

El ne gyere onnan! Az maga a Paradicsom :-)
22

:)

Adam · 2009. Jún. 7. (V), 15.47
Itthon vagyok, hétvégén soha nem dolgozom ;) Továbbá sajna tegnap ment tönkre a vinyóm, így még nincs virtuálisan felhúzva, hogy tesztelni tudjak. Melóhelyen persze van egy rakat win-es gép mellettem, hogy a különböző IE-ken tesztelni tudjak.
18

....

inf · 2009. Jún. 7. (V), 07.07
Megszűnhetne már az egész ie széria, aztán a problémák fele megoldódna.
Javascript fejlesztésnél a kód fele (vagy több) az ie bugok vagy különcködések kijavítása.
13

Hogyanok?

Gabo · 2009. Jún. 7. (V), 00.15
Nagyon hasznos poszt, annyi építő kritikát hadd adjak hozzá, hogy több helyen hiányzik a rövid magyarázata annak, hogy éppen miről is van szó... (angol cím, majd után, hogy egyetértek, vagy hogy helyes, vagy...) a kezdők érdekében jó lenne egy-egy mondat, hogy pontosan mivel. :)

Illetve egy másik mondat hiányzik nekem, hogy mit csináljon az átlagjuzer, hogy az adott probléma megoldódjon. a két nulla pontos: Enable gzip compression, Leverage browser caching Mivel hibák nagyrészénél a képeket, css fájlokat, js fájlokat mondja, gondolom az Apache körül kellene keresni a megoldást.
Viszont az Apache ismereteim elég minimálisak, a Google meg nem annyira segített:
A .htaccess-be bekerült a következő: SetOutputFilter DEFLATE de ettől még nem lett Enable gzip. De simán lehet, hogy mást állítottam (volna).
Megköszönném, ha ebben a kérdésben segítséget kapnék. :)
14

Köszönöm a bíztató

Adam · 2009. Jún. 7. (V), 00.29
Köszönöm a bíztató kritikákat, örülök, hogy első cikkem is elnyerte tetszéseteket!

…több helyen hiányzik a rövid magyarázata annak, hogy éppen miről is van szó…

Igazából azért is vannak a címek belinkelve, mivel a Google ott szépen el is magyarázza, hogy mi az ő álláspontjuk azzal kapcsolatban, emiatt is gondoltam úgy, hogy felesleges megismételnem azt, amit ott úgyis leírnak.

A magyar fordítása az oldalnak meg megint egy másik tészta, időhiányban én biztos nem fogok vállalkozni rá ;)
20

GZIP, DEFLATE

galambalazs · 2009. Jún. 7. (V), 13.13
Apache 2.0 esetén:

AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
Header append Vary Accept-Encoding

De ez csak akkor fog működni, ha az apachban a mod_deflate engedélyzve van (httpd.conf).

Ha ez nem elérhető, de van zlib:

php_flag zlib.output_compression on
php_value zlib.output_compression_level 6

Ez ugye csak a php fájlokra fog teljesülni, de egy kis trükközéssel megoldható css és js fájlok esetén is:

AddHandler application/x-httpd-php .css
AddHandler application/x-httpd-php .js
php_value auto_prepend_file "pre.php"

Ezzel a szerver a css és js fájlokon is lefuttatja a php értelmezőt, valamint minden fájl elejére beszúrja a pre.php tartalmát.

Ezután már csak vissza kell állítani a megfelelő HTTP fejléceket a pre.php-ban.

ob_start("ob_gzhandler");

$path = pathinfo($_SERVER['SCRIPT_NAME']);

if ($path['extension'] == 'css')  {
   header('Content-type: text/css');
}

if ($path['extension'] == 'js')  {
   header('Content-type: application/x-javascript');
}

Sok sikert!
23

Nem kell

janoszen · 2009. Jún. 7. (V), 20.14
Nem kell CSS fájlok esetén PHP-vel varázsolni. Ha valaki ilyesmiket be tud álltani, többnyire tud telepíteni egy mod_deflatet is. Nem emlékszem rá fejből, de talán by default belefordul.
24

Nem biztos

galambalazs · 2009. Jún. 7. (V), 20.57
Ha övé a szerver igen, havidíjas webhoszting esetén szolgáltatója válogatja. Attól függetlenül, hogy default belefordul, Ultraneten is ki van kapcsolva pl, zlib viszont van...
25

Benéztem

janoszen · 2009. Jún. 8. (H), 02.48
Hopp, ezt benéztem. Deflate by default valóban nincs benne. Anyway, én, mint szolgáltató, alapból bekapcsolnám a deflatet, mert a sávszélt drágán mérik.
26

a hover mikor lényegi?

Crystal · 2009. Jún. 9. (K), 04.57
"Na most vajon nem pont az lenne a lényeg, hogy JavaScript nélkül is elérhető legyen minden lényegi funkció?"


szerintem a hover az esetek 99,9%-ában nem tartalmaz fontos tartalmat, csak a design miatt lényeges.
27

Fontos UI elem

Török Gábor · 2009. Jún. 9. (K), 07.05
Én inkább úgy közelítem meg, hogy (link)hover a felhasználónak egy nagyon fontos visszacsatolás, sokkal jobb UX biztosítható vele.
28

Lényeges felületi elem a hover!

Adam · 2009. Jún. 9. (K), 08.02
Amikor egy szinvak nézi az oldaladat, és mondjuk a linkek színe pont olyan számára, mint a tartalmi szöveg, és végig pásztázza például az egerével a szöveget, a hover-nek igenis jelentőségteljes funkciója van, miszerint pl egy aláhúzással meg tudod neki mutatni, hogy az ott egy link. Vagy hover-re megmutatsz egy információs dobozt, amiben az adott termékkel kapcsolatban fontos információkat közölsz. Így a felhasználó gyorsabban jut információhoz, és közben oldalletöltéssel nem terheli a te rendszeredet.
29

régen rossz

gex · 2009. Jún. 9. (K), 09.49
régen rossz ha egy színvak csak a szövegen végighúzott egérkurzorral tudja megtalálni a linkeket...
31

gexnek igaza van, rossz

Török Gábor · 2009. Jún. 9. (K), 10.34
gexnek igaza van, rossz példát hoztál fel, de jóra gondolsz. Egyrészt ehhez nem is kell színvaknak lenni, másfelől a link hover már csak akkor játszik igazán, amikor megtaláltad a linket. Ha maga a link sem elég hangsúlyos, akkor bármilyen hover effekted lehet, mindhiába. Az általánosan vett hoveres gondolatoddal pedig egyetértek.
33

Jogos kritika

Adam · 2009. Jún. 9. (K), 11.40
@gex, @Gábor: igen, igazatok van, utólag visszaolvasva eléggé rossz a példa, megkövetem magam érte! :)
39

Megkövet

Joó Ádám · 2009. Jún. 10. (Sze), 04.39
Megkövet: bocsánatot kér.
41

Lehet, hogy csak elütötte a

Fraki · 2009. Jún. 10. (Sze), 11.58
Lehet, hogy csak elütötte a z-t t-nek.
42

hehe

Adam · 2009. Jún. 10. (Sze), 12.24
:P
40

Jó példa?

Joó Ádám · 2009. Jún. 10. (Sze), 04.40
Ha már itt tartunk, tudtok hozni olyan példát, ahol tényleg lényegi szerepe van?
32

mindenféle

Hodicska Gergely · 2009. Jún. 9. (K), 11.05
Ugyanakkor ez ellentmond annak a megállapításuknak, miszerint minél kevesebb felesleges CSS szabályt szolgáljunk ki.
Ez csak ökölszabály, a konkrét esetekben nyugodtan el lehet térni ha az ember tudatában van a következményeknek. Egyensúlyra kell törekedni, pl. ha van egy olyan oldalad, amihez valamiért kell egy nagy rakás CSS, akkor valszeg nem éri meg az egy közösbe tenni, inkább legyen egy plusz kérés annál az egy oldalnál. Ellentétje: ha az összes oldalhoz szükséges CSS mondjuk általában csak 10% pluszt tartalmaz az egyes oldalaknál, akkor meg simán mehet egy fájlba. Érdemes olyan hátteret készíteni (lehet írok róla), ahol könnyen lehet játszani, és méricskélni a különböző felállások hatását.

Ezzel szemben a Google a példáiban előszeretettel a head-be rakja őket.
Esetükben lehet az is, hogy túl egyszerű az oldal, ezért majdnem mindegy, de lehet persze, hogy csak nem a legjobbak a példák.

ha pl. bármilyen JS könyvtárat is használunk, annak betöltését már nem tehetjük deferre, mivel az összes többi file-unk rajta alapszik;

http://stevesouders.com/cuzillion/?ex=10017&title=IE+Ensure+Ordered+Execution
http://stevesouders.com/cuzillion/?ex=10018&title=FF+Ensure+Ordered+Execution

ha az oldal specifikus JS állományunk tartalmaz load vagy domready handler-t, akkor a defer betöltési mód megakadályozhatja azok lefutását.
A már párszor említett Even Faster Web Sites című könyben van több módszer arra is, hogy egy inline kód bevárja az aszinkron módon betöltött scriptet vagy akár scripteket, amelyek egymástól is függhetnek.

Ennek kiküszöbölésére alkalmazható a kiszolgált file-ok verziózása,
Én a második formát javaslom, ez az ami tutira biztosítja, hogy nem cache-ből jöjjön a cucc, illetve hogy adott esetben ne akadályozza meg a cache-elést. A kérdőjelre lehetnek háklisak a böngészők (azt gondolhatja, hogy ez mégiscsak dinamikus), illetve útközben lehetnek akármilyen proxy-k, amik nem szabványosan működnek, ezért célszerűbb az aláhúzásos forma.

Egyértelmű, ha más domainről szolgáljuk ki ugyanazt, újra be kell cache-elnie, egyértelműen kerüljük.
Itt még van egy olyan dolog is, hogy ha a domain mögött több gép van, akkor érdemes a webszerver konfigját lecsekolni, mert pl. apache esetén az Etag képzésben benne van a fájl inode száma is, ami miatt ha épp egy másik szerverhez esik be a feltételes HTTP kérés, akkor a böngésző újból le fogja cibálni a fájlt.

Logikailag teljesen helytállóak, ellenben ha azt vesszük, a HTML csak jelölésre szolgál, a megjelenésért kifejezetten a CSS a felelős.
Szemantikus markupból sem biztos, hogy csak egy féle van, de ha épp be kell rakni pár plusz DIV-et a felhasznlói élmény érdekében, attól még nem fog egyetlen kismacska sem meghalni. Érdemes ezt is rugalmasan kezelni.

Na most vajon nem pont az lenne a lényeg, hogy JavaScript nélkül is elérhető legyen minden lényegi funkció?
Kérdés, hogy a hover az lényegi funkció-e, vagy mondhatjuk azt, hogy a valamennyi JS nélkül netező esetén ez beáldozható.
44

több js aszinkron betöltése

galambalazs · 2009. Jún. 10. (Sze), 19.39
Sajnos Steve könyvét még nem olvastam, de jómagam is összedobtam egy kódot több js fájl aszinkron betöltésére, a tőlük függő részekért pedig egy callback függvény felelős. Ráadásul a futtatási sorrendet is megtartja.

A demó itt megtalálható: http://galambalazs.extra.hu/multiload/

Eddig IE5.5+, FF3, Opera 9.6, Chrome 2, Safari 4 alatt teszteltem.
34

gzip compression level

bonga · 2009. Jún. 9. (K), 12.34
A google PageSpeed-je kapcsán futottam bele abba a kérdésbe, hogy a gzip tömörítési szintjét milyen értékre érdemes beállítani. Próbáltam rákeresni a témára, hogy hátha írt már valaki egy sávszélesség vs. CPU terhelés tesztet a gzip tömörítési szintjeit kapcsolgatva, de nem találtam ilyet. Nektek van tapasztalatotok ezzel kapcsolatban, hogy az egyes tömörítési szintek mennyivel jelentenek több CPU terhelést és mennyivel több byte-megtakarítást? Egyáltalán, milyen tömörítési szintet érdemes beállítani?
35

Tömörítés

Poetro · 2009. Jún. 9. (K), 12.44
És ha már itt tartunk, akkor ha már a CSS-nél figyelni kell, hogy ne terheljük a kliens gépét, akkor arra is érdemes (lehet) figyelni, hogy a gzip-pel tömörített fájlok kitömörítése mekkora terhelést ró a kliens gépére (elképzelésem szerint nagyobbat, mint a CSS).
36

arány

Hodicska Gergely · 2009. Jún. 9. (K), 13.30
Szerintem kb. minimális overheadet jelent (nálunk pl. szerver oldalon a betömörítés pár százalékos overheadet okoztt), viszont egy rossz CSS expression rengetgszer lefuthat, illetve a renderelés is többször, míg a letöltés csak egyszer történik, hogy ha megfelelő chace headereket használunk.
43

meg sem érzik

Cadeyrn · 2009. Jún. 10. (Sze), 14.55
Amikor először bekapcsoltam a tömörítést, én is féltem ettől, de nemhogy lassulás nem volt, a text letöltés olyan brutális mértékben felgyorsult tőle, hogy mindenképpen megéri.
45

Korrekt

Wyck · 2012. Ápr. 29. (V), 08.04
Korrekt post, sok mindenben igazad van. A Google-féle teszt nem 100%-os, ajánlott többet összevetni. Ráadásul ahány teszt, annyi ajánlás. Nem mindenben van közös koncepció.