Mozillácké drobnosti: Link Prefetching

Ať si říká, kdo chce, co chce, vývojáři Mozilly si vždy našli chvilku času, aby implementovali do svého prohlížeče zajímavé funkce. Na tomto blogu jsem již psal o chvályhodné snaze implementovat podporu rozdělení textu do více sloupců ve Firefoxu 1.5. Dnes bych se zaměřil na nepříliš známou, však o to užitečnější funkci, kterou dostala do vínku již stařičká Mozilla 1.2.

Link prefetching

Osobně se často při procházení internetu setkávám s obsahem, který je rozdělen na několik navazujících částí. Typicky se jedná o dlouhé články, internetové knihy, diskusní vlákna a podobně. Každá z těchto částí může sama o sobě představovat nezandebatelný datový objem, kterýžto fakt jsem ještě před rokem a půl jako uživatel rychlého 64 kilobitového připojení bolestivě pociťoval. Klasickým představitelem takového rozkouskovaného obra jsou specifikace W3C, kdy jednotlivé části mohou snadno dosahovat velikosti 50kB a větší.

V té době jsem používal první verze Firefoxu a listování specifikacemi bylo mimořádně rychlé. Přičítal jsem to tehdy vynikající optimalizaci prohlížeče a Ohnivou Lišku jsem si hned zamiloval. Náklonnost k Firefoxu mi vydržela do dneška i přes zjištění, že s tou rychlostí to není tak slavné a že tehdy při procházení specifikací zapracovala šikovná funkce Mozilly, link prefetching, která mi jednotlivé navazující stránky načítala „do zásoby“.

Jak to funguje?

Jedním ze způsobů, jak dostat na svůj web příjemnou funkci link prefetchingu, je element <link>. Příklad:
<link rel="prefetch" href="mapa_webu.html">
<link rel="next" href="dalsi_stranka.html">

Všimněte si zejména atributu rel, který dle specifikace určuje vztah k objektu odkazovanému atributem href. V případě, že tento atribut nabývá hodnoty prefetch nebo next, Mozilla si takto odkazovaný objekt po načtení samotného dokumentu začne načítat do cache.

Na tomto místě je důležité zmínit, že odkazujete-li na jiný dokument, do cache se načte pouze zdrojový kód dokumentu, nikoliv jeho vkládané objekty (obrázky, stylopisy atp.). Z tohoto důvodu v některých případech žádné zrychlení postřehnout nemusíte.

Když potom přejdete na odkazovanou stránku, její zdrojový kód je k dispozici okamžitě. Na stejném principu můžete odkazovat i na jiné objekty, například na větší obrázky, což může být užitečné například při procházení fotogalerie. Vyvstává však otázka, co se stane, pokud přejdete na další obrázek dřív, než se stačí nahrát do cache? Nic strašného. Prefetching se zastaví a pak záleží na tom, jakou část obrázku již prohlížeč stačil stáhnout. Data přijímá a do cache ukládá v segmentech, pokud stihl uložit jeden či více segmentů, nebude je při načítání obrázku stahovat znovu a začne přímo nestaženými daty.

Jde to i jinak

Element <link> není jedinou možností, jak v dokumentu aktivovat link prefetching. Můžete využít i HTTP hlavičky Link, která se vyskytovala ve starší specifikaci protokolu HTTP/1.1 [RFC 2068]. V té současné [RFC 2616] již sice nefiguruje, přesto ji Mozilla chápe a správně zpracovává. Syntaxe je následující:
Link: <dalsi_obrazek.jpg>; rel=prefetch

Nejsnáze asi příslušnou HTTP hlavičku pošlete pomocí PHP, a to následovně:

header ("Link: <dalsi_obrazek.jpg>; rel=prefetch");

Jaký způsob si vyberete, to je jen na vás. Posílání ve formě HTTP hlaviček je přínosem zejména v případě, kdy chcete přednačíst nějaký multimediální objekt, nejčastěji obrázek. Odkazování na video soubory či hudbu zásadně nedoporučuji!

Naproti tomu element <link> často slouží k vyjádření alternativní navigace. Hodnoty „first“, „prev“, „next“, „last“ či „contents“ (a další) atributu rel mohou být zpracovány a využity prohlížeči či alternativními zařízeními. I přesto, že této funkce využívá jen minimum uživatelů, je lepší tyto strukturní vztahy vyjádřit přímo ve zdrojovém kódu dokumentu.

