Ajax (Asynchronous JavaScript and XML) etkileşimli web
uygulamaları yaratmak için kullanılan birgeliştirme tekniğidir. Örneğin Google
Maps, Google Suggest ya da Gmail gibi sayfalarda, zengin devingen içerikli web
uygulamaları Ajax'la hazırlanmaktadır. Bu uygulamalar klasik web uygulamalarına
benzese de pluginlere veya tarayıcıya özel unsurlara gereksinim duymazlar.
Geleneksel web uygulamaları, ekrandaki görüntünün ancak bir kısmı değişse bile
tüm HTML sayfalarının tekrar yüklenmesini gerektirecek şekilde hazırlanmaktaydı.
Ancak son birkaç yılda JavaScript ve CSS gibi teknolojilerin olgunlaşması
sayesinde,tüm belli başlı web tarayıcılarında çalışan, yüksek düzeyde devingen
özellikli sayfalar ortaya çıkmıştır.Bir HTML sayfası, JavaScript kullanarak
sunucusuna asenkron olarak bilgi gönderebilir ve sunucudan XML belgeleri
çekebilir. Çekilen XML belgeleri JavaScript tarafından kullanılarak HTML
sayfasının Document Object Model (DOM) u değiştirilir veya günlenir . Bu
etkileşim modeli son zamanlarda Asenkron JavaScript ve XML – yani Ajax olarak
adlandırılmaya başlanmıştır, ancak bu model aslında yeni değildir. Bu teknikler
daha önce Windows platformunda Internet Explorer içinde (remote scripting
terimi kullanılarak) ve Java pluginleri ve appletlerle birlikte uzun süre
kullanılmıştı. Ancak performans ve tüm web tarayıcılarında kullanım – yani
taşınabilirlik açısından, JavaScript in XMLHttpRequest nesnesini getirmesiyle
bugünkü Ajax ortaya çıktı diyebiliriz.
Ajax aşağıdaki teknolojilerden bir veya birkaçını kullanır:
* Web sayfalarını görüntülemek için HTML (ya da XHTML).
* JavaScript tarafından yönetilen, devingen görüntü elde
etmek ve gösterilen bilgiyle etkileşimisağlamak için kullanılan Document Object
Model
* Web sunucusuyla asenkron olarak veri alışverişi sağlamak
için XMLHttpRequest nesnesi. Alışverişiçin genellikle XML kullanılmasına rağmen
HTML veya diğer formatlar da kullanılabilir.
Sonuçta Ajax bir teknoloji değildir, ancak yukardaki
teknolojileri kullanan bir web uygulaması tekniğidir,yani bir web uygulaması
mimarisidir.
Ajax'ın kullanım alanları
Ajax'ın kullanım alanlarından bazıları aşağıda verilmiştir:
*Gerçek zamanlı olarak form verisi geçerlik denetimi: Bir
formdaki kullanıcı idleri, seri numaraları,posta kodları gibi alanlarda, sunucu
tarafından daha form teslim edilmeden geçerlik denetimi yapılması.
* Otomatik tamamlama: Email adresi, adsoyad,şehir gibi bazı
form alanlarının, kullanıcı giriş yaptığı esnada otomatik olarak tamamlanması.
* Masterdetail formları: Bir istemci HTML sayfasında,
kullanıcı master verileri seçtiğinde detaykısmının sayfa baştan yüklenmeden
görünmesi örneğin bir ürün kategorisine tıklandığında okategoriye ait
ürünlerin, sayfa tazelenmeden ekrana yazılması.
*Kullanıcı arabirimi için sofistike kontroller: Ağaç
yapıları, menüler, progress bar gibi kontrollerin tüm sayfa yeniden yüklenmeden
kullanılabilmesi.
*Sayfa üzerinde veri tazelenmesi: Maç skorları, borsa
bültenleri, hava durumu gibi sürekli değişenbilgiler için HTML sayfasının
sunucuyu sürekli sorgulayarak değişiklikleri ekrana getirmesi.
* Sunucu tarafı bildirimleri: İstemciyi bir mesajla uyarma,
sayfa bilgilerini tazeleme veya bir istemciyibaşka bir sayfaya yönlendirme gibi
işlemler için HTML sayfasının sunucudan olay bildirimi istemesi.
Başka kullanım alanları da olmasına karşın, bu liste, Ajax
sayesinde etkileşimli web uygulamalarınıneskiye göre daha çok şey yapabildiğini
göstermektedir.
Peki, avantajlari nelerdir?
Ajaxin sundugu belki de en önemli avantaj, güncellemelerde
sayfanin degil istenilen kisimlarin sunucuya gidip gelmesidir. Mesela seçilen
ile göre ilçelerin DropDrownList’e gelmesi gerektigini düsünelim.Eger Ajax
olmazsa, sayfadaki tüm islemlerle birlikte ile bagli ilçe istegide sunucuya
gidecek, cevap alinip sayfa tekrar güncellenecek. Bu sirada eger sayfanin
postback(güncellenme) olayi kontrol etmeden pageLoad() kismina bir kod
yazmissak bunlarda güncellenecegi için hem extra zaman kaybi hem belki yapilan
islemlerin kaybina sebeb olacak. Ama ajax kullanirsak sunucuya sadece ile bagli
ilçelerin istegi gidip cevap dönecek ve sadece gerekli DropDrownlist
güncellenecek. Böylece hem zaman kazanmis hemde ag trafigini hafifletmis
olacagiz. Ayrica ekrandaki güncelleme daha hizli oldugu için kullanicilar için
can sikan beklemelerin önüne geçmis oluruz.
Aslinda bu isleri yapmak için javascript da kullanabiliriz.
Öyleyse neden ajax? Muhakkakki islemler sirasinda baska bir sayfaya veri veya
istek gönderilmeden yapilmiyorsa javascript en hizli kontrol yöntemidir. Ama
veritabani sorgusu gibi bir islem yapilacaksa ajax bir adim öne geçiyor. Bu da
bizim javascripti her alanda kullanamamamiza neden oluyor. Ve tabi yazinin
basinda da belirttigim gibi, javascrip’in farkli browserlarda çikardigi
sorunlar ajax da yok çünkü ajax kendi içinde “Browser Compatibility” denen bir
kütüphaneyi dahil ederek bu sorunu asmayi hedefliyor.Ayrica html, asp.net, php
vs.. gibi birçok dil varken, yeni bir dil sunmayip,bu diller ile entegre çalisarak bizi dil ögrenmek için
zaman kaybetmekten ve bunun çetrefillerinden kurtariyor. Bu zamanda kullanimini
ögrenerek ve denemeler yaparak bir adim öne geçmek mümkün. Belkide ajax’in kisa
sürede bu kadar yayginlasmasinin nedeni, birçok dil ile entegre olup sanki yeni
bir tool eklenmek kadar kolay ve kisa sürede ögrenilebilmesidir.
Dezavantajlari?
Elbette özellikle gelistirilmekte olan ve “gelismis” denen
tüm yazilimlarda hatalar ve buglar mevcuttur.
Ajax’da da bazi sorunlar ve dezavantajla hatta bazen avantaja dönüsen
dezavantajlar vardir.
Ilk olarak herkesin en çok bahsettigi ileri-geri butonu
sorunu. Sayfalar dinamik olarak olusturuldu için geri tusuna basildiginda
sayfamizin yapisina göre bazen sorunlar çikmakta çünkü tarayici dinamik
sayfalari hafizasinda tutmuyor. Bu sorunu asmak için bazi çalismala
yapilabilir, ek kodlar, ileri geri butonlarinin pasif yapilmasi vs. ama tabi bu
bizim için ek çalisma, ek zaman ve ek bant genisligi demek.
Diger bir dezavantaj da arama motorlarinda
indexlenememesidir. Söyleki ajax içerisinde yüklenen verileri sayfanin kaynak
kodlarinda göremezsiniz ve arama motorlari da bunu göremeyecegi için
indexleyemez. Özellikle ziyaretci sayisinin önemli oldugu ve bunun maddi
tarafindan yararlanan siteler için bu gerçekte büyük bir dezavantajdir. Ayni
durumun dinamik olusturululan tüm sayfalar içinde geçerli oldugu ve bunun tag
vs. gibi yöntemlerle asilabilecegini de unutmamak gerekir. Tabi bu durum bazen
avantaja da dönüsebilir. Mesela kisilere özel bilgilerin oldugu sayfalarin
arama motorlarinda çikmasini istemeyiz, ya da resmi bir kurum için yapilan web
uygulamalarinda içerik gizli olmalidir muhakkak. Bu durumlarda ajax avantaja
dönüsmektedir.
Ajaxin javascripten kaynaklanan dezavantajlarini da
unutmamak lazim, mesela javascript kullanmak bilgisayari bir parça yavaslatir
çünkü javascript kullanicinin bilgisayarinda yorumlanan bir dildir ve yavas
bilgisayarlari daha da yavaslatir.
Ajaxin kullandigi XMLHTTPREQUEST bir ActiveX nesnesidir.
Bazi bilgisayarlarda ActiveX otomatik engellendigi için ajax çalismayabiliyor.
Bunun için çözümler var elbette ama bu hala eski sürüm explorerlar için bir
problem
Ajax ile ilgili daha pek çok avantaj ve dezavantaj
bulunmakta. Pek çok insan ajaxi kullanmaya çoktan baslamisken, bazilari ise
karsi çikiyor. Fakat özellikle
güncellemelerin gerektigi islemlerde, mesela kosula bagli doldurulacak
alanlarda, ajax bize birçok kolaylik sağlamaktadır.
Ajax'ın geleneksel yöntemlerle karşılaştırılması
Ajax uygulamaları Internet üzerinden bir sunucuda çalışmak
yerine nerdeyse kullanıcının makinasında yer alırmış gibi gözükürler. Bunun
nedeni şudur: sayfalar günlenirler, ancak tamamen yenilenmezler. Bir http istemi
oluşturan her kullanıcı davranışı, Ajax motoruna (Ajax engine) bir JavaScript
mesajı şeklindedir. Her kullanıcı istemine karşı gelen yanıt – örneğin basit
veri denetimi, bellekteki verileri değiştirme vs, sunucuya geri dönen bir
yolculuk şeklinde olmaz. Ajax motoru bunları kendi başına halleder. Eğer motor
sunucunun yanıt vermesini gerektiren bir şeye ihtiyaç duyarsa – işlenmek üzere
bilgi teslim edilmesi, ekstra arayüz kodu yüklenmesi veya sunucudan yeni veri
çekilmesi – motor bu istemleri asenkron olarak, genellikle XML kullanarak
yerine getirir. Bu esnada kullanıcının uygulamayla etkileşimi aksamaya uğramaz.Geleneksel
web uygulamaları temel olarak kullanıcı tarafından tamamlanmış formları
sunucuya teslim ederler. Sunucu yeni bir sayfa göndererek yanıt verir. Sunucu
her seferinde yeni bir sayfa yolladığından,bu uygulamalar yerel kopyalara göre
daha yavaş çalışırlar.Öte yandan Ajax uygulamaları, web sunucusuna istemlerini
sadece gerekli olan verileri elde etmek için gönderirler. Bu gönderim esnasında
genellikle XML tabanlı web servisleri kullanılır. İstemci tarafında,JavaScript
sunucu yanıtlarını işleme koyar. Sonuç ise sunucu tarafına daha verimli yanıt
veren bir arayüz olacaktır, zira web tarayıcısı ve sunucu arasında yapılan veri
alışverişi büyük ölçüde azaltılmıştır. Web sunucusunun işlem zamanından da
büyük ölçüde tasarruf edilmiş olur, çünkü bu işlemlerin çoğunu istemci yapmaktadır.