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
- Oficiální popis link prefetchingu na webu Mozilly (doporučuji pro dodatečné informace)
- Mozilla prefetching (Simon Willison)
- Co je to link prefetching? (Acci)
- Prefetching na edochan.com

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
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í.
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.
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(
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 :)
Díky za pěkný článek. Uživatel GPRS :)
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 :)
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:
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
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
"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
Link prefetching jsem zatím ignoroval, ale zrovna teď vytvářím jeden webík, kde by mohl mít smysl
Ďýk.
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áš :)).
Link Prefetching není jen záležitostí Mozilly, ale podporuje ho třeba i "Google Web Accelerator":http://webaccelerator.google.com/.
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.
wow power leveling buy wow gold
imfdksaf china wholesale distributor We sell bulk wholesale
Party Dancing Fun Ecommerce Fulfillment Copy Life
OMG! I like it~
It's so gid! Alloying golden ring Alloying jewelry sets Alloying jewelry sets with oil palting
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.
hollister good that
It's always nice when you can not only be informed, but also engaged! abercrombie and fitch
Well said, such a person should be a good sentenceedtiffany uk eyebrow with this as well458745 hjuhyybv
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.
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
jordan 17 shoes