CYAN
MAGENTA
YELOW
CYAN
BLACK
MAGENTA
E N C Y K L O P E D I E
Uživatelská trpělivost je časovanou bombou na webu. Vše začíná v okamžiku, kdy se uživatel nedostane na vaše stránky z důvodu jejich pomalosti. Jako webdesigner musíte počítat s tím, že k dispozici máte pouze několik málo vteřin pro zobrazení obsahu. Po této době návštěvník ztrácí trpělivost a odchází z vašeho – ani nenačteného – webu. Vy ztrácíte eventuálního zákazníka a s ním i peníze. Nemůžete počítat s tím, že každý váš navštěvník bude mít rychlé připojení k internetu. Nemá a v dohledné době ani mít nebude. Převážná většina uživatelů internetu se připojuje pomocí pomalého dial-upu o rychlosti 56 kbps a tak je problém v rychlosti načítání webových stránek především problémem vaším. Návštěvníci instinktivně dávají přednost rychlejším stránkám – proč do této skupiny nepatří i váš web? Tato kniha vám pomůže zmenšit velikosti vašich stránek a zrychlit tak podstatným způsobem jejich načítání. Dozvíte se, jak zmenšit HTML, CSS, webovou grafiku, multimediální soubory, JavaScript a další prvky stránky. Po přečtení knihy dokážete uplatnit uvedené postupy a sami poznáte rozdíl v rychlosti načítání vašich stránek!
ZONER software, s.r.o. významný producent software v oblasti digitální fotografie, počítačové grafiky a multimédií, poskytovatel internetových služeb, souvisejících s prezentací na internetu a e-komercí, a nakladatelství odborné literatury.
Z obsahu
• Optimalizace webové grafiky • Minimalizace multimédií • Optimalizace pro vyhledávače • Techniky optimalizace na straně serveru
www.zoner.cz
• Řada případových studií
E N C Y K LO P E D I E W E B D E S I G N E R A Pod tímto logem vycházejí publikace určené pro každého, kdo se zajímá o tvorbu webových stránek. Od ryze praktických příruček a průvodců až po komplexní publikace o všem, co potřebuje webdesignér při každodenní práci. Na vydavatelský plán a výhody, které můžete získat, se informujte na adrese vydavatelství.
ZONER software, s.r.o., Koželužská 7, 602 00 Brno
obal_speed_2.indd 1
MAGENTA
YELOW
KATALOGOVÉ ČÍSLO: ZR402
ISBN 80-86815-02-1
Zoner Press tel.: 543 257 244 fax: 543 257 245 e-mail: knihy@zonerpress.cz http://www.zonerpress.cz
CYAN
© Foto: Jiří Heller, www.heller.cz
Fotografie z nabídky fotobanky HELLER.CZ
BLACK
9 7 9 8 0 8 6
Zrychlete své www stránky!
Anrew B. King
a JavaScript
BLACK
W E B D E S I G N E R A
ENCYKLOPEDIE WEBDESIGNERA
Zrychlete své WWW stránky
• Psychologie výkonu • Odezva: 8 vteřin ± 2 • Tok ve webdesignu • Optimalizace HTML • Optimalizace DHTML: CSS
YELOW
Zrychlete své WWW stránky! • Postupy pro efektivní
zmenšení webových stránek.
• Pokročilé metody optimalizace HTML, CSS a JavaScriptu.
• Úpravy webové grafiky
a minimalizace multimédií.
• Možnosti komprimace webových stránek.
• Psychologie výkonu a tok ve webdesignu.
• Optimalizace klíčových slov pro vyhledávací servery.
• Techniky
optimalizacena straně serveru.
• Množství případových studií a praktických postupů.
Andrew B. King Andrew B. King
www.zonerpress.cz
8 1 5 0 2 2
CYAN
MAGENTA
YELOW
BLACK 26.3.2004 13:04:13
Zrychlete své WWW stránky!
ZRYCHLETE své WWW STRÁNKY!
© Foto: Jiří Heller
Andrew B. King
Authorized translation from the English language edition, entitled SPEED UP YOUR SITE: WEB SITE OPTIMIZATION, 1st Edition, 0735713243 by KING, ANDREW B., published by Pearson Education, Inc, publishing as New Riders; Copyright © 2003. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. CZECH language edition published by ZONER software s.r.o., Copyright © 2004 Autorizovaný překlad anglického vydání nazvaného SPEED UP YOUR SITE: WEB SITE OPTIMIZATION, první vydání, 0735713243, autor KING, ANDREW B., vydal Pearson Education, Inc, ve vydavatelství New Riders; Copyright © 2003. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována nebo rozšiřována žádnou formou nebo způsobem, elektronicky ani mechanicky, včetně fotokopií a natáčení, ani žádnými jinými systémy pro ukládání dat bez výslovného svolení Pearson Education, Inc. České vydání vydal ZONER software s.r.o., Copyright © 2004.
Zrychlete své WWW stránky! Autor: Andrew B. King Copyright © ZONER software s.r.o. Vydání první v roce 2004. Všechna práva vyhrazena. katalogové íslo: ZR402 Zoner Press ZONER software s.r.o. Koželužská 7, 602 00 Brno Překlad: Jan Gregor, Roman Slavičinský, Václav Šimek Odpovědný redaktor: Miroslav Kučera © Foto: Jiří Heller, HELLER.CZ s.r.o., www.heller.cz © Cover: Ing. Pavel Kristián Informace, které jsou v této knize zveřejněny, mohou být chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývajících důsledků. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani distribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí. Veškeré dotazy týkající se distribuce směřujte na: Zoner Press ZONER software s.r.o. Koželužská 7, 602 00 Brno tel.: 532 190 883, fax: 543 257 245 e-mail: knihy@zoner.cz http://www.zonerpress.cz
ISBN 80-86815-02-1
Obsah O autorovi
11
O přispívajících autorech
12
O technických korektorech
13
Poděkování
14
Pošlete nám svůj názor
16
Předmluva
17
Úvod
18
Každá stránka může těžit ze své optimalizace
19
Kdo by měl číst tuto knihu
20
Komu není tato kniha určena
21
Jak pracovat s touto knihou
21
Doprovodná webová stránka
22
Konvence
23
Poznámky
23
Psychologie výkonu
25
Doba odezvy: Osm vteřin, plus – mínus dvě
27
Rychlost: klíčový prvek použitelnosti
29
Stručná historie výkonu na webu
30
Emoční počítače
31
Modely uživatelského hodnocení kvality
31
Automatizované testování kvality
31
Doba odezvy a uživatelská spokojenost
33
Míra opuštění webu a prahy pozornosti
37
Sladitelnost
40
Shrnutí
42
Poznámky
43
Tok ve webdesignu
49
Tok a Mihaly Csikszentmihalyi
49
Co způsobuje tok na internetu
51
Navození toku ve webdesignu
55
Shrnutí
56
Poznámky
56
Optimalizace kódu: HTML a XHTML
59
Optimalizace HTML
61
Co je optimalizace HTML?
62
Zvýšení složitosti = vyšší přenos dat
62
Jak moderní prohlížeče pracují s HTML
65
Jak optimalizovat HTML
66
Shrnutí
81
Poznámky
82
Pokročilá optimalizace HTML Tipy na optimalizaci tabulek
85 85
Optimalizace formulářů
102
Zkracování URL
108
HTML a komprimace
110
Shrnutí
112
Poznámky
113
Extrémní XHTML
115
Výhody XHTML
116
XHTML versus HTML
118
Syntaktická pravidla XML
122
Konverze z HTML do XHTML
128
Optimalizace XHTML
129
Shrnutí
133
Poznámky
134
Případová studie: PopularMechanics.com
135
Automatická optimalizace
139
Ruční optimalizace
140
Shrnutí
146
Optimalizace DHTML: CSS a JavaScript Optimalizace CSS
147 149
Aplikujte styly rozvážně
150
Odstraňte prázdné místa
151
Zkraťte komentáře
151
Minimalizujte požadavky HTTP
152
Používejte jednoduché selektory a substituce
152
Seskupování
155
Dědičnost
157
Vrstvení stylů pro rychlost
158
Zkrácený zápis vlastností
158
Optimalizace barev v CSS
167
Délkové jednotky: vše je relativní
169
Shrnutí
170
Poznámky
171
Pokročilá optimalizace CSS
173
Optimalizace pravidel CSS
173
Substituce
176
Tabulky a CSS
191
Řízení layoutu CSS
192
Shrnutí
195
Optimalizace JavaScriptu na rychlost stažení
197
Kdy se rozhodnout pro optimalizaci
197
Ořežte přebytečné
198
Aplikujte JavaScripty rozvážně
200
Minimalizujte HTTP požadavky
201
Zkracujte a mapujte
204
Drcení a zatemňování kódu
206
JavaScript a komprimace
209
Shrnutí
210
Poznámky
211
Optimalizace JavaScriptu na rychlost vykonání
213
Designérské úrovně
214
Změřte dopad vašich změn
214
Algoritmy a datové struktury
215
Zjednodušte svůj kód refaktorizací
216
Minimalizace interakcí DOM a I/O
217
Lokální optimalizace
222
Vylaďování výrazů
234
Shrnutí
236
Poznámky
237
Případová studie:DHTML.com
Optimalizace grafiky a multimédií Optimalizace webové grafiky
239
243 245
Získávání a příprava obrázků
246
Optimalizace souborů JPEG
247
Optimalizace souborů GIF
257
Optimalizace souborů PNG
264
Doba stažení: počet paketůversus velikost stránky
270
Na dohled: JPEG2000 a vektorovězaložená grafika
271
Shrnutí
272
Poznámky
274
Minimalizace multimédií
277
Základy multimédií
277
Komprimace a optimalizace audia
289
Optimalizace videa
296
Optimalizace formátu PDF
309
Shrnutí
313
Případová studie: Apple.com
315
Záložka Output
316
Záložka Tracks
316
Záložka Image
316
Záložka Adjust
317
Záložka Encode
317
Záložka Audio
317
Konečné výsledky
318
Optimalizace pro vyhledávače Optimalizace klíčových slov
319 321
Velký obrázek
321
Průvodce pro optimalizaci klíčových slov
324
Jak na pavouky
337
Charakteristika dobře hodnocených stránek
338
Shrnutí
340
Poznámky
341
Případová studie: PopularMechanics.com a iProspect.com
343
PopularMechanics.com
343
iProspect.com
348
Pokročilé techniky optimalizace
353
Techniky optimalizacena straně serveru
355
Server-Side Includes
356
Výhody SSI: rychlost a široká kompatibilita
357
Nevýhody SSI
358
Ladění modulu mod_include
358
Detekce prohlížeče na straně serveru
360
Zkracování URL s mod_rewrite
372
Optimalizace formulářů a CGI
379
Už žádné www
382
Shrnutí
383
Poznámky
384
Komprimace na webu
387
Algoritmy pro textovou komprimaci
388
Komprimace obsahu
389
Komprimace obsahu na straně klienta
391
Komprimace obsahu na straně serveru
394
Komprimace obsahu s proxy serverem
410
Nástroje na měření výkonnosti
411
Co nás čeká
413
Shrnutí
413
Poznámky
414
Případová studie: Yahoo.com a WebReference.com
417
Zkracování odkazů na Yahoo.com
417
Zkrácení WebReference.com
419
Poznámky
422
Kapitola 4 Pokročilá optimalizace HTML
Zkracovat lze pouze kód HTML, který je využit pro zobrazení stránky v prohlížeči. Pro úplnou optimalizaci HTML se musíte do kódu více ponořit a změnit jej. Tato kapitola popisuje, jak vyladit tabulky, zoptimalizovat formuláře, zkrátit adresy v odkazech a zkomprimovat HTML – to vše pro dosažení maximální rychlosti stažení a zobrazení stránky. Poslední dvě techniky vyžadují zvláštní kroky na serveru, které vysvětlím i v této kapitole, ale především v kapitole 17, Serverově orientované techniky a v kapitole 18, Komprimace webu.
Tipy na optimalizaci tabulek Je škoda, že tabulky přišly před CSS. Mnoho designérů, kteří navrhují design stránek s přesností na jeden pixel, bývá často rozčarováno, když zjistí, jak málo toho HTML nabízí pro ovlivnění spolehlivého umístění všech prvků na stránce. Někteří průkopníci, například David Siegel1, který představil trik používající jedno-pixelový neviditelný GIF, zjistili, že k hrubému rozmístění prvků na stránce je možné použít tabulky. Následovala exploze používání tabulek. Tabulky byly původně zamýšleny pro zobrazování tabelovaných dat a jejich nadměrné používání pro design doslova znečistilo web na miliardách stránek zbytečnými formátovacími strukturami. S příchodem moderních prohlížečů uznávajících standardy je možné tabulky nahradit lepší alternativou kterou je CSS2. Ale protože je tato část věnována tabulkám, předpokládám, že bych měl hovořit o technikách, které urychlí jejich zobrazení.
86
Zrychlete své WWW stránky!
Složité tabulky = pomalé zobrazení Používání tabulek pro zalamování složitých stránek mnohdy vede k pohromě. Obsah nacpaný do tří nebo čtyř sloupců ve struktuře, která byla původně vyvinuta pro uchovávání vědeckých dat, je velmi vzdálen původní myšlence webu definované organizací W3C. Designéři pracující s HTML editory ve WYSIWYG režimu obvykle zalomí stránku do jedné velké tabulky, do které vloží celý obsah. Často je tento obsah rozdělen na další tabulky, které mohou obsahovat opět velké množství dalších tabulek. Problém spočívá v tom, že výpočty velikostí tabulek jsou dynamické a navzájem provázané. Veškeré takové "spletitosti" musí být prohlížečem "rozmotány" a zpracovány, což je jeden z důvodů, proč je tak mnoho webových stránek zobrazováno pomalu, dokonce i s použitím velmi rychlého připojení k internetu. Čím je tabulková struktura složitější, tím je její zobrazování pomalejší, zejména při použití obrázků, které ji vyplňují nebo určují její rozměry. Každý z těchto obrázků generuje jeden požadavek HTTP, čímž výrazně zpomaluje zobrazení stránky. Řešení, jak urychlit tabulky, spočívá v předávání pouze takového množství informací prohlížečům, které je nezbytně nutné k vytvoření struktury a zobrazení obsahu a také v redukci složitosti tabulky. Zkuste tabulky co nejvíce zjednodušit a "rozmotat". Pro naformátování tabulek použijte CSS, místo obrázků na pozadí použijte barvy a pokud je to možné, definujte tabulky s pevnými rozměry. Úplně nejlepším řešením je ale používat na zalamování obsahu prvky div a CSS2 místo tabulek. Ale tím se bude zabývat jiná kapitola (kapitola 8, Pokročilá optimalizace CSS). Začněme tedy s optimalizací tabulek.
Umožněte postupné zobrazování Pokud mají tabulky dostatek informací, mohou se vykreslovat postupně podle toho, jak přicházejí jednotlivé řádky namísto toho, aby prohlížeč čekal na všechny údaje, než je začne zobrazovat. Pokud chcete, aby prohlížeč vykresloval tabulku během jednoho průchodu kódem, musíte specifikovat počet řádků v tabulce a jejich šířku. Tuto informaci předáte prostřednictvím prvků colgroup a col. Pokud mají některé sloupce relativní šířku, je potřeba také určit šířku tabulky. Pokud prohlížeč nedostane tyto přesné údaje, zpracovává tabulku pomocí dvou-průchodového algoritmu, přičemž se při prvním průchodu zjišťuje počet sloupců. Předáním přesných informací o struktuře tabulek můžete tedy urychlit jejich zobrazení.2 Řádky a sloupce v tabulkách lze seskupit, aby se daly formátovat jako skupiny. V prohlížečích vyhovujících standardům – například Internet Explorer 5 pro Mac, Internet Explorer 6, Netscape 6 a Opera 6 – získáte sloučením atributů ohromné úspory. Pomocí atributů frame, rules a border je pak možné řídit, jak se zobrazí externí rámec tabulky a jak se budou aplikovat interní pravidla.
Seskupování řádků Řádky v tabulce mohou být použitím prvků thead, tfoot nebo tbody seskupeny do hlavičky, patičky nebo těla. Tyto skupiny se mohou formátovat odděleně a používat na tisk delších, vícestránkových tabulek, u kterých se má informace z hlavičky/patičky tisknout na každé stránce.
Kapitola 4 – Pokročilá optimalizace HTML
87
Například: <table frame="border" rules="groups"> <thead> <tr> ...informace v hlavičce... <tfoot> <tr> ...informace v patičce... <tbody> <tr> ...první řádek datového bloku jedna... <tr> ...druhý řádek datového bloku jedna... <tbody> <tr> ...první řádek datového bloku dva... <tr> ...druhý řádek datového bloku dva... <tr> ...třetí řádek datového bloku dva... </table>
Prvek tfoot se musí objevit ještě před prvkem tbody, takže prohlížeč může zpracovat patičku ještě před obdržením všech údajů o řádcích. Tato optimalizace používaná CALS3 je vhodná ke zpracování velmi dlouhých tabulek. Umožňuje, aby byla patička zobrazena bez čekání na zpracování celé tabulky4. Ale pro naše účely je mnohem důležitější schopnost seskupování a specifikování vlastností sloupců.
Seskupování sloupců Seskupování sloupců umožňuje strukturální zalamování tabulek a definovat styl sloupců pomocí CSS nebo atributu rules v prvku table. Tabulka obsahuje jednoduchou implicitní skupinu sloupce (není uveden colgroup) nebo jednu a více přesně určených skupin sloupců oddělených prvkem colgroup. Prvek col umožňuje přiřazení vlastností jednomu nebo více sloupcům. Pro vícenásobné sloupce se používá atribut span5. S použitím atributu span v prvku colgroup lze specifikovat na jednom místě atribut width pro více sloupců. Atribut width je také možné vložit do každého prvku col. Efektivnější je pochopitelně definice stejně širokých sloupců prostřednictvím span: <colgroup span="10" width="60"> </colgroup>
88
Zrychlete své WWW stránky!
Pro porovnání, zde je alternativa s col: <colgroup> <col width="60"> <col width="60"> ...celkem deset prvků col... </colgroup>
Zjištění počtu sloupců V HTML 4.01 je možné vymezit počet sloupců v tabulce dvěma způsoby:
• použitím prvků col nebo colgroup (v tomto pořadí) • pokud neexistují prvky sloupce, je vymezen počet sloupců vyžadovanými řádky Počet sloupců v tabulce je shodný s řádkem s více buňkami používajícími span. Definováním údajů o sloupcích si mohou prohlížeče ušetřit průchod dovnitř tabulky ke zjištění, kolik sloupců je potřeba.
Zjištění šířky sloupců Jakmile prohlížeč zjistí počet sloupců, počítá šířku každého sloupce. Šířku sloupce lze zadat třemi způsoby:
• Pixely – pevná šířka (například: width="125"), umožňuje postupné vykreslování tabulky. • Procenta – procentuální šířka (například: width="33%"), je určena poměrným rozdělením vodorovného prostoru dostupného pro tabulku a pochopitelně také umožňuje postupné zobrazování tabulky.
• Relativní – relativní šířka (například: width="2*"), je založena na vodorovném prostoru vyžadovaného tabulkou. Pokud máte tabulku s pevnou šířkou, prohlížeč ji může stále vykreslovat postupně. Pokud však tabulka nebude mít pevnou šířku, prohlížeč musí obdržet veškeré údaje z tabulky před tím, než stanoví rozměry tabulky6. Postupné zobrazování tabulky tedy umožníte tím, že stanovíte počet a šířku sloupců. Pokud ne, prohlížeč bude muset počkat, než dorazí veškeré údaje nutné k rozdělení místa na stránce. Výpis 4.1 demonstruje příklad použití. Výpis 4.1 – Specifikace šířky sloupců v tabulce <table width="100%"> <colgroup> <col width="33%"> <col width="67%"> </colgroup> <tr>
Kapitola 4 – Pokročilá optimalizace HTML
89
<td colspan="2"> <p>horní navigační řádek (název webu a reklama)</p> </td> </tr> <tr> <td> <p>levý navigační sloupec</p> </td> <td> <p>oblast pro hlavní obsah stránky</p> </td> </tr> <table>
Pevná nebo procentuální šířka umožňuje postupné zobrazování tabulky. Protože designéři nemají možnost ovlivnit nastavení tabulek a velikost písma na straně uživatele, spoléhání se na pevnou šířku tabulek je poměrně riskantní, pokud obsah nemá předem známou velikost.
Sloučení atributů v tabulce Další místo se dá také ušetřit používáním výchozích hodnot a sloučením specifických atributů do atributů globálních. Pro definici zarovnání obsahu v buňkách použijte pouze jeden <tr align="center"> místo mnoha výskytů <td align=’center‘>. Ještě lepší je ale použití skupin řádků (pomocí thead nebo tbody) pro definici celých bloků řádků. Výpis 4.2 uvádí příklad takového zápisu. Výpis 4.2 – Sloučené atributy <table width="100%" frame="border"> <colgroup> <col width="33%"> <col width="67%"> </colgroup> <tr> <td colspan="2"> <p>horní navigační řádek (název webu a reklama)</p> </td> </tr> <tbody align="center"> <tr> <td> <p>levý navigační sloupec</p> </td> <td>
90
Zrychlete své WWW stránky! <p>oblast pro hlavní obsah stránky</p> </td> </tr> </tbody>
</table>
V HTML jsou uzavírací značky pro prvky skupin řádků a col nepovinné (</thead>, </tbody>, </tfoot> a </col>, nicméně jsou povinné v XHTML. Pozor, některé verze Netscape 4 chybují při uzavírání prvku </colgroup> pro div a mohou vést při vykreslování k nepředvídatelnému chování prohlížeče. Jednoduše řečeno, pro nastavení zarovnání jednoho nebo více sloupců můžete používat colgroup namísto individuálního zarovnávání každé buňky. Například, používejte tento zápis pro zarovnání jednoho sloupce: <colgroup align="center">
Nebo použijte tento zápis pro zarovnání skupiny tří sloupců: <colgroup align="center" span="3">
Tato technika funguje v prohlížečích vyhovujícím standardům, přičemž ve starších prohlížečích je půvabně degradována (zarovnání doleva). Pochopitelně, kromě výše uvedeného, je možné pro nadefinování col a colgroup použít CSS (viz výpis 4.3). Výpis 4.3 – Tabulka s využitím CSS <style type="text/css"> <!-table#skel {width:100%;} col#left {width:33%;} col#right {width:67%;} tbody#main {text-align:center;} --> </style> </head> <body> <table id="skel" frame="border"> <colgroup> <col id="left"> <col id="right"> </colgroup> <tr> <td colspan="2"> <p>horní navigační řádek (název webu a reklama)</p> </td> </tr>
Kapitola 4 – Pokročilá optimalizace HTML
91
<tbody id="main"> <tr> <td> <p>levý navigační sloupec</p> </td> <td> <p>oblast pro hlavní obsah stránky</p> </td> </tr> </tbody> </table>
Všechny tyto informace dejte dohromady a nasypte je do jednoho tabulkového turbokompresoru.
Rychlé vykreslování tabulky V prohlížečích, které podporují CSS27, jako jsou IE6 a NS6, mohou být tabulky významně urychleny s použitím nové vlastnosti table-layout. Tato vlastnost umožňuje designérům rozhodnout, jaký algoritmus prohlížeč použije pro zalomení buněk, řádků a sloupců.
Pevný layout tabulky Prohlížeč využívající nejrychlejší fixovaný algoritmus table-layout nenastavuje vodorovný rozměr tabulky podle obsahu buněk, ale podle šířky tabulky, sloupců, okrajů a mezer. Tento algoritmus je rychlejší, protože vodorovný zlom tabulky není závislý na obsahu každé buňky, ale na definovaných nebo výchozích šířkách. Takže prohlížeč zobrazuje tabulku již při prvním průchodu a nemusí tak čekat na načtení zbývajících části tabulky. To je užitečné zejména u delších tabulek. Jak funguje fixní návrh tabulky? V každém sloupci určuje první buňka, jejíž šířka není nastavena na automatickou hodnotu, šířku daného sloupce. Následující buňky v daném sloupci jsou pak nastaveny na stejnou šířku, bez ohledu na jejich obsah. Při použití fixního algoritmu pro zobrazení tabulky musí být první buňka v každém sloupci nejširší. Vlastnost table-layout může nabývat tří hodnot:
• auto (implicitní hodnota) • fixed • inherit Například: table { table-layout: fixed } col.sum { width: 10em }
92
Zrychlete své WWW stránky!
Použití výchozí hodnoty auto může být neefektivní. Vyžaduje až dva průchody prohlížeče pro správné zjištění rozměrů tabulky, protože musí zpracovat celý obsah tabulky. Pokud nastavíte vlastnost table-layout na fixed, nastavíte pevné šířky sloupců (a volitelně i jejich pevné výšky) pro celou tabulku. Šířky sloupců jsou odvozeny od šířek definovaných prvky col (neautomatické hodnoty) nebo pokud nejsou použity, podle první buňky v každém sloupci. Bez prvků col je prohlížeč schopen zalamovat tabulku ihned, jakmile dostane data prvního řádku. S prvky col již není tento krok potřebný. Buňky v následujících řádcích již neovlivňují šířky sloupců. V prohlížečích, které podporují CSS2, dokáže takové nastavení podstatně zvýšit výkon zpracování a zobrazování tabulek. Microsoft prohlašuje, že použití vlastnosti table-layout nastavené na hodnotu fixed přináší až 100násobné urychlení v Internet Exploreru 6 a vyšším. Pevný algoritmus umožňuje postupné zobrazování tabulky, najednou po řádcích. Výpis 4.4 uvádí příklad. Výpis 4.4 – Příklad tabulky s fixním layoutem <style type="text/css"> <!-table#skel {table-layout:fixed;width:100%;} col#left {width:33%;} col#right {width:67%;} tbody#main {text-align:center;} --> </style> </head><body> <table id="skel" frame="border"> <colgroup> <col id="left"> <col id="right"> </colgroup> <tr> <td colspan="2"> <p>horní navigační řádek (název webu a reklama)</p> </td> </tr> <tbody id="main"> <tr> <td> <p>levy navigační sloupec</p> </td> <td> <p>oblast pro hlavni obsah stranky</p> </td> </tr>
Kapitola 4 – Pokročilá optimalizace HTML
93
</tbody> </table>
Řízení přetečení Pro jistotu je potřeba ověřit, zdali nejsou všechny ostatní buňky ve sloupci širší než první buňka. Pokud obsah přesahuje buňku, je zalomen, nebo pokud zalomení není možné, je ořezán. V CSS2 existuje vlastnost overflow, která umožňuje ovlivnit chování buněk v případě, že obsah přesahuje velikost jakéhokoli bloku, včetně prvku td. Zde je příklad použití: <style type="text/css"> <!-table#fixed {table-layout:fixed;width:100%;overflow:hidden;} --> </style> </head> <body> <table id="fixed">
Vlastnost overflow může nabývat čtyř hodnot:
• visible – obsah, který se nevejde do svého bloku, se zobrazí (výchozí hodnota) • scroll – do bloku se vloží rolovací lišta (scrollbar) bez ohledu na přetečení • hidden – obsah, který se nevejde do svého bloku, bude ořezán • auto – obsah, který se nevejde do svého bloku, bude vizuálně ořezán a přidá se rolovací lišta pro zobrazení skrytého obsahu
Tabulka s fixním layoutem v praxi Na WebReference.com jsem zkoušel použít algoritmus s vlastností table-layout nastavenou na hodnotu fixed. Dosáhl jsem smíšených výsledků. Výpis 4.5 uvádí část ze zdrojového kódu. Výpis 4.5 – Tabulka s fixním layoutem v praxi <style type="text/css"> ... TABLE#f{table-layout:fixed;width:100%} COL#a{width:9px;} COL#b{width:134px;} COL#c{width:9px;} COL#d{width:65%;} COL#e{width:8px;} COL#f{width:1px;} COL#g{width:125px;}
94
Zrychlete své WWW stránky!
</style> ... <TABLE id=f WIDTH="100%" BORDER=0 CELLSPACING=0 CELLPADDING=0> <colgroup><col id=a><col id=b><col id=c><col id=d><col id=e><col id=f><col id=g></colgroup> <TR VALIGN=TOP><TD WIDTH=9 BGCOLOR="#FFCC00"><IMG SRC="/t.gif" WIDTH=9 HEIGHT=1 ALT=""></TD> ... 134 px TD následují...
Poté, co jsem nastavil správně úvodní buňky, tabulka na obrazovce doslova lítala. Bohužel, narazil jsem na dva problémy. Vložené tabulky s reklamou bez zadaných rozměrů občas skočily dolů a v NS6.x texty přetékaly při uživatelském zvětšení písma na hodnotu "Větší" (larger). První problém se podařilo eliminovat přidáním valign="top". Druhý byl o něco zapeklitější. Uživatelské zvětšení písma v Netscape 6.x občas rozlije text mimo pevné sloupce, i když se při opětovném načtení stránky tento problém již neprojeví. IE5 pro Mac a IE6 pro Windows pracují se zvětšenými písmy lépe. Přetečení je možné korigovat použitím vlastnosti overflow, nicméně to nemá v NS6.x žádný efekt. Pokud použijete striktní DOCTYPE, vlastnost overflow bude aplikována na celý objekt HTML. Obrázek 4.1 ukazuje, co se stane v Netscape 6.2, pokud použijete tabulku s fixním layoutem (table { table-layout: fixed }) a pak v prohlížeči zvětšíte velikost písma.
Obrázek 4.1 – Tabulka s fixním layoutem v Netscape 6.2.
Kapitola 4 – Pokročilá optimalizace HTML
95
Tento problém částečně vyřeší zvětšení původních rozměrů buněk. Nicméně, v Netscape 7 je tato chyba v přetékání a v algoritmu fixované tabulky při použití zvětšeného písma již opravena. Viz obrázek 4.2.
Obrázek 4.2 – Tabulka s fixním layoutem v Mozille 1.0 (Netscape 7).
Pokud používáte v tabulkách obsah s pevnou šířkou, například obrázky, použijte algoritmus fixed. Pokud má mít obsah buněk proměnlivou šířku, otestujte tabulku i při zvětšeném písmu. Osobně se mi osvědčila specifikace šířky prostřednictvím atributu col. Zde je příklad z úvodní stránky WebReference.com: <table id=f width="100%" border=0 cellspacing=0 cellpadding=0> <colgroup><col width=9><col width=134><col width=9><col width="65%"><col width=8><col width=1><col width=126>
Nebo lépe s využitím stylů: table#f{table-layout:fixed;width:100%} table#f{overflow:auto;} col#a{width:9px;} col#b{width:134px;} col#c{width:*;} col#d{width:8px;} col#e{width:1px;} col#f{width:126px;}
96
Zrychlete své WWW stránky!
Výhodným kompromisem je podmíněné vkládání fixních a "přetékajících" (overflow) stylů pro prohlížeče, které podporují CSS2 – jako třeba IE6 a vyšší nebo Netscape 7 a vyšší, který je odvozen z Mozilly 1.0. V delších tabulkách používejte colgroup a col. Všude, kde je to možné, použijte table-layout a hodnotu overflow. Také nastavení výšky sloupce může vést ke zvýšení rychlosti vykreslování, protože syntaktický analyzátor (parser) prohlížeče může začít zobrazovat řádek bez předchozího zkoumání obsahu všech buněk v řádku, aby zjistil, jaká je výška řádku.
Zjednodušujte Mám pocit, že na všech školeních o sebezdokonalení osobnosti řečníci nabízejí samé zjednodušování. Zjednodušte svůj život; odstraňte vše, co není podstatné. Snižte hladinu vašeho stresu. Berte Echinaceu. Dýchejte! Stejné rady se hodí i na tabulky (možná s výjimkou dýchání a echinaceových kapek). Prohlížeče obvykle zpracovávají tabulky v několika fázích. Nejprve se podívají do buněk, aby se podle obsahu mohla stanovit velikost. Pak dynamicky nastavují velikost buněk tak dlouho, dokud není spočítána celá tabulka. Odstraňte z tabulek vše, co není podstatné. Odstraňte všechny ikonky, které jste přidali někdy vloni. Zahoďte tyto reklamní a členské odkazy, které vám stejně nepřinášejí žádné peníze. Zbavte se pomalu stahujících javových tickerů se zprávami. Není to lepší? Nechejte pouze nové a aktuální věci. Dokonce budu souhlasit s ponecháním vašeho loga určeného k propagaci vaší značky. Nyní budou vaše tabulky opravdu sprintovat. Zpět vložte pouze to, co chtějí vaši uživatelé nebo ještě lépe – nechejte je rozhodnout. Odstranění takových přebytečností je v tomto případě jedním z nejefektivnějších způsobů urychlování tabulek a webových stránek.
Vnořování tabulek Čím hlouběji vnoříte tabulky do jiných tabulek, tím pomaleji se budou zobrazovat. Po jejich kompletním stažení musí prohlížeč provést spoustu výpočtů, aby správně zjistil jejich velikost. Mnohokrát vnořované tabulky zaměstnávají procesory uživatelů, zejména, pokud patří mezi ty pomalejší. Protože prohlížeč musí jako první spočítat nejhlouběji vnořenou tabulku, a pak se postupně vracet zpět k rodičovským (nadřazeným) tabulkám, je nejlepší vytvářet takový kód, který maximálně redukuje počet vnořených tabulek a úrovně vnoření.
Rozdělení tabulek Na mnoha webech se používá jedna jediná tabulka pro vložení celého obsahu stránky. V naprosté většině případů to znamená, že prohlížeč tuto tabulku zobrazí až po kompletním stažení jejího rozsáhlého obsahu a po dokončení výpočtu rozměrů. To dost podstatně zpomaluje její zobrazení. Řešení je jednoduché – rozdělit takové tabulky na více samostatných tabulek – jako řezy ovocného koláče.
Kapitola 4 – Pokročilá optimalizace HTML
97
Vnímaná rychlost Na horní část stránky použijte jednoduchou a rychle se stahující tabulku. Do této první tabulky vložte užitečný obsah, jako například vyhledávací box nebo navigační pruh, takže se uživatelé mohou rychle zorientovat. Prohlížeče zobrazují samostatné tabulky postupně, takže nejprve nabídněte něco, na co se uživatelé mohou dívat, zatímco se stahuje zbytek stránky. Takové stránky působí na pohled rychlejším dojmem, i když se mohou celkově stahovat pomaleji. Na obrázku 4.3 je příklad stránky CNET.com.
Obrázek 4.3 – Horní navigační pruh na CNET.com
Bez přehánění se dá říci, že první tabulka doslova vystřelí na stránku a dává uživateli něco, s čím může okamžitě pracovat. V kapitole 1 bylo řečeno, že velmi důležitá je zpětná vazba. Pokud se okamžitě objeví nějaký užitečný obsah, uživatelé pravděpodobněji kliknou na vaše další odkazy. Na obrázku 4.4 je příklad z úvodní stránky WebReference.com.
Obrázek 4.4 – Navigační pruh na WebReference.com
Na druhé straně, pokud se objeví něco, co není důležité, bude to uživatele nudit. Přednostním zobrazením loga a reklamy uživatel nedostává žádný užitečný obsah a nemůže se hned na stránce orientovat. Obrázek 4.5 ukazuje příklad:
Obrázek 4.5 – Onlinenewspapers.com.
Návrh stránky se třemi sekcemi Podobná strategie zahrnuje změnu designu tabulek ke zvýšení hodnoty stránky pro vyhledávací servery a zároveň viditelnému zrychlení zobrazování. Typická stránka se třemi sekcemi obsahuje nahoře označení firmy (logo), eventuálně reklamu, v levém sloupci navigaci a v pravém sloupci hlavní obsah stránky. Výpis 4.6 uvádí příklad.