Příklad

Používáte-li Mozillu (Firefox), můžete si link prefetching odzkoušet na tomto příkladu. Prosím, na odkazované stránce si přečtěte nejdříve potřebné instrukce.

Resumé

Link prefetching je zajímavá schopnost prohlížečů založených na jádru Gecko přednačíst odkazovaný obsah do své cache. Prefetching se aplikuje na objekty odkazované elementem <link> či HTTP hlavičkou téhož názvu, obojí s uvedeným atributem rel s hodnotou next nebo prefetch. Odkazujete-li multimediální obsah, využijte raději možnosti HTTP hlavičky, v opačném případě element <link>.

Odkazy

19. 3. 2006, 14.57 | Prohlížeče.


26 komentářů k “Mozillácké drobnosti: Link Prefetching”

  1. Leo říká:
  2. Par drobnych poznamek:

    1, Link s rel="next" by se mel pouzivat jen tehdy, pokud skutecne vyjadruje vztah dvou dokumentu (napr. dalsi kapitola, atd.), coz je ale v praxi dost vzacne. Pokud je cilem jen prefetching, tak je lepsi prefetching (stejne jako blockquote nepouzivame kvuli odsazeni zleva).

    2, Osobne bych prefetching pouzit jen tam, kde je vysoka pravdepodobnost, ze uzivatel na stranku skutecne prijde, resp. ze dany obrazek bude opravdu chtit, jinak ho nutim stahovat data, ktera jsou potreba a nezajimaji ho, a to nemusi byt zrovna slusne.

    O te http hlavicce jsem nevedel, diky za rozsireni obzoru, i kdyz je to nestandardni (hlavicka, ne rozsireni :-) Leo


  3. habendorf říká:
  4. Chudák uživatel s připojením zpoplatněným za přenesená data. Čte si stránku a netuší chudák, že kdesi na pozadí mu tečou (drahá) data, o něž vůbec nestojí.


  5. Dero říká:
  6. Leo: Ano, děkuju za doplnění praktických poznámek, obojí je stoprocentní pravda. Jsem rád, že zrovna tento komentář je první.

    habendorf: Přesně tak, je to dvojsečná zbraň. Nicméně uživatel má možnost si tuto funkci vypnout. Podrobný postup je v odkazovaném článku na webu Mozilly. On tento spot je jen noticka, jen tak pro zajímavost to nejdůležitější, proto jsem uvedl odkazy na zdroje, které téma rozebírají podrobněji.


  7. habendorf říká:
  8. Asi jsem se vyjádřil příliš sroze, musím to napravit :o)

    Článek je opravdu zajímavý, neměl jsem o tom ani tušení. Na zmíněné odkazy jsem bohužel neměl čas :o(


  9. Huggi říká:
  10. v FF (verze nekde kolem 0.7) se mi obcas stavalo ze tim jak to nacitalo dalsi stranky sekalo se nacitani ty aktualni..(respektive delalo to skoro vzdy u fotoalb a podobnejch datove narocnejch obsahu..)…jestli to ted uz funguje dobre nevim..jako uzivatel Opery plne vyuzivam fci ‚zobrazovat ihned‘ takze i na modemu vidim okamzite dost textu kterej muzu cist zatimco se dotahuje zbytek stranky :)


  11. Borek říká:
  12. Díky za pěkný článek. Uživatel GPRS :)


  13. Ikrk říká:
  14. dero: akorát uživatel nejdřív musí vědět, že takováto funkce vůbec existuje, aby si ji mohl vypnout… což IMHO moc uživatelů neví (včetně mě).

    Jinak ale moc zajímavej článek :)


  15. Mixx říká:
  16. Jak už tu zaznělo, je to dvojsečná zbraň. Tato vlastnost mozilly mi přidělala pár hodin práce při tvorbě počítadla přístupů (integrovaného ve skriptu). Všechny prohlížeče se chovaly normálně, jenom mozilla počítala místo jednoho přístupu dva.

    Kdyby to někoho trápilo, tak rešení je kontrola HTTP hlaviček. Něco jako:

    if ($_SERVER['x-moz'] == 'prefetch') { // nevím přesně
        nezapočítávejPřístup();
    }

  17. Leo říká:
  18. Vas priklad s autickem beha, ale pokud jsem zkousel link na html soubor (at uz s rel next nebo prefetch), tak to nezabralo. Mam FF 1.0 ale jeste se kouknu do about:config, dost se v nem porad vrtam :-) Leo


  19. Leo říká:
  20. Takze doplneni – live http headers ukazuje, ze si FF linkovany html soubor vyzadal, server vratil 200 OK, ale z nejakeho duvodu ho proste nestahl (cely). Je tam nejake velikostni omezeni (ma ted cca 800 kB). Leo


  21. Leo říká:
  22. "Tato vlastnost mozilly mi přidělala pár hodin práce při tvorbě počítadla přístupů (integrovaného ve skriptu)."

    Pokud jde o pocet navstevniku webu tak je to jedno, stejne pracujete s nekakou intergraci v case (timeoutem), ne? Akorat to mate statistiky pro danou stranku – zapocitate shlednuti uzivatelem, a ona je to jen navsteva prohlizece :-) Leo


  23. Filosof říká:
  24. Link prefetching jsem zatím ignoroval, ale zrovna teď vytvářím jeden webík, kde by mohl mít smysl :-) Ďýk.


  25. crackonosh říká:
  26. Dero, jen taková nesouvisející poznámka ohledně češtiny, máš to psaní jednotek trochu popletené, píšeš:

    …64 kilobitového připojení…dosahovat velikosti 50kB a větší

    Ale je to přesně naopak, tedy…

    …64kilobitového připojení…dosahovat velikosti 50 kB a větší

    Normálně takové věci přejdu bez povšimnutí, ale měl jsem za to, že si na podobných věcech zakládáš :)).


  27. Acci říká:
  28. Link Prefetching není jen záležitostí Mozilly, ale podporuje ho třeba i "Google Web Accelerator":http://webaccelerator.google.com/.


  29. Arcao říká:
  30. To mi připomíná ten spot o tom načítání CSS souboru bez použití tagu link. Prostě přes HTTP hlavičku LINK. Myslím, že to bylo tehdy publikováno na Sově v Síti.


  31. power leveling wow říká:
  32. wow power leveling buy wow gold


  33. cheap products říká:
  34. imfdksaf china wholesale distributor We sell bulk wholesale


  35. Dropship říká:
  36. Party Dancing Fun Ecommerce Fulfillment Copy Life

    OMG! I like it~


  37. Dollar Items říká:
  38. It's so gid! Alloying golden ring Alloying jewelry sets Alloying jewelry sets with oil palting


  39. shox r4 říká:
  40. We look forward to your company becoming one of our respected customers, and would appreciate jordan 13 fusion polo shirt jordan 8 fusion any of your inquiries and sincerely hope to enjoy a fruitful long-term business relationship with clients from all over the world to share in the mutual benefits. Please go through our complete product catalog and company profile to visit more products.


  41. hollister říká:
  42. hollister good that


  43. abercrombie fitch říká:
  44. It's always nice when you can not only be informed, but also engaged! abercrombie and fitch


  45. tiffany uk říká:
  46. Well said, such a person should be a good sentenceedtiffany uk eyebrow with this as well458745 hjuhyybv


  47. UGG Classic Crochet Boots říká:
  48. The wool of Ugg Classic Crochet Boots are very good thermal insulation capacity. So these Sheepskin Boots will keep your feet warm and dry in cold weather. Ugg Boots is a must have in your collection in winter.


  49. oil paintings říká:
  50. I hope you never stop! This is one of the best blogs Ive ever read. You've got some mad skill here, man. I just hope that you don't lose your style because you're definitely one of the coolest bloggers out there. Please keep it up because the internet needs someone like you spreading the word. oil paintings discount paintings


  51. jordan 17 shoes říká:
  52. jordan 17 shoes


Zanechte komentář





Můžete použít Texy! formátování.
Pokud se obsah boxů níže mění, zatímco píšete, potom žádné číslice nevyplňujte. V takovém případě antispam funguje, pouze se prohlížeči nepovedlo skrýt tento box.