Blog.hr

Ajax


Tekst koji slijedi bio je namijenjen objavljivanju, ali na kraju nije doživio tu sudbinu, pa ga u skraćenom i aktualiziranom obliku objavljujem ovdje. Udahnite, popijte čašu vode, slijedi hrpa teksta... :-)

Mitologija

Kad se spomene Ajax zacijelo vam je prva asocijacija slavni nogometni klub koji na svojem grbu nosi lik jednog antičkog junaka. Ajax je bio jedan od najvećih grčkih junaka pod Trojom. Sukobio se i sa samim Hektorom, izvukao je remi pa su izmijenili darove. Ajax je dobio Hektorov mač. Ljubav prema oružju bijaše jaka u Ajaxa pa se s Odisejom nadmetao oko toga kome će pripasti Ahilejovo oružje koji je poginuo na dobro poznat način baš u skladu s najboljim Murphyjevim zakonima. Ajax nije bio zadovoljan odlukom suda koji je smatrao da je Odisej hrabriji i da on zaslužuje oružje pa počeše smišljati osvetu. Božica Atena ga je spriječila u njegovom naumu učinivši ga mahnitim i bezumnim pa je siroti Ajax navalio na stado ovaca misleći da su Danajci, a najvećeg ovna je svezao umislivši si da je to Odisej. Kad mu je Atena vratila razum i kad je vidio što je napravio, Ajax se ubio, bacivši se na Hektorov mač. Ako u svojem starom prašnjavom Schwabu tražite Ajaxa nećete ga naći jer je on tamo naveden kao Ajant.

Novi način izrade web aplikacija

Čisto sumnjam da su kumovi iz kompanije “Adaptive Path” bili nadahnuti spomenutim antičkim junakom, najvjerojatnije im je kratica “sjela na volej” dok su nabrajali tehnologije koje se koriste u izradi web aplikacija. Jesse James Garrett, osnivač kompanije Adaptive Path, napisao je članak u kojem predstavlja novu tehnologiju i objašnjava njezino ime. Taj članak je imao vrlo velik utjecaj među web developerima pa je većina njih prihvatila naziv, a Ajax je postao vrlo popularan i često spominjani termin.
Ajax je kratica od Asynchronous JavaScript + XML i riječ je o zajedničkom nazivu za već postojeće tehnologije uz pomoć kojih se rade interaktivne web aplikacije.

Njegovi sastojci su:

- XHTML i CSS za prezentacijski sloj
- DOM (Document Object Model) za pristup, stvaranje i rad s objektima na stranici
- XML i XSLT za prijenos podataka
- XMLHttpRequest objekt za asinhroni dohvat podataka sa servera
- JavaScript koji objedinjuje sve spomenute tehnologije i omogućava izvršavanje aplikacije na klijentskoj strani

Ajax nije skup strogo definiranih procedura ili protokola po kojima se rade aplikacije. To je samo zajednički naziv za web aplikacije koje se rade na način koji uključuje korištenje pet navedenih elemenata. Ajax je postojao i prije nego što je doživio svoje krštenje.

Osnovna razlika između “starih” web aplikacija i “klasičnih” (desktop) programa je brzina izvođenja i odaziva na korisničke zahtjeve. Promjene prikaza, učitavanje novog skupa podataka, provjera unosa, sve to zahtjeva slanje zahtjeva prema web serveru, njegovu obradu te slanje novostvorene stranice natrag u korisnikov web preglednik. Čak i na lokalnoj mreži takve web aplikacije su spore i nespretne za korištenje. Složenije aplikacije s puno zahtjeva u Internet okruženju skoro su neupotrebljive jer od korisnika zahtjevaju puno čekanja, a o potrošnji bandwidth-a da i ne govorimo. Iako postoje mehanizmi provjere podataka na korisničkoj strani (uz pomoć JavaScript-a), svaka ozbiljnija aplikacija mora odraditi provjeru i na serverskoj strani što znači dupli posao za developere i veća mogućnost pojavljivanja grešaka i sigurnosnih propusta.

Ajax omogućava developerima izbjegavanje višestrukog učitavanja cijele stranice. Cijela stranica s osnovnim elementima učitava se na samom početku, a zatim se komunikacija s web serverom svodi na niz manjih asinhronih zahtjeva i odgovora pri čemu se smanjuje ili u većoj mjeri eliminira vrijeme korisničke neaktivnosti i čekanja na odgovor koje je jedan od uzroka nespretnosti “starih” web aplikacija.

U “pravom životu”

“Gdje ima tih Ajax aplikacija, to još nisam nigdje vidio?” možda se pitate nakon cijele ove priče. Sigurno ste već koristili Ajax aplikaciju, a da uopće niste znali da ju koristite. Google je predvodnik u razvoju takvih aplikacija. Gmail, Google Groups, Google Maps, samo su neke od njih. Jeste li zavirili u njihov izvorni kod?

