AJAX w aplikacjach webowych: zalety, wyzwania, typowe problemy. Andrzej Bednarz Wrocław,

Podobne dokumenty
Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

AJAX. Wykonał: Marcin Ziółkowski, AGH Kraków, AiR rok 5.

Podstawy programowania w języku JavaScript

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Program szkolenia: REST i Microservices w PHP

Google Web Toolkit Michał Węgorek ZPO 2009

Zaawansowane aplikacje internetowe

Automatyzacja Testowania w WEB 2.0

OpenLaszlo. OpenLaszlo

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Ajax. 1. Wprowadzenie. 2. Aplikacja serwerowa

Flex 3. Piotr Strzelczyk Wydział EAIiE Katedra Automatyki. Kraków, 2008

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

TECHNOLOGIE SIECI WEB

Zaawansowane Techniki WWW (HTML, CSS i NODE.JS)

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Forum Client - Spring in Swing

KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Patryk Jar Meet.js, Gdańsk 11 marca 2013 r. MODULARNY JAVASCRIPT

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

Spis wzorców. Działania użytkownika Strona 147 Obsługa większości Działań użytkownika za pomocą kodu JavaScript przy użyciu metod obsługi zdarzeń.

Języki i narzędzia programowania III. Łukasz Kamiński Wykład II

Popularne dostępne rozwiązania. Najpopularniejsze środowiska programistyczne:

Szkolenie wycofane z oferty

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Testowanie aplikacji Java Servlets

Szczegółowy opis zamówienia:

Oracle Application Express -

Java w Internecie - czy to ma sens? ;)

I Podstawy Wprowadzenie do technologii Ajax Żądanie Odpowiedź XML 31 JSON 39

1 Wprowadzenie do J2EE

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Mechanizmy pracy równoległej. Jarosław Kuchta

Gatesms.eu Mobilne Rozwiązania dla biznesu

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Pogadanka o czymś, co niektórzy nazywają AJAX

Paweł Rajba,

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Jak okiełznać frontend w Django? Piotr Maliński

WICKET VS. DJANGO. Leszek Gawron vs. Michał Leszczyński

PHP: bazy danych, SQL, AJAX i JSON

SOA Web Services in Java

Programowanie Komponentowe WebAPI

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0;

Aplikacje Internetowe

Spis treści. Dzień 1. I Wprowadzenie (wersja 0906) II Dostęp do danych bieżących specyfikacja OPC Data Access (wersja 0906) Kurs OPC S7

Garść niezawodnych sposobów na niezawodną integrację. WEBCON DAYS 2014 Tomasz Batko, WEBCON

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Dokumentacja techniczna API systemu SimPay.pl

REACT NATIVE. Anna Maziejuk Kamil Jankowski

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Referat pracy dyplomowej

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

Projektowanie i implementacja wysokowydajnych aplikacji w języku

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, Bydgoszcz

Systemy obiegu informacji i Protokół SWAP "CC"

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

Tytuł szkolenia: Angular 4 - budowanie nowoczesnych i wydajnych aplikacji przeglądarkowych

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

Lock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010

Podstawy technologii WWW

Webowy generator wykresów wykorzystujący program gnuplot

NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

Wybrane działy Informatyki Stosowanej

Jak efektywnie wykrywać podatności bezpieczeństwa w aplikacjach? OWASP The OWASP Foundation

WebAii Automation Framework

Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

Program szkolenia: JavaScript Craftsmanship

Przegląd narzędzi do automatycznego testowania aplikacji internetowych. Jan Płoszczyca SKISR 2006

PHP: bloki kodu, tablice, obiekty i formularze

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

Aplikacje Internetowe, Servlety, JSP i JDBC

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Warszawa, Kategorie analizy frameworków GUI

Założenia projektowe dla zapytania ofertowego EAK_ZA_01/2015

Katalog książek cz. 3: Web Service

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)

Twisted. Silnik Twojego Internetu. Jan Urbański Ducksboard. PyWaw #25, Warszawa, 10 czerwca 2013

Ciągłe dostarczanie oprogramowania : kompletny przewodnik / Eberhard Wolff. Gliwice, cop Spis treści

Kurs OPC S7. Spis treści. Dzień 1. I OPC motywacja, zakres zastosowań, podstawowe pojęcia dostępne specyfikacje (wersja 1501)

Web Application Firewall - potrzeba, rozwiązania, kryteria ewaluacji.

Przewodnik użytkownika (instrukcja) AutoMagicTest

Program szkolenia: Tworzenie aplikacji w Ruby on Rails z wykorzystaniem zwinnych metodyk

