AJAX - fakty i mity
Nowa technologia zawsze wywiera wpływ na istniejące aplikacje i infrastrukturę. Czasami uzyskane korzyści okazują się mniejsze od problemów, które musimy pokonać, aby wdrożyć nowe rozwiązanie. AJAX to jedna z nowinek w wirtualnym świecie, o której krąży wiele nie do końca prawdziwych informacji. O czym tak naprawdę należy wiedzieć i pamiętać, aby się nie rozczarować? Jak AJAX może wpłynąć na naszą sieć?
Akronim AJAX oznacza Asynchronous JavaScript and XML (Asynchroniczny JavaScript i XML). Nawet pełna nazwa nie oddaje w całości, czym jest AJAX, gdyż upraszcza historię tej techniki i jej implementacje. AJAX zmienia sposób działania aplikacji webowych. Pozwala na zerwanie z cyklem wyślij-czekaj-powtórz, który jest typowy dla starych aplikacji działających po stronie serwera. AJAX to przede wszystkim lepsza interakcja klient-serwer. AJAX oferuje ciągłe uaktualnianie dokumentu, bez konieczności jego przeładownia, co znacznie wpływa na funkcjonalność aplikacji.
Dzięki nowej technice użytkownik otrzymuje lepszy interfejs, mnogość opcji i szybszą aplikację. Z drugiej strony, te dobrodziejstwa mogą wymagać dodatkowego monitoringu i zabezpieczeń. Należy także mieć na uwadze wydajność sieci i serwerów.
JavaScript to podstawa
Aplikacje AJAX napisane są z wykorzystaniem JavaScript i bazują na obiekcie komunikacyjnym XMLHttpRequest. Ze względu na brak ujednoliconego standardu implementacje w przeglądarkach mogą się znacząco różnić.
Dzięki Ajaksowi JavaScript zajmuje obecnie ważną pozycję w świecie aplikacji webowych. Jest odpowiedzialny za zbieranie i akwizycję danych, komunikację z serwerem. Programiści, którzy nie lubią tego języka, mogą próbować go uniknąć. Ułatwiają to istniejące narzędzia, które generują JavaScript na podstawie innego języka (np. Java). Można także schować kod pod postacią komponentów (np. .Net lub Ruby). Niemniej jednak, w końcowej aplikacji i tak będzie JavaScript. Nie można go wyeliminować. Dlatego należy zaakceptować fakt, że AJAX oznacza mnóstwo JavaScript i nauczyć się czerpać z tego korzyści.
AJAX jest ściśle związany z siecią. Korekta błędów w kodzie to nie tylko problemy programistów, lecz także administratorów infrastruktury. JavaScript, jak każdy inny język, wymaga zastosowania standardów, testów i kontroli kodu. Tylko wówczas końcowa aplikacja będzie poprawnie obsługiwana i spełni wymagania stawiane przez użytkownika.
Nie tylko XML
AJAX nie wymaga XML, chociaż w akronimie jest "X". Naturalnie format XML jest obsługiwany, lecz obiekt XMLHttpRequest jest w stanie transportować inne dane tekstowe. Programiści mogą korzystać z JavaScript Object Notation, czy nawet JavaScript. Możliwe jest także użycie czystego tekstu, HTML, czy sprawdzonego starego formatu CSV (dane oddzielone przecinkami).
Obiekt XMLHttpRequest nie pozwala na przesyłanie do serwera danych w formacie binarnym. Flash umożliwia komunikację w takim formacie. Dlatego należy się spodziewać, że ten mankament AJAX zostanie niedługo poprawiony.
Analiza wydajności i bezpieczeństwa sieci lub aplikacji wymaga znajomości formatu, który jest używany przez aplikację. Pamiętajmy więc, że nie zawsze jest to XML.
Wzrost obciążenia sieci
Aplikacje AJAX inaczej korzystają z zasobów sieciowych. Zamiast rzadkich żądań, wymagających niekiedy przesłania kilkuset kilobajtów, mamy znacznie więcej zapytań i krótkich odpowiedzi. Częstsze transmisje paczek danych mogą spowodować wzrost obciążenia serwerów i sieci. Programiści powinni zdawać sobie sprawę z tego, jak ich aplikacja wpłynie na ruch w sieci tj. ile żądań wygeneruje w określonym czasie i ile danych zostanie przesłanych. Pomoc administratorów sieci na etapie projektowania aplikacji jest wskazana, gdyż to oni później jako pierwsi odczują skutki źle napisanego programu.
Optymalizacja AJAX
Wszyscy zajmujący się siecią chcieliby, aby aplikacje webowe przesyłały mniej informacji i to rzadziej niż ma to miejsce dzisiaj. Idea ta nie zawsze jest uwzględniana przez developerów. Kompresja HTTP pozwala zmniejszyć rozmiar odpowiedzi AJAX i jest obsługiwana przez większość przeglądarek. Włączenie mechanizmów kompresji po stronie serwera Web to dobry ruch, lecz zysk może być mniejszy w porównaniu z tradycyjnymi aplikacjami. Szybkość najprawdopodobniej dużo nie wzrośnie, gdyż transmitowane są zazwyczaj niewielkie porcje danych.
Częstość przesyłania informacji można zredukować używając różnego rodzaju buforów cache. Wielu programistów AJAX celowo uniemożliwia buforowanie poprzez specjalne ustawienia w nagłówku lub używanie unikalnych URL. Najlepszym wyjściem jest cache po stronie klienta napisany w JavaScript, lecz większość bibliotek AJAX nie zawiera takiej funkcjonalności. Specjaliści od optymalizacji sieci powinni omówić tą kwestię z programistami, gdyż niesie ona większe korzyści niż sama kompresja.
Limit dwóch połączeń
Aplikacje AJAX są ograniczone przez dwa jednoczesne połączenia HTTP do tego samego URL. Limit ten wynika z protokołu HTTP a nie z błędu w przeglądarce. Bariera ta zapobiega pisaniu kodu, który często odwołuje się do wielu serwerów jednocześnie. W związku z tym, stworzenie np. chatu wykorzystującego AJAX może nie być proste. Programiści powinni unikać angażowania zbyt wielu serwerów i utrzymywania długotrwałych połączeń.
Kolejność ma znaczenie
W przypadku komunikacji TCP/IP może się zdarzyć, że transmitowane pakiety dotrą do odbiorcy w innej kolejności niż zostały nadane. W przypadku tradycyjnych aplikacji webowych efekt ten jest niewidoczny. Podstawowa jednostka, dokument HTML, jest odbierany jako pierwszy. Dopiero wówczas następuje pobieranie pozostałych elementów. W przypadku aplikacji AJAX sprawa wygląda inaczej. Asynchroniczność sprawia, że to programista musi się zatroszczyć o właściwą kolejność odpowiedzi (otrzymywanych danych). Inaczej aplikacja nie będzie działać jak należy. Już w trakcie projektowania konieczne jest przewidzenie odpowiedniej kolejki, której zadaniem będzie zapobiegnięcie złej kolejności.
Myląca informacja zwrotna dla użytkownika
Całymi latami użytkownicy "pomagali" aplikacjom webowym. Najczęściej robili to odświeżając stronę. W ten sposób eliminowali błędy powstałe w wyniku chwilowych problemów z siecią, które uniemożliwiły stronie wyświetlenie się. W przypadku AJAX błąd nie jest tak oczywisty dla użytkownika. Animowane kółko nie dostarcza za wiele informacji o statusie żądania. Programiści mają problem, gdyż biblioteki nie są w stanie efektywnie obsłużyć przekroczenia czasu, konieczności retransmisji itp. Narzędzia do diagnostyki JavaScript rzadko znajdują się po stronie klienta, wiec stwierdzenie błędu w komunikacji lub kodzie jest dodatkowo utrudnione.
Jedyne wyjście to szczegółowy monitoring aplikacji po stronie serwera.
Drugie życie starych zagrożeń?
Aplikacje AJAX nie są bardziej niebezpieczne niż tradycyjne aplikacje webowe, choć takie opinie można spotkać.
Ataki XSS (cross-site scripting) nie są nowym zagrożeniem. Podatna na taką napaść aplikacja zezwala na zmianę swoich danych przez inny skrypt JavaScript. Dane wejściowe w formie HTML w większości przypadków powinny być zabronione. Ponadto właściwa opieka nad plikami cookie pozwala zredukować zagrożenie ze strony XSS i ataków bazujących na przejęciu plików tymczasowych.
Próby przejęcia sesji to także nic nowego. Programiści AJAX muszą pamiętać o sprawdzaniu nagłówka HTTP i właściwym zarządzaniu sesją. W przeciwnym wypadku aplikacja może być furtką do ataku.
Hakerzy są zainteresowani używaniem JavaScript, który umożliwia wiele rodzajów ataków. Bardzo ważna jest świadomość programistów, że kod po stronie klienta może zostać zmanipulowany. Dlatego poprawność danych wejściowych należy zawsze sprawdzać.
***
Opracował: Marcin Suszkiewicz na podstawie materiałów Thomasa A. Powella (NetworkWorld, USA).
Komentarze (11)
No chyba, że mowa tylko o bibliotekach, dających efekty drag and drop itp, które tak naprawdę nie mają żadnego związku z technologią AJAX ;) tak jak zakładki polegające na display: none, block - to nie AJAX. Więc jeśli chodzi o takie rzeczy no to rzeczywiście ciężko by było sprawdzić status żądania, które tak naprawdę nie zostało zainicjowane. Pozdrawiam
Nie bardzo zgodzę się z akapitem odnośnie mylącej informacji zwrotnej dla użytkownika. Przecież po to jest coś takiego jak obsługa błędów, którą dodaje się do silnika AJAX aplikacji. Jeśli status jest różny od 200 to w zależności ile wynosi można go podać do metody obsługującej błędy i wyświetlić komunikat jaki się chce. Zresztą sposobów jest na to wiele ja akurat taki używam. Jeśli status żądania nie wyniesie 4 można też dodać jakiś wyjątek. Oczywiście po stronie serwera też coś można dać, ale główna obsługa błędów związana z żądaniami wg mnie powinna być właśnie w silniku AJAX. Pozdrawiam
Część dotycząca ''większego ruchu'' generowanego przez technologię AJAX to pic na wodę. Dzięki technologii AJAX użytkownik nie musi ładować całych stron, wysyłane są mu tylko te dane których aktualnie potrzebuje. XML się pięknie kompresuje, a w grę wchodzi przecież jeszcze JSON który ma strukturę dużo bardziej zwięzłą. Moim zdaniem ten artykuł to odgrzewanie starego kotleta, AJAX to technologia która już dobrze wkomponowała się w WEB 2.0.
@gtrh zgadza sie, tylko moj przyklad ze znacznikami byl moze zle dobrany. Trafniejszy bylby z mailem. Napiszesz dwa slowa, a przez poczte dodatkowo ida znaczniki typu ''kto'', ''skad'', ''dokad'', ktore sa STAŁE. Jak się napisze dwa słowa, to wartości stałe mogą zajmować nawet i 1000% wielkości maila, jak napiszesz wypracowanie, to będzie to marny ułamek... I tak samo jest z Ajaxem :) Wartości stałych nie przeskoczysz, bo żądanie nie będzie wiedziało gdzie pójść i czy aby na pewno w ogóle jest żądaniem ;)
@sidewinder: Dariusz ma racje. To ty nie rozumiesz co czytasz, on pisze o nagłókach HTTP a nie o elementach (znacznikach (X)HTML). To wynika bezpośrednio z protokołu HTTP i jego braku stanowości.
@Dariusz sam nie masz pojęcia o czym mówisz - od razu widać, że nie napisałeś niczego opartego na AJAXie... w Twoim tradycyjnym podejściu odpowiedź wyglądała by mniej więcej tak: <html><head>...mnóstwo nagłówków...</head><body><div><div><div>....<odpowiedź/> </div>..... itd itd zamiast ajaxowego <dane>coś</dane><dane>coś2</dane> ...heh
Przecież to zależy od aplikacji. "Specjaliści" wyrażający swoje zdanie w komentarzach nie mają pojęcia o httprequest... dane nie idą na żądanie gołe - każda informacja musi być dobrana w nagłówek, a zatem "<żądanie>a=1;</zadanie><żądanie>b=2;</żądanie>" ktore pobierze Ajax w ramach dwóch akcji moze byc wieksze niz pojedyncze zapytanie tradycyjne <żądanie>a=1;b=2;</żądanie>
Nie wszystko przemawia na korzyść AJAXa. Użycie go obniża dostępność (accessibility) serwisu. Na dziś technologia wydaje się najbardziej interesująca w zastosowaniach intranetowych, gdzie grupa odbiorców jest jasno określona, a problemy z kompatybilnością łatwe do wyeliminowania.
Jakis czas temu badalem wydajnosc 2 wersji tej samej aplikacji - jedna byla napisana tradycyjnie, a druga zostala przerobiona tak, aby intensywnie wykorzystywac ajax. Pod obciazeniem kilkudziesieciu uzytkownikow wyniki obciazazenia serwera i wydajnosci sieci byly bardzo na + dla wersji z ajaxem.
autor nie wie, ale nie musi, bo mu za to nie placa - placa za pisanie, wiec wara od niego
Czego autor sie tak boi? Z tego artykulu wynika, ze ten AJAX to isnty diabel wcielony. Kilka dorobnych zalet, a tak to same wady i zagrozenia. Niektore wyssane z palca (u nogi zreszta), np. ten wzrost obiazenia sieci. Wymiana metody przesylania z "za kazdym razem cala strona" na "tylko to co sie zmienia" moze jak dla mnie jedynie zmniejszyc ruch. Dwa polaczenia i niemozliwy czat ? Autor napisal choc jedna aplikacje AJAXowa, ze takie bajki opowiada ? Zmieniona kolejnosc ? Atak XSS ? Autor w ogole wie o czym pisze ? Watpie.
- Kingston: Nowa linia dysków SSD
- Microsoft zapowiada nowy system plików - ReFS
- IPv6: internetowego końca świata w 2012 nie będzie
- Intel: SSD 520 - nowa linia szybkich dysków
- Praktyczne porady dla administratorów na 2012 rok
- Narzędzia dla administratorów sieci
- Co powinien wiedzieć każdy specjalista IT?
- Windows Intune 3.0 - szansa na perfekcyjne narzędzie?
- Kontrowersyjne decyzje Oracle odnośnie Javy
- Testy penetracyjne pomogą w obronie przed cyberatakami
Polecane
Przełomowy rok... znowu
Lektura firmowych informacji prasowych i prognoz firm analitycznych nie pozostawia wątpliwości - każdego roku...
Spokój i luz administratora
Wymagania wobec pracowników działów IT rosną proporcjonalnie do stopnia rozwoju teleinformatyki. Oczekuje się, że...