2006-06-09 20:04 napsal Lukáš Havrlant
Není to tak dávno, co si Marty stěžoval na application/xhtml+xml, neboť mu Firefox namísto běžného zobrazení webové stránky vyhodil strašlivou dračí chybu.
Osobně se mi nezdá příliš normální, aby prohlížeč takovou chybu
vyhazoval. Tedy z mě známých prohlížečů se takto chová pouze
Mozilla, takže budu v tomto článku mluvit o ní, Opera se chová
odlišně. Pokud pošlete XHTML stránku jako
application/xhtml+xml, bude se vykreslovat jinak než běžná
HTML stránka. Aby prohlížeč (opakuji, že se takto pokud vím chová jen
mozilla, Safari a ostatní exotické prohlížeče neznám) stránku vykreslil,
musí být XHTML dokument well-formed. Aby byl well-formed, musí být mimojiné
ukončené všechny tagy. V XHTML se musí nacházet kořenový element
html, který obaluje celou stránku. Což znamená, že Mozilla
začne stránku vykreslovat, až když stáhne celý XHTML kód (respektive až
prohlížeč narazí na </html>, pokud budou za tím ještě
nějaké komentáře, nemělo by se na již čekat). Z tohoto je již
jasně vidět první nevýhoda použití application/xhtml+xml
– zdržuje. Pokud nemáme zrovna rychlé připojení k internetu
(asi se ještě pár modemistů najde) a pokusíme se zobrazit nějaký
rozsáhlejší XHTML dokument, počkáme si, zatímco při
text/html by se text objevoval postupně a uživatel by již mohl
spokojeně prohlížeč alespoň část obsahu.
To se ale děje, pokud je vše v pořádku. Je-li váš XHTML dokument
well-formed, kromě pozdějšího vykreslení se toho moc nestane (i když
na běžných stránkách to asi nebude ani znát, obzvláště pokud máte jen
trochu rychlejší internet). Ovšem vtip nastává, pokud vaše stránka není
well-formed. Což se prostě může stát. Nepozornost, špatně napsaný
skript, nedotažený dokument… Co teď? Mozilla používá na parsování
XHTML posílaného jako application/xhtml+xml obecný XML parser,
tudíž pokud tam nelezne jedinou chybku, jediný neukončený tag,
chybějící uvozovky či nedefinovanou entitu, vyhodí dračí chybu a víc se
s tím nemaže. Konec, ze stránky neuvidíte ani prd. Zatímco při
text/html by se prohlížeč snažil vykreslit alespoň něco a
mnohdy by chybu zcela napravil, v případě
application/html+xml prostě a jednoduše ze stránky nezobrazí
nic a uživatel s tím nemůže udělat (maximálně použít jiný
prohlížeč, což ho ovšem nemusí napadnout, že).
Nechce se mi bloumat, jestli je chyba v XHTML anebo v Mozille,
faktem je, že splynutí Mozilly a XHTML může skončit špatně. Nepřijde mi
jako vrchol přístupnosti, že díky jediné chybě, kterou koneckonců nemusí
udělat ani webmaster (nedotažený dokument) se mi nezobrazí ze stránky ani
čárka. Uživatel nepotřebuje vědět, že na stránce se vyskytla chyba
v podobě neukončeného tagu. Stránku by měl kontrolovat validátor, ne
prohlížeč – ten by se měl starat především o vykreslení.
Používání application/xhtml+xml tedy považuji za zbytečný
hazard, neboť tento MIME nepřináší prakticky nic
dobrého, pouze snižuje přístupnost stránky
(používáme-li Mozillu) ať už pozdějším vykreslením (i když
v tomto případě o informace nepřicházíme, pravda, pouze se
může protáhnout čekání) či vyhozením chybného hlášení (zde již
uživatel o informaci přichází).
Potom ještě mohu zmínit obecný problém eXpřístupnosti:
Návštěvník potřebuje na různé stránky různé nástroje. Nezávislost se ztrácí, potřebuje HTML-prohlížeč i XHTML-prohlížeč, aby se dostal k veškerému obsahu.
Prozatím tento problém nenastává, protože snad žádná stránka
neodesílá application/xhtml+xml všem prohlížečům, ale pouze
těm, které tento MIME znají. Jenže jednou…
Já nevím proč furt všichni počítáte, že tam nějaká ta chyba bude. Nebude a nesmí být! Pokud byste třeba tvořili stránku pomocí DOM a pak jenom vyserializovali danou strukturu, těžko by se to stalo. Těžko se to stane i u dalších metod.
A pokud už by se chyba vyskytla, dá se čekat, že je vážná a mělo by se s ní něco dělat, ne ji jenom přehlédnout.
Riziko samozřejmě přichází třeba ve chvíli, kdy začnete vše drtit ručně. Když začnete vypisovat něco, co k ručnímu psaní není vhodné… Přijde mi, že tohle musí zmizet jako první. Konečně už.
Ale může tam být, chyba se prostě může objevit vždycky. Ani Texy! nebylo bezchybné (již je :-)). Kdyby se chyba nemohla vyskytnout, tak bych tu Firefoxí obrazovka smrti patrně nikdy neviděl, ale já ji viděl, několikrát (dobře, nebylo to asi víc jak deset případů, ale i to stačí, vzhledem k tomu, kolik webů application posílá), což znamená, že chyby se dějí.
Navíc co vlastně poslání XHTML jako application přináší dobrého? Možná se najdou konkrétní případy, kdy je application jednodušší, ale obecně je IMHO jednodušší poslat text/html a mohu být v klidu.
Souhlasím s tím, že nevidím důvod (nějakou výhodu) proč používat application/xhtml+xml. Jedině snad jako testovací metodu.
Pomalejší načítání stránek vem čert, je tu ještě jeden důvod – i když si sami sebou jste 100% jistí (je někdo takový, kdo ví, že nikde nikdy neudělal chybu?), má zkušenost říká, že dost velké procento zákazníků má tendence zasahovat do kódu odevzdaného díla.
Bohužel když uděláte nějakou jednoduchou stránku a ještě ke všemu je Váš kód čitelný, můžete vzít jed na to, že nejeden uživatel, který si přečetl dvě kapitoly knihy html pro lamy, se do toho začne obratem vrtat. Sice to můžete svým zákazníkům vysvětlovat jak chcete, ale to je asi tak jediné, co s tím můžete dělat.
No nic, jdu zrovna jednu takovou „předělávku“ opravit.
Opera parsuje dokument s application/xhtml+xml jako XML. Navíc ale (Opera 9) dává při chybě možnost „Reparse document as HTML“. Viz Screenshot
Opera to rieši celkom dobre. Ale na druhej strane, koľko uživateľov pochopí, že „Reparse as HTML“ im zaručí správne vykreslenie stránky?
Já se v případě application/xhtml+xml neobávám ani tak chyb typu neukončený tag či chybějící uvozovky, ale spíš prázdné znaky před vlastní XML deklarací (). Zkoušel jsem posílat správnou hlavičku (xhtml+xml), ale dost často to narazilo právě na tento problém. V případě složitějších projektů je totiž docela problém uhlídat stovky skriptů, aby některý při includování nevyhodil „prázdný znak“. Ono to jde sice doladit, ale jakmile ty skripty aktualizujete častěji, začíná to být nemilý problém… takže jsem se smířil s tím, že raději budu posílat text/html…
thingwath:
Já nevím proč furt všichni počítáte, že tam nějaká ta chyba bude.
Protože svět není bezchybnatý. Protože zkušenosti říkají, že pokud chyba může nastat, pak zřejmě dřív nebo později nastane. Protože je třeba se na takovou eventualitu připravit.
Je otázka, nakolik je taková chyba závažná. Jsou chyby, při nichž je potřeba aplikaci zmrazit – například při narušení bezpečnosti internetového bankovnictví je obrazovka „chyba, nic nefunguje“ namístě.
Myslím ale, že překlep ve zdrojovém kódu webové stránky mezi takové chyby nepatří.
Raději budu riskovat, že se mým uživatelům špatně sestaví strom dokumentu, než že uvidí žlutou obrazovku smrti.
Oswald: je pěkné, že Opera něco takového nabídne, ale kolik lidí ví co znamená „Reparse document as HTML“? Kolik lidí ví co je to vůbec HTML?
Chyba se smaozřejmně může stát, ale neměla a vy proto musíte udělat všechno. Samozřemně pokud se přeruší spojení a stránka se nenačte tak to nejspíš neovlivníte, ale jak často se tohle stává a navíc myslíte si, že by vám to pomohlo, když uživatel uvidí chybu tak si řekně, že prostě se stala chyba a vrátí se pozdějí (neříkám, že všichni), ale když se stránka nedočte ceá může se mylně domnívat, že vaše stránka je „hnusná“ a nic na ní není tzn., že vás to vyjde na stejno ;o)
Přístup Opery kvituji jako krok správným směrem. První krok – ještě to není tak dobré, jak by mohlo být, ale ukazuje to správnou cestu, jak (nejen) s XHTML pracovat ;-)
2thingwathe: Já s Tebou, pro změnu, souhlasím. Jistě chyba se může vyskytnout, ale to je už problém toho, kdo to tvořil.
Příkladem může být, že Vám číšník sice přinese polévku, ale studenou :-) (Ano je to jiná situace, já vím!)
Každý by si měl práci zkontrolovat a pak něco publikovat a ne si začít stěžovat na prohlížeč (ale stejně Opera je Opera, že :-)).
Takže závěrem pro ty, kteří neumějí kódovat bez chyb (nemyslím při vývoji) ať nekódují vůbec, nebo ať používají text/html.
JPAS: To je pekné. Ale pochop, že na stránke nepracuje len jeden človek. A už tu boli spomenuté aj problémy s prenosom (môžu nastať kedykoľvek).
OT: „asi se ještě pár modemistů najde“ – stačí být in a připojit se např. s T-Mobile Edge nebo ještě hůř GPRS.
Malem jsem to neustal. Procpak v tom vsichni vidi takovy problem? Pokud sestrelim (treba xor 255) nahodny bajt v /bin/bash s trochou stesti vyvaznu jen se segfaultem. Pokud sestrelim jeden bajt v kern32.dll, hadejte, jak dopadnu? Co kdyz se pri prenosu poskodi par bajtu souboru dokument.{odt,doc,zip,7z,rar,tar,bz2}? Ja nevidim nic zvlastniho na tom, ze neni mozne pracovat s ne-well-formed daty, je to naprosto normalni. Jasne, byla by to nice feature, kdyby si Mozilla „domyslela“ co a jak, treba jako Opera, ale zakladem by rozhodne mel byt strojove citelny kod.
To, ze si za casu HTML vsichni zvykli porusovat standardy jen proto, ze se jim to libilo, je jejich problem a at tedy potom dal pisou v HTML. Pokud chcete ale posilat XML (coz XHTML rozhodne je), tak sakra MUST be well-formed.
Přesně tak, pokud nevíte jaké výhody vám XHTML může přinést, raději s ním vůbec nepracujte! To je jako byste do dieselu lili benzín, to prostě nemůže fungovat.
Aleš Roubíček
O výhodách XHTML se už snad ani bavit nechci, ale jaké konkrétní a reálné výhody mi může přinést application/xhtml+xml? Zatím jsem tedy přišel pouze na nevýhody.
JPAS:
Takže závěrem pro ty, kteří neumějí kódovat bez chyb (nemyslím při vývoji) ať nekódují vůbec, nebo ať používají text/html.
Napriklad nas na skole ucia, ze ziaden rozsiahlejsi skript(cca 5000 riadkov a viac) sa neda napisat bez chyby(teda osetrit vsetky moznosti vstupov). Jasne zavazne chyby osetrit treba, ale vsetky to proste nieje mozne. A tu je potom otazka, medzi ktore chyby zaradime napr. absenciu koncovej znacky. Btw. ta tvoja „rada“, by skoncila asi tak, ze by sme nemali ziaden internetovy prehliadac, ziaden operacny system… atd atd
Ve finální verzi už Opera 9 „Reparse document as HTML“ nenabízí, z beta verzí tato volba zmizela přibližně v době psaní tohoto článku.
no podla mojho osobneho skromneho nazoru je tato stranka uplne odveci a neodporucam ju nikomu citat lebo sa unudi k smrti kym pri de nakonec:D jednoducho a proste toto je stranka pre totalnych geniov takze ak samozejme pre moju lasku ale no…proste aj tak je to odveci:) tesilo ma:) necitala smo to…racej. heh
2Ondra> ake konkretne vyhody ti teda poskytuje ked ho „nedelas podle specifikace“?
Ja fičím na well-formed XHTML. Je to teraz „IN“. Čo sa týka posielania application/xhtml+xml:
Ja som za všetkými 128-mimi (nová klávesnica). Vždy som sníval o tom, že ak bude čo i len maličká chyba v (predtým) HTML kóde, že celá aplikácia spadne.
Tak je to s programovaním (vynechajte v php skripte bodkočiarku). Áno, áno, viem, že php a XHTML je z trošku iného súdka, ale ja mám dôvod prečo si to myslieť, mám cieľ: aby sa konečne zobrazili moje stránky tak ako chcem všade rovnako.
Komentáře jsou uzavřeny