Transkrypt:

AJAX w aplikacjach webowych: zalety, wyzwania, typowe problemy Andrzej Bednarz Wrocław, 20.06.2012

2

AGENDA Podstawy AJAX AJAX we frameworkach webowych na przykładzie Wicket AJAX produkcyjnie problemy i wyzwania AJAX w GWT i JQuery i kolejne wyzwania Podsumowanie 3

AGENDA Podstawy AJAX AJAX we frameworkach webowych na przykładzie Wicket AJAX produkcyjnie problemy i wyzwania AJAX w GWT i JQuery i kolejne wyzwania Podsumowanie 4

AJAX definicja AJAX ang. Asynchronous JavaScript and XML, asynchroniczny JavaScript i XML technologia tworzenia aplikacji internetowych, w której interakcja użytkownika z serwerem odbywa sie bez przeładowywania całego dokumentu, w sposób asynchroniczny. Źródło: Wikipedia, za J..J. Garrett Ajax: A New Approach to Web Applications, 2005 5

AJAX technologie Technicznie AJAX to zbiór różnych rozwiązań XMLHttpRequest JavaScript XML (JSON, HTML) HTML i CSS DOM Źródło: Wikipedia, za J..J. Garrett Ajax: A New Approach to Web Applications, 2005 6

Jak używać AJAX niskopoziomowo stworzenie XMLHttpRequest function getxmlhttprequest () { var xmlhttp; try { // Utworzenie obiektu XMLHttpRequest (silnik Gecko, WebKit, Presto, Trident w IE>6) xmlhttp= new XMLHttpRequest(); } catch(e) { // Wylapuje blad jesli JavaScript nie posiada obiektu XMLHttpRequest try { // Utworzenie obiektu ActiveXObject, który jest zawarty w kontrolce ActiveX IE xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { // Utworzenie obiektu ActiveXObject, dla innych wersji IE xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { // Wyswietlenie bledu o braku obslugi obiektu XMLHttpRequest alert("your browser does not support AJAX!"); return false; } } } // zwrócenie obiektu return xmlhttp; } Źródło: Wikipedia 7

Jak używać AJAX niskopoziomowo wysyłanie żądania do serwera 1 var r; r = getxmlhttprequest(); 2 r.open('get', 'http://www.do.net/p/?id=123', true); // true dla asynchr. 3 4 r.onreadystatechange = processresponse; //rejestracja funkcji do //odbierania wyników r.send(null); //null dla żądania GET 5 function processresponse() { if (r.readystate == 4) { // odebrano odpowiedź od serwera if (r.status == 200) { // kod odpowiedzi HTTP OK document.getelementbyid('tresc').innerhtml = r.responsexml.getelementsbytagname('tekst')[0].childnodes[0].nodevalue; }; }; } Źródło: W.Gajda http://gajdaw.pl/ajax/wprowadzenie/ 8

Trudności w używaniu AJAX niskopoziomowo Developerzy a JavaScript Różnice w przeglądarkach Frameworki Trudność użycia / podatność na błędy Prędkość tworzenia aplikacji Integracja z częścią serwerową Image courtesy of FreeDigitalPhotos.net 9

AGENDA Podstawy AJAX AJAX we frameworkach webowych na przykładzie Wicket AJAX produkcyjnie problemy i wyzwania AJAX w GWT i JQuery i kolejne wyzwania Podsumowanie 10

Apache Wicket Wybrane cechy Czysty HTML + czysta Java Komponentowy Wysoka reużywalność AJAX bez JavaScript Szablon HTML HelloWorld.html Klasa Java HelloWorld.java Źródło: http://wicket.apache.org/learn/examples/helloworld.html 11

AJAX w Wicket Link rankproduct = new Link("rankProduct1") { }; @Override public void onclick() { updaterating(getproduct(), getuser(), 1); // nic więcej nie trzeba robić, //Wicket sam odświeży stronę } AjaxLink rankproductajax = new AjaxLink("rankProduct1") { @Override public void onclick(ajaxrequesttarget target) { updaterating(getproduct(), getuser(), 1); // powiedz Wicketowi, by odświeżył wybrany fragment target.add(rankpanel); } }; AjaxFallbackLink rankproductajaxfallback = new AjaxFallbackLink("rankProduct1") { }; @Override public void onclick(ajaxrequesttarget target) { updaterating(getproduct(), getuser(), 1); if (target!= null) { // powiedz Wicketowi, by odświeżył wybrany fragment target.add(rankpanel); } else { // Nie działa JavaScript i AJAX, pełne przeładowanie strony } } 12

13

AGENDA Podstawy AJAX AJAX we frameworkach webowych na przykładzie Wicket AJAX produkcyjnie problemy i wyzwania AJAX w GWT i JQuery i kolejne wyzwania Podsumowanie 14

Development -> testy akceptacyjne -> aplikacja na produkcji i zaczęły się problemy Skargi użytkowników Aplikacja działa zbyt wolno Brak reakcji aplikacji na składnie zamówień nie da się zamawiać Składanie zamówienia czasem nigdy się nie kończy ( kółeczko się kręci bez końca) a czasem się kończy bez oczekiwanego rezultatu 15

W poszukiwaniu rozwiązań Nie wiemy, czego nie wiemy Pierwsze akcje Kompleksowy monitoring na serwerze Winna jest prawdopodobnie sieć To dziwne, u mnie działa Przydatne narzędzie! SmokePing http:// oss.oetiker.ch/smokeping/ To nie rozwiązuje problemu 16

W poszukiwaniu rozwiązań Jak zweryfikować problemy z połączeniem (z AJAX) Dwa fundamentalne problemy: Brak odpowiedniego monitoringu po stronie przeglądarki Jak to zrobić po stronie przeglądarki? Jak zintegrować z monitoringiem serwera? Brak odpowiedniego środowiska testowego Przydatne narzędzie! WanEm http://wanem.sourceforge.net/ If you can't test it, you don't know that it works. If you don't know that it works, then it's useless. Uncle Bob 17

Rozwiązania Monitoring Obsługa błędów Wydajność Elementy: Logowanie Cookies JavaScript JMX Wiele rodzajów danych Czas oczekiwania na wysłanie Czas komunikacji z serwerem Czas przetwarzania odpowiedzi Wszelkie błędy Integracja z logami serwera Spójne dane Całościowy obraz Przydatne narzędzie! Perf4j http://perf4j.codehaus.org/ 18

Rozwiązania Monitoring Obsługa błędów Wydajność Przetwarzanie przeglądarki Komunikacja sieciowa Łączny czas widoczny dla użytkownika Przetwarzanie serwera 19

Rozwiązania Monitoring Obsługa błędów Wydajność Przykładowa tabela logów Data i czas Użytk ownik ID-sesji IP ID żądania Akcja Hierar chia Czas [ms] 20.06.2012, 14:34:12,000 user1 123456789 1.1.1.1 awe12e1 Zamówienie: oczekiwanie na wyslanie 1 250 20.06.2012, 14:34:12,250 20.06.2012, 14:34:12,500 20.06.2012, 14:34:12,500 20.06.2012, 14:34:12,550 20.06.2012, 14:34:12,800 20.06.2012, 14:34:17,250 user1 123456789 1.1.1.1 awe12e1 Zamówienie: komunikacja z serwerem user1 123456789 1.1.1.1 awe12e1 Zamówienie: przetwarzanie serwera user1 123456789 1.1.1.1 awe12e1 Zamówienie: walidacja 2-1- 1 50 user1 123456789 1.1.1.1 awe12e1 Zamówienie: zapis 2-1- 2 250 user1 123456789 1.1.1.1 awe12e1 Zamówienie: przetwarzanie wicket 2 2-1 2-1- 3 user1 123456789 1.1.1.1 awe12e1 Zamówienie: renderowanie 3 250 5000 750 450 20

Rozwiązania Monitoring Obsługa błędów Wydajność Brak obsługi błędów komunikacji Komunikaty o błędach Limit czasowy (timeout) 1 Uwaga! Przeglądarka robi to automatycznie dla zwykłych żądań. Ponowne próby wysłania żądania (retries) 1 1 Sami ręcznie musimy to zrobić 21

Rozwiązania Monitoring Obsługa błędów Wydajność Poprawianie wydajności Już poprzednie rozwiązania pomogły (retries, timeouts) Optymalizacja wysyłanego HTML Problem z dużymi odpowiedziami (funkcja innerhtml) Nadliczbowe żądania do serwera (specyfika Wicket i innych frameworków pełnostanowych) Wprowadzenie współbieżnych wywołań (specyfika Wicket) Wprowadzenie zbiorczych żądań (batch request) + Servlet Filter Optymalizacja odświeżania w tle (CometD) 22

Rozwiązania konkluzje Monitoring Obsługa błędów Wydajność Plik wicket-ajax.js mocno zmieniony utrudnione uaktualnianie wersji Wicket The Law of Leaky Abstractions, Joel Spolsky, http://www.joelonsoftware.com/ articles/leakyabstractions.html All non-trivial abstractions, to some degree, are leaky. SQL 1). where a=b and b=c 2). where a=b and b=c and c=a TCP/IP 23

Jeszcze o XMLHTTPRequest metody Źródło: Wikipedia 24

Jeszcze o XMLHTTPRequest własności Źródło: Wikipedia 25

Krótkie demo wicket-ajax.js W eclipse 26

Podsumowanie Wicket Można szybko pisać rozbudowane aplikacje webowe dla biznesu, wiele ważnych elementów jest już wbudowanych, łatwa reużywalność komponentów Średnio trudne modyfikowanie / rozszerzanie wbudowanych mechanizmów Pewne problemy z AJAX: Nie wszystkie sytuacje obsłużone domyślnie (timeouts, retries) W pewnych zastosowaniach wydajność może być niewystarczająca Ale to się zmienia, w najnowszej wersji (6.0 beta) jest JQuery-AJAX Czy warto go używać w projekcie? zdecydowanie tak * 27

AGENDA Podstawy AJAX AJAX we frameworkach webowych na przykładzie Wicket AJAX produkcyjnie problemy i wyzwania AJAX w GWT i JQuery i kolejne wyzwania Podsumowanie 28

GWT zmiana punktu widzenia 30

GWT Główne cechy Fundamentalna różnica w podejściu, bogaty klient (rich client) Java JavaScript (zoptymalizowany uniwersalny ) AJAX wbudowany i konieczny Zapewnia abstrakcje nad DOM i XMLHTTPRequest public void rankproduct() { // stworzenie pośrednika do serwera RankingServiceAsync rankingservice = (RankingServiceAsync) GWT.create(RankingService.class); } AsyncCallback callback = new AsyncCallback() { public void onsuccess(rank result) { // zmiana w GUI gdy przyjdzie wynik } public void onfailure(throwable caught) { // blad wywolania zadania } }; rankingservice.rank(productid, userdid, callback); Co ukrywa pewne niuanse, szczególnie dla GWT RPC, ważna klasa Request Builder 31

GWT - kontynuacja Główne cechy Zapewnia wsparcie dla sytuacji wyjątkowych Błędy komunikacji (metoda onfailure obowiązkowa część Callback) Limit czasowy (timeout), choć nie w podstawowym tutorialu dla RPC * Łatwo dorobić dodatkowe rozwiązania, np. ponowienia (retries) Monitorowanie połączenia klasa RequestBuilder Łatwe logowanie i debuggowanie Wnioski Zapewnia bogaty framework dla tworzenia Rich Internet Applications Intuicyjna obsługa błędów AJAX Łatwa optymalizacja wydajności, w tym komunikacji z serwerem Może być pracochłonny (integracja klient-serwer, bezpieczeństwo) 32

JQuery Główne cechy Czysty JavaScript Perspektywa jak przy GWT Dostęp do wszystkich mechanizmów AJAX, ale jednocześnie ładne API Łatwa obsługa sytuacji wyjątkowych 33

JQuery Wnioski Bardzo bogata biblioteka JavaScript Potrzebe doświadczenie w JavaScript, żeby efektywnie używać. Podobnie jak przy GWT, a nawet bardziej, może być pracochłonna integracja klient serwer Najmniejsza abstrakcja od technologii, najłatwiej naprawiać potencjalne błędy, łatwa optymalizacja Inne problemy Brak świadomości klienta Brak odpowiedniego projektu GUI (wskaźnik postępu, komunikaty o błędach, timeout, retries). 34

AGENDA Podstawy AJAX AJAX we frameworkach webowych na przykładzie Wicket AJAX produkcyjnie problemy i wyzwania AJAX w GWT i JQuery i kolejne wyzwania Podsumowanie 35

Podsumowanie Prawidłowa obsługa AJAX stawia wiele wyzwań Techniczne Koncepcyjne (co dokładnie) Który framework wybrać? Może żaden? Dobrać odpowiedni do potrzeb Sam framework nie wystarczy, dobrze znać podstawy technologii, które są poniżej ( Leaky abstraction ) Brak świadomości zagrożeń i ze strony klienta i wykonawcy Testowanie Doświadczenie Consulting Problemy tu opisane wyglądają znajomo Już w 1994: The 8 Fallacies of Distributed Computing, P. Deutsch i J.Gosling: The network is reliable. Latency is zero. Bandwidth is infinite. Transport cost is zero. 36

Dziękuję za uwagę. www.de.capgemini.com 38