Hlavní navigace

Akta X 0507

Petr Cimprich

Slovník webového vývojáře letos obohatil nový pojem: AJAX. Podíváme se mu trochu na zoubek. Dalším tématem budou jako obvykle novinky od W3C: aktualizované specifikace XLink 1.1, xml:id 1:0, SPARQL a XLS/FO 1.1.

AJAX

Dnešním hlavním tématem je AJAX (Asynchronous JavaScript and XML), údajně nový a převratný přístup k tvorbě webových aplikací. O AJAXu se hodně mluví už někdy od února, takže většina webových vývojářů asi neměla šanci novému buzzwordu uniknout, ale pro pořádek stručně připomenu, o co se jedná.

AJAX překonává (chcete-li, porušuje) základní princip fungování současného webu, který by se dal jednou větou zformulovat třeba takto: Akce uživatele v prohlížeči vyvolá požadavek na server, který vrátí odpověď v podobě dokumentu (X)HTML, jenž je vzápětí prohlížečem zobrazen namísto dokumentu původního. V ajaxové aplikaci akce uživatele také vyvolá požadavek na server, ale požadujícím (to jest HTTP klientem) není prohlížeč jako takový, nýbrž javascriptový kód spuštěný v prohlížeči s využitím objektu XMLHttpRequest. Od serveru se pak očekává vrácení dokumentu XML, který je uložen v datových strukturách zmíněného objektu. Po dokončení požadavku je spuštěna určená funkce, jež typicky modifikuje objektový model dokumentu (X)HTML (aka DOM), tedy provede změnu zobrazené stránky bez nutnosti opakovaného načtení.

Tento princip samozřejmě není nijak nový. Stejného efektu weboví vývojáři dosahují už roky pomocí skrytých rámečků. Novinkou AJAXu je jen to, že místo triku se skrytým rámečkem používá speciální objekt a že si tato kombinace technologií našla nové, zvučné jméno. Ve prospěch AJAXu zapracoval i čas – prohlížeče vyspěly a lépe a jednotněji implementují DOM zobrazeného dokumentu, což zvýšilo přenositelnost ajaxového kódu na přijatelnou úroveň. K popularitě AJAXu nepochybně také přispěly některé nedávné excelentní weby, k nimž se tato technologie hlásí (např. Google Suggest nebo Google Maps).

Objekt XMLHttpRequest není součástí žádné standardní specifikace, ale je to typický příklad úspěšného de facto standardu. Přišel s ním Internet Explorer už ve verzi 5. Mozilla jej implementuje od verze 1.0; Firefox ho tedy měl už někdy ve phoenixových časech. Safari podporuje XMLHttpRequest od verze 1.2, Opera od verze 7.60. To je podpora více než dostatečná.

AJAX dovoluje provádět věci v klasických webových aplikacích nevídané. Může komunikovat se serverem při událostech, u kterých by to uživatel nečekal (např. stisk klávesy nebo pohyb myši). Díky tomu, že dokáže využívat čas, kdy uživatel zdánlivě nic nedělá, a že nemusí vždy stahovat a překreslovat celou stránku, může AJAX přinést dramatické zvýšení efektivity. Z hlediska architektury přibývá na klientské straně nová vrstva; po načtení ajaxové stánky prohlížeč přestává být uživatelským agentem a mění se v běhové prostředí pro kód řídící jiné agenty.

Jako vše má i AJAX svou odvrácenou stranu. První nevýhodou je zvýšená složitost. Použití objektu XMLHttpRequest je sice méně kryptické než skryté rámečky, ale i tak je psaní a hlavně debugování ajaxového kódu zcela jinde, než na co jsou weboví vývojáři zvyklí. Dalším problémem může být přenositelnost. Čím víc toho od prohlížeče požaduji, tím větší je nebezpečí, že si některé prohlížeče s aplikací neporadí. AJAX se pohybuje na hraně; vyžaduje kvalitní implementaci ECMAScriptu včetně rozšíření XMLHttpRequest, DOM, CSS2. Nejde bohužel vždy jen o specifikace a dohodnutá rozhraní. Změním-li v DOMu atribut definující vlastnost CSS, musím ještě vědět, zda prohlížeč tuto změnu hned překreslí. Některé aspekty AJAXu míří nepříjemně hluboko do zákulisí implementace prohlížečů. Část uživatelů by mohla, aspoň ze začátku, negativně vnímat i skutečnost, že se ajaxová aplikace nechová podle zažitých webových očekávání a ne vždy je jasné, co se právě děje.

AJAX se určitě nestane novou dominantní podobou webu, ale budeme se s ním, podle mého názoru, setkávat čím dál častěji. Ve vysoce konkurenčním prostředí komerčních aktivit na webu jsou náročné a nápadité ajaxové aplikace vítaným prostředkem k zaujetí uživatelů.

Specifikace W3C

Následuje obvyklý stručný přehled červencových novinek z W3C. Pracovní skupina XML Core zveřejnila pravděpodobně poslední pracovní verzi specifikace XLink 1.1. Aktuální doporučení XLink 1.0 pro tvorbu komplikovaných odkazů pomocí elementů XML se nikdy příliš neprosadilo a není důvod to očekávat ani u verze 1.1.

Rozhodně větší šance na úspěch má jiná specifikace od téže pracovní skupiny, xml:id 1.0, ze které se již stalo navržené doporučení (Proposed Recommendation). xml:id je jednoduchý a potřebný prostředek pro jednoznačnou identifikaci uzlů bez dalších závislostí. Řada parserů ho implementuje už dnes.

Pracovní skupina RDF Data Access pokročila s pracovní verzí dokumentu SPARQL Query Language for RDF do stavu poslední výzvy ke komentářům (Last Call Working Draft). Standardní dotazovací jazyk pro RDF už tady dlouho chyběl, takže ani SPARQL se o svou budoucnost nemusí obávat.

Last Call je také XSL/FO 1.1 od pracovní skupiny XSL. XSL/FO má své uplatnění a verze 1.1 rozumným způsobem přidává nové v praxi potřebné funkce. Určitě se brzy objeví kvalitní komerční implementace; pro Open Source je zatím už XSL/FO 1.0 příliš velkým soustem, viz stagnující Apache FOP.

Našli jste v článku chybu?