Dolazak u Google nekih ključnih ljudi, koji su sudjelovali u razvoju Mozille ili Internet Explorera, svojedobno je protumačen kao nastojanje da Google napravi svoj preglednik. U svjetlu novih aplikacija sada je izvjesno da je to malo vjerojatno. Google-u nije bitno da napravi još jedan preglednik koji bi se trebao boriti za svoje korisnike, već mu je puno važnije da napravi razvojnu okolinu i aplikacije koje će se izvršavati u već postojećim preglednicima.

Predviđanja govore da će operativni sustavi postati sve manje važni, a da će njihovu ulogu polako preuzimati preglednici. Google se, uz pomoć Ajaxa, sprema za to novo vrijeme. Već sada neki korisnici širokopojasnih veza kažu kako je rad u Gmailu puno brži nego u nekim konkurentskim aplikacijama (npr. Outlook), pogotovo ako nešto tražite u hrpi svojih starih poruka. Onda svaka dvojba o brzini prestaje.

Ajax.NET

VisualStudio i ASP.NET pojednostavnili su razvoj web aplikacija. Developerima “klasičnih” desktop aplikacija prijelaz u vode web programiranja postao je lakši nego ikada. Rezultirajuće web aplikacije su “event driven”. Za svaku kontrolu na stranici vi možete definirati jedan ili više događaja. Sve je lijepo i krasno. Da li je stvarno riječ o raju, kako nov način rada i tehnologiju nazivaju neki informatički novinari?
Ne, bliže je čistilištu. ASP.NET koristi ponovno učitavanje stranice kod obrade događaja. JavaScript se uglavnom koristi za slanje glavne forme i poprilično je zapostavljen. Implementacija i korištenje XMLHttpRequest objekta bilo je predviđeno tek za 2.1 inačicu ASP.NET-a. Ekipa iz Redmonda na samom početku Ajax hajke zaostajala je za vodećim trendovima.

Tamo gdje veliki zakažu, uskaču mali nezavisni developeri. Ajax.NET već postoji, a rad na njemu započeo je jedan nezavisni developer. Činilo se da bi se lako moglo dogoditi da Schwarz uskoro postane Microsoft djelatnik, a da Ajax.NET ugledamo u 2.0 inačici ASP.NET-a. Ali nešto se izjalovilo, Schwarz je Ajax.NET izdao kao open source, a Microsoft je započeo razvoj na svojem rješenju kojeg je nazvao Atlas.
Najpoznatija Java inačica Ajaxa zove se Direct Web Remoting, ili kraće DWR.

Jedini pravi alat

Developeri koji koriste vizualne alate teško da u ovom trenutku mogu pomišljati na razvoj Ajax aplikacija, potrebno je otvoriti haubu i uprljati ruke sirovim kodom. Takva situacija je samo trenutno, sutra će se zacijelo pojaviti alati koji će omogućiti jednostavan klikabilan razvoj takvih aplikacija. Google je jedan od najboljih kandidata za izdavanje nekog novog svetog grala za developere novog doba. U ovom trenutku jedini pravi alat za razvoj Ajax aplikacija je običan uređivač teksta/koda.

To ne predstavlja nikakav problem jednom PHP developeru jer je on naviknut na takav način rada, ali korisnik VisualStudia koji vuče i ispušta kontrole te rijetko kada pogleda u html kod, on bi mogao imati problema. To je shvatio i Microsoft, ali malo su pretjerali u opisivanju složenosti takvog, 'starog' načina razvoja, pa su ga počeli uspoređivati s nuklearnom fizikom. Njihov Atlas će biti rješenje za one koji nisu nuklearni fizičari. ;-)

Peti element

JavaScript objedinjuje sve navedene tehnologije koje čine Ajax, ali pravi peti element koji je novi način razvoja aplikacija učinio mogućim je XMLHttpRequest objekt. On omogućuje da uz pomoć JavaScript-a uputite serveru HTTP zahtjev pri čemu čekanje na odgovor ne znači zaglavljivanje aplikacije već se ona i nakon zahtjeva normalno izvršava, a odgovor se obrađuje kad pristigne.

XMLHttpRequest je prvi put implementiran od strane Microsofta u Internet Exploreru kao ActiveX objekt, a kasnije je implementiran kao sastavni objekt u Mozilla porodici preglednika. Tim koji radi na Operi dugo je ignorirao postojanje tog objekta, ali su, unatoč tome što on nije bio dio važećih web standarda kojih se oni dosta čvrsto drže, bili prisiljeni poraditi na njegovoj implementaciji.

