Jaxer je vytvořen jako modul pro webový server Apache a vydán pod licencí GPL. Tím, že je založen na jádru Firefoxu, získáváme na serveru i pokročilý JavaScript (označovaný jako verze 1.8). Jaxer přidává serverové API pro databáze, soubory, logování, procesy, e-mail, síťovou komunikaci a pomocné funkce.
V případě, že to bude vývojář potřebovat, může na straně serveru dokonce provádět manipulaci s DOM a používat známé knihovny Prototype, Scriptaculous, jQuery, Dojo, ExtJS apod. Já si však myslím, že to je spíš nouzové řešení, protože by spotřebovávalo zbytečně mnoho zdrojů na serveru. Proto se používání těchto knihoven na serveru vyhýbám.

AJAX jako prosté zavolání funkce
Vlajkovou lodí Jaxeru je jeho schopnost umístit vybrané funkce na server a přímo je volat z klientské strany. Jaxer se sám postará o komunikaci a serializaci. Funkce, které mají být umístěny na serveru a volány z klienta, stačí vložit do skriptu s atributem runat="server-proxy"
.
V následujícím příkladu je tímto způsobem definována funkce item
, která vrátí jednoduchý objekt odvozený z argumentu. V praxi by zde proběhl např. dotaz do databáze.
<script runat='server-proxy'>
function item(id){
return {
recordId: id,
moneyAmount: id * 100
};
}
</script>
Pro využití dat ze serverové funkce vytvoříme na klientské straně funkci show, která zobrazí odpověď na webové stránce. Funkci přidáme parametr response, do níž nám Jaxer umístí objekt vrácený serverovou funkcí.
function show(response) {
document.getElementById('asynchro').innerHTML += response.moneyAmount;
}
Nyní už zbývá jenom asynchronně zavolat z klienta serverovou funkci. K tomuto účelu pro nás Jaxer vytvořil na klientovi proxy funkci, kterou nazval stejně jako její serverový protějšek – item. My na ní zavoláme metodu async. Jako první argument jí předáme funkci pro obsluhu odpovědi (funkce show). Jako ostatní argumenty jí předáme hodnoty, které chceme předat serverové funkci (v našem případě jenom id, např. číslo 5):
item.async(show, 5);
Jaxer teď zavolá funkci item a jako argument jí předá číslo pět. Funkce item toto číslo převezme, vytvoří podle něho objekt ( {recordId: 5, moneyAmount: 500}
) a vrátí ho. Funkce show dostane tento objekt jako svůj parametr (response) a zobrazí na stránce jeho peněžní částku response.moneyAmount
.
To je všechno, co jsme museli udělat pro případ asynchronního zavolání funkce. Pokud by nám stačilo zavolat serverovou funkci z klienta synchronně, byl by celý postup ještě jednodušší – pouhé zavolání funkce:
response = item(7);
document.getElementById('synchro').innerHTML += response.moneyAmount;
Prohlédnout si můžete kompletní zdrojový kód tohoto příkladu (asynchronní i synchronní verze) včetně podoby HTML dokumentu, který Jaxer zašle klientovi.
Kategorie dostupnosti zdrojového kódu
Dostupnost zdrojového kódu lze v Jaxeru detailně řídit atributem runat
skriptu. Tento atribut může nabývat hodnot:
- server
- server-proxy
- server-nocache
- both
- both-proxy
- both-nocache
- client
Skript samotný může být přímo vložený do HTML stránky nebo být uvedený jako externí soubor.
Případ server-proxy jsme viděli v ukázce. Taková funkce běží na serveru a lze ji volat pomocí proxy funkce z klienta. Nelze ji volat přímo na klientovi. Na klientovi ani není dostupný její zdrojový kód. To je důležité z bezpečnostních důvodů, takto označíme např. funkce pro přihlášení, u kterých nechceme zbytečně poskytovat vodítka pro napadení serveru.
Hodnota server znamená, že funkce bude dostupná pouze na serveru, a to při základním zpracování stránky i v době callbacků (AJAXu) na tuto HTML stránku (tj. serverová funkce volaná z klienta přes proxy bude schopna na serveru zavolat tuto naši „čistě serverovou“ funkci).
Hodnota server-nocache znamená, že funkce bude dostupná pouze na serveru a nebude na ní vytvořena proxy funkce. Navíc bude dostupná pouze při základním zpracování HTML stránky, nikoliv v době callbacků.
Hodnota both, both-proxy a both-nocache přidává k server variantě schopnost běžet přímo na klientovi. Hodnota client (nebo vynechání atributu runat) znamená, že uvedený zdrojový kód poběží pouze na klientovi (klasický klientský JavaScript).
K dispozici je ještě atribut autoload, který umožňuje automaticky načíst serverový skript pro fázi callbacků. V tomto případě budou k dispozici funkce onoho skriptu a navíc bude vykonán jakýkoliv jeho javascriptový zdrojový kód.
Závěr
Z hlediska zkušeností lze říct, že v Jaxeru v současnosti vyvíjím jednu aplikaci a mám ji v docela pokročilém stadiu. Jaxer mi připadá ze všech server-side javascriptů nejživotaschopnější.
Zdroje
- Portál – lze doporučit jako výchozí stránku pro zkoumání Jaxeru.
- Průvodce – obsahuje vhodné materiály pro detailnější studium.
- Referenční příručka
- Diskusní fóra – zde lze hledat další informace a případně položit dotazy.
- Instalační soubory – lze stahovat instalační soubory pro Linux, Windows i Apple.

Seriál Do hlubin implementací JavaScriptu
Pokud se o JavaScript zajímáte, nepřehlédněte náš seriál, který vás provede jeho jednotlivými implementace a srozumitelně vám vysvětlí problematiku fungování jazyka JavaScript.
- Do hlubin implementací JavaScriptu: 1. díl – úvod
- Do hlubin implementací JavaScriptu: 2. díl – dynamičnost a výkon
- Do hlubin implementací JavaScriptu: 3. díl – výkonnostně nepříjemné konstrukce
- Do hlubin implementací JavaScriptu: 4. díl – implementace v prohlížečích
- Do hlubin implementací JavaScriptu: 5. díl – implementace mimo prohlížeče
- SquirrelFish: reprezentace hodnot JavaScriptu a virtuální stroj
- SquirrelFish: optimalizace vykonávání instrukcí a nativní kód
- SquirrelFish: regulární výrazy, vlastnosti objektů a budoucnost
- SpiderMonkey: zpracování JavaScriptu ve Firefoxu
- SpiderMonkey: rychlá kompilace JavaScriptu do nativního kódu
- V8: JavaScript uvnitř Google Chrome
- Rhino: na rozhraní JavaScriptu a Javy
- Velký test rychlosti JavaScriptu v prohlížečích
Přehled komentářů