Bilo bi zanimljivo doznati unutarnje priče iz Microsofta koje bi objasnile nastanak tog objekta i razloge za njegovo dugo nekorištenje. Netko u Microsoftu napravio je dobar posao, ali izgleda da to drugi nisu uvidjeli. Zacijelo je tom zapostavljanju kumovao i zastoj u razvoju IE-a koji je nastao nakon što je do nogu potukao Netscape i postao vodeći preglednik.

Nakon detaljnog upoznavanja s ASP.NET-om i njegovim eventima jedna od prvih stvari koja mi je pala na pamet i koju sam rekao kolegi je bila: 'pa zašto to nisu napravili uz pomoć XMLHttpRequest objekta, kad im stranice ionako ne rade bez JavaScripta'. Bilo je to nekoliko mjeseci B.A. (before Ajax). Nisam ni slutio da će Microsoft tako brzo reagirati...

Korištenje ovog objekta preporuča se samo u web aplikacijama, ali ne i kod običnih web stranica koje moraju biti dostupne što većem broju posjetitelja neovisno o tome kakav preglednik i na kakvom uređaju oni koriste. Web stranice sastoje se od niza stranica povezanih linkovima, a njihov slijed i lokaciju možete pratiti i birati u svojem pregledniku. Kod Ajax web aplikacije vi niste u mogućnosti vratiti prethodno stanje pritiskom na gumb back u pregledniku, a niti spremanje u bookmark neće vam osigurati povratak na istu stranicu s istim podacima. Za razliku od “starog” načina, s osvježavanjem cijele stranice, u popisu posjećenih stranica vašeg preglednika neće se više puta ponavljati ista adresa iste stranice već će u njemu samo jednom biti navedena početna adresa aplikacije koju koristite.

Sudbina web Ajaxa i njegovi protivnici?

Ajax je način rada uz pomoć kojeg vaša web aplikacija može svojom brzinom i upotrebljivošću postati konkurentna klasičnim desktop aplikacijama. Dok podrška za Ajax tehnologije ne postane prisutna u većini preglednika i uređaja koji pristupaju vašem web serveru, zaboravite na njegovo korištenje na običnim web stranicama.

Ono što nam omogućuje Ajax moguće je napraviti i uz pomoć nekih drugih tehnologija koje su se udomaćile u web preglednicima. Flash i Java appleti također nam omogućuju stvaranje tankog klijenta koji će raditi na sličan način, ali rad s njima je bliži klasičnoj izradi desktop aplikacija pa gubimo konfigurabilnost i mogučnost dinamičkog kreiranja stranica i mijenjanja njihovog izgleda na onaj način kako nam to omogućavaju XHTML, CSS, DOM...

Nedostaci

Ajax nije skup točno definiranih pravila i procedura pa je svaka diskusija o njegovim nedostacima ili prednostima pomalo izlišna jer neki od developera može u svojoj implementaciji izbjeći nedostatke dok će ih drugi potencirati, a možda dodati i nove.

Kritičari najčešće zamjeraju Ajax aplikacijama što se ne ponašaju poput klasičnih web stranica, tj. da ne radi back gumb, trenutno stanje stranice ne možete dodati u bookmark/favorites jer se ne može jednoznačno odrediti s onime što je navedeno kao trenutna adresa (URL). Po meni te primjedbe nemaju previše smisla jer od web aplikacije očekujemo da ona sama vodi korisnika i da sadrži kompletnu navigaciju. Svi oni koji su radili makar i jednostavne web aplikacije, znaju da im je back gumb uzrokovao više problema nego što im je koristio. URL bi se mogao izmjeniti na taj način da u sebi sadrži podatke potrebne za rekonstrukciju bilo kojeg stanja stranice, ali na taj način bi se drastično smanjila sigurnost stranice i omogućilo zlonamjernicima vrlo lako hackiranje aplikacije.

Ajax je daleko od idealne tehnologije i teško da možete očekivati da ćete sada u kratkom roku vrlo efikasno svoje klasične aplikacije zamijeniti web aplikacijama. Medvjeđu uslugu Ajaxu će učiniti svi oni koji će ga koristiti tamo gdje treba i gdje ne treba samo da dokažu svijetu da oni to mogu. Ali to je problem s kojim se nose sve nove tehnologije.

Da li treba koristiti Ajax? Ukoliko u svojem poslu još niste koristili nijednu od tehnologija koje ga sačinjavaju, najvjerojatnije vam Ajax ne treba. Ako ste koristili te tehnologije onda možda već i koristite Ajax. Početnik ste i u nedoumici ste kuda i kako krenuti. Upoznajte najprije spomenute tehnologije. Kad ih dobro upoznate sami ćete doći do odgovora na ovo pitanje.