HTML 5 - Blogi

Transkrypt

HTML 5 - Blogi
HTML 5
w tworzeniu aplikacji internetowych
czwartek, 5 kwietnia 12
Agenda
•
•
•
•
•
•
czwartek, 5 kwietnia 12
HTML 5 w porównaniu do Fleksa
HTML 5 w porównaniu do HTML 4
Nowe możliwości HTML 5
jQuery Mobile
Sencha Touch
Komunikacja klient-serwer
HTML 5 vs. Flex
Sam HTML 5 nie jest wystarczający do stworzenia aplikacji mobilnej
czwartek, 5 kwietnia 12
Technologia „HTML 5”
Technologia Flex
Zawartość
HTML 5
MXML
Wygląd
CSS 3
CSS
Działanie
JavaScript
ActionScript
czwartek, 5 kwietnia 12
Dlaczego HTML 5
jest lepszy od Fleksa?
•
HTML 5 to otwarty standard, wspierany przez różne przeglądarki,
niezależny od kaprysów jednej firmy
•
Aplikacja w HTML 5 działa praktycznie wszędzie - na komputerach,
tabletach i smartfonach
•
Proste aplikacje w HTML 5 są bez porównania mniej zasobożerne
niż ich odpowiedniki we Flashu
•
Aplikacje HTML 5 można bezproblemowo pisać bez płatnych
narzędzi developerskich
Dlaczego HTML 5
jest gorszy od Fleksa?
czwartek, 5 kwietnia 12
•
•
Flex jest dużo bardziej rozbudowany od HTML 5
•
Flash zawsze wygląda tak samo, HTML na różnych przeglądarkach
może wyglądać różnie (choć jest dużo lepiej niż było z HTML 4)
•
Flex ma znakomite narzędzia do tworzenia i debugowania aplikacji
(Flash Builder, Flash Catalyst)
Przy dużych, skomplikowanych projektach kompilowany Flash ma
lepszą wydajność
Dlaczego HTML5 jest
gorszy od Fleksa? (c.d.)
czwartek, 5 kwietnia 12
•
Pobieranie danych z serwera jest znacznie prostsze w implementacji
we Fleksie (Flash Builder 4)
•
W przypadku aplikacji desktopowych offline Flex/AIR po prostu
miażdży swoimi możliwościami HTML5
Czym się różni
HTML 5 od HTML 4?
•
•
•
•
•
•
czwartek, 5 kwietnia 12
Uproszczony (usunięcie tagów, argumentów, prosty nagłówek)
Zawiera tagi strukturalne (header, footer, nav, section, ...)
Zawiera nowe typy pól formularza (date, email, number, color, ...)
Wsparcie dla rysowania 2D, audio i video (canvas, audio, video)
Określenie postępowania w razie błędów kodu
Atrybuty data-*
Usunięte/przestarzałe
tagi i atrybuty
•
•
•
czwartek, 5 kwietnia 12
Tagi formatujące tekst (big, center, font, tt, strike)
Ramki (frame, frameset, noframes)
Atrybuty formatujące (align, background, bgcolor, border,
cellpadding, cellspacing, height, width, hspace, vspace, ...)
Nowe API
•
•
•
•
•
•
•
czwartek, 5 kwietnia 12
Audio / Video
Rysowanie 2D
Geolokalizacja
Aplikacje offline
Drag & Drop
Drukowanie
Alerty
•
•
Strumień zdarzeń
•
•
•
•
Uruchamianie skryptów w tle
Dwukierunkowa komunikacja z
serwerem
Lokalna baza danych
Komunikacja między dokumentami
Timery
•
•
•
•
•
•
•
czwartek, 5 kwietnia 12
Nowe elementy
strukturalne
section (sekcja dokumentu)
article (główna część)
aside (tekst poboczny)
hgroup (nagłówek sekcji)
header (nagłówek)
footer (stopka)
nav (nawigacja)
•
•
•
•
•
•
•
figure (niezależny przypis - obrazek, etc.)
audio/video/canvas
embed (oficjalnie)
datagrid
progress (pasek postępu)
meter (wskaźnik użycia)
output (analogicznie do input)
Nowe pola formularza
•
•
•
•
•
•
•
czwartek, 5 kwietnia 12
tel
search
url
email
datetime
date
month
•
•
•
•
•
•
•
week
time
datetime-local
number
range
color
required
Nowości w CSS 3
•
•
•
•
•
•
•
czwartek, 5 kwietnia 12
Cieniowanie tekstu
Cieniowanie elementów
Modele barw HSL(A) i RGBA
Gradienty
Przezroczystość
Kontrola styku ramki i tła
Wieloelementowe tło
•
•
•
•
•
•
•
Zaokrąglanie narożników
Dołączanie czcionek (format OTF)
Animacje i przejścia
Transformacje (przesunięcia, obroty)
Odbicia
Kolumny
Flex Boxes
Szkielet pliku
HTML 5
<!doctype html>
<html lang="pl">
<head>
<!doctype html>
<html lang="pl">
<head>
</html>
</head>
<body>
<meta charset="utf-8">
<title>Mój pierwszy dokument HTML</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<script src="skrypt.js"></script>
</body>
</html>
czwartek, 5 kwietnia 12
</body>
<meta charset="utf-8">
<title>Mój drugi dokument HTML</title>
<link rel="stylesheet" href="style.css">
<script src="skrypt.js"></script>
<header>
</header>
<nav>
</nav>
<article>
<section>
</section>
</article>
<footer>
</footer>
Kompatybilność
•
•
•
•
czwartek, 5 kwietnia 12
Najlepsza dla przeglądarek WebKit (Safari/Chrome/iOS/Android)
Bardzo dobra dla Firefoksa i Opery
Dobra dla IE 9
http://www.findmebyip.com/litmus/
Czy potrzebny
jest framework?
•
•
•
•
•
•
czwartek, 5 kwietnia 12
Istnieje wiele frameworków do tworzenia aplikacji HTML 5
Ułatwiają one nieco pisanie aplikacji
Rozwiązują problem kompatybilności różnych przeglądarek
Zaburzają logikę kodu
Użyteczne do „zadań specjalnych” (np. wykresy, formularze)
Bardzo użyteczne przy pisaniu aplikacji na urządzenia mobilne
Aplikacja HTML 5
w App Store / Google Play
czwartek, 5 kwietnia 12
•
Jeżeli chcemy naszą aplikację w HTML5/JS/CSS umieścić w sklepie z
aplikacjami, wystarczy użyć frameworku PhoneGap
•
Udostępnia dodatkowe możliwości, które dostępne są wyłącznie dla
aplikacji natywnych
•
•
Aplikację trzeba i tak napisać niezależnie
Wada: wymaga instalacji
Frameworki mobilne
dla HTML 5
czwartek, 5 kwietnia 12
•
jQuery Touch
tylko smartfony, ciągle w fazie beta, ograniczone możliwości,
elegancki kod, bardzo prosty w użyciu, darmowy
•
jQuery Mobile
smartfony i tablety, ograniczone możliwości, elegancki kod, bardzo
prosty w użyciu, darmowy, dodatkowo płatne narzędzia
•
Sencha Touch
smartfony i tablety, wygląda jak aplikacje natywne, nieciekawy kod,
niezbyt łatwy, darmowy, dodatkowe narzędzia płatne
czwartek, 5 kwietnia 12
jQuery Mobile
•
•
Darmowy projekt
•
•
•
Szybko się rozwija
•
Bardzo elegancki kod
Wspiera smartfony i tablety (iOS, Android, BlackBerry, Bada,
Windows Phone, Symbian, MeeGo, ...)
Niezbyt dużo możliwości
Znakomite narzędzie do projektowania interfejsów (w podstawowej
wersji darmowe!)
jQuery Mobile - demo
www.codiqa.com
czwartek, 5 kwietnia 12
Codiqua
czwartek, 5 kwietnia 12
•
•
Tylko wersja on-line
•
•
•
Wersja Solo - zapis, do 5 projektów, $10 / miesiąc
Wersja darmowa nie umożliwia zapisu, jedynie pobranie gotowego
kodu HTML (czyli nie ma możliwości późniejszej edycji)
Wersja Unlimited - zapis dowolnej liczby projektów, $30 / miesiąc
Roczny Unlimited to wyższy koszt niż zakup Flash Buildera!
jQuery Mobile - jak to działa?
czwartek, 5 kwietnia 12
•
Inkluzja stylów CSS
•
Inkluzja skryptów JS
<link rel="stylesheet" href="http://code.jquery.com/
mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://ajax.googleapis.com/ajax/libs/
jquery/1.6.4/jquery.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/
jquery.mobile-1.0.1.min.js"></script>
jQuery Mobile - jak to działa?
czwartek, 5 kwietnia 12
•
Piszemy normalny kod HTML z atrybutami data-*
•
Kod JavaScript modyfikuje kod HTML na potrzeby uzyskania
odpowiedniego wyglądu i działania
<div data-role="page" id="page1">
<div data-theme="a" data-role="header">
<div data-role="content">
<div class="ui-grid-a">
<a data-role="button" data-transition="fade"
href="#page3" data-icon="arrow-l" dataiconpos="left">
Sencha Touch - zalety
•
•
•
•
•
czwartek, 5 kwietnia 12
Aplikacja wygląda jak natywna (wygląd przycisków, list, etc.)
Wsparcie dla typowo natywnych elementów (ikony, splashscreeny)
Wsparcie dla wzorca projektowego MVC
Wbudowana komunikacja klient-serwer
Dużo przydatnych komponentów
Sencha Touch - komponenty
•
•
•
•
•
•
•
czwartek, 5 kwietnia 12
Przyciski
Formularze
Paski narzędzi
Karuzele
Zakładki
Wyskakujące okna
Dymki
•
•
•
•
•
•
•
Wybieracze dat
Animacje
Mapy
Audio
Wideo
AJAX
JSON/XMLHttpRequest
Sencha Touch - licencje
czwartek, 5 kwietnia 12
•
Dostępne licencje: komercyjna, open-source (darmowe), embedded i
OEM (płatne)
•
•
•
Sencha Touch Charts - płatne ($99 bez supportu)
Sencha Designer - narzędzie płatne
Moim zdaniem nie jest warte nawet jednego dolara z $399
Sencha Touch - wady
•
•
•
•
•
•
czwartek, 5 kwietnia 12
Definiowanie wyglądu w JavaScript, a nie w HTML
Brak dobrego designera interfejsu
Skomplikowana struktura kodu (wersja 2.0)
Konieczność używania narzędzi SDK (wersja 2.0)
Kierunek rozwoju (1.1 » 2.0)
Zajętość miejsca na serwerze (> 80MB na aplikację!)
Sencha Touch
przykładowa aplikacja
czwartek, 5 kwietnia 12
•
•
•
Instalujemy SDK i SDK Tools
•
Edytujemy plik app/view/Main.js
Dodajemy SDK Tools do ścieżki
sencha app create SenchaTest /Library/WebServer/Documents/
senchatest
Ext.define("SenchaTest.view.Main",
{
extend: 'Ext.Container',
config:
{
fullscreen: true,
layout: 'vbox',
items:
[
// PASEK TYTUŁOWY
{
xtype: 'toolbar',
docked: 'top',
title: 'HTML5',
items:
[
{
xtype: 'button',
ui: 'back',
text: 'Wstecz'
},
{
xtype: 'spacer'
},
{
xtype: 'button',
ui: 'forward',
text: 'Dalej'
}
]
},
// VBOX góra - dół
czwartek, 5 kwietnia 12
);
}
}
]
{
// HBOX - lewo - prawo
xtype: 'container',
layout: {
type: 'hbox',
align: 'stretch'
},
flex: 1,
items:
[
{
xtype: 'button',
text: '1',
flex: 1
},
{
xtype: 'button',
text: '2',
flex: 1
}
]
},
{
xtype: 'button',
flex: 1,
text: '3'
},
Komunikacja klient-serwer
czwartek, 5 kwietnia 12
•
EventSource - z serwera do klienta, bardzo prosta
http://www.html5rocks.com/en/tutorials/eventsource/basics/
•
WebSocket - dwukierunkowa, bardziej skomplikowana
http://jwebsocket.org/
•
AJAX - z klienta do serwera (+ odpowiedzi w drugą stronę), prosta,
bardzo funkcjonalna, ale mniej wydajna
http://xajaxproject.org/
•
AMF - wkrótce w Sencha Touch (Q2 2012)
EventSource
•
•
•
•
czwartek, 5 kwietnia 12
Cały czas otwarte połączenie z serwerem
Serwer w miarę potrzeby wysyła komunikaty
Komunikaty są odbierane przez klienta
Każdy typ komunikatu ma osobnego listenera
EventSource - klient
function gotMessage(e)
{
document.getElementById(„output”).innerHTML = e.data;
}
function gotError(e)
{
alert(e.data);
}
var stream = EventSource(„stream.php”);
stream.addEventListener(„message”, gotMessage);
stream.addEventListener(„error”, gotError);
czwartek, 5 kwietnia 12
EventSource - serwer
<?php
header(„Content-type: text/event-stream”);
header(„Cache-control: no-cache”);
function sendMessage($timestamp, $msg)
{
echo „id: $timestamp” . PHP_EOL;
echo „data: $msg” . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$ts = time();
sendMessage($ts, „Gratulacje!”);
?>
czwartek, 5 kwietnia 12
WebSocket
czwartek, 5 kwietnia 12
•
WebSocket wymaga po stronie serwera kompletnej implementacji
gniazda
•
•
•
Do komunikacji służy zwykły tekst
Parsowanie komunikatów trzeba także oprogramować
Po stronie JavaScript trzeba dodać listenery
WebSockets - JavaScript
var host = „ws://127.0.0.1:8888/server.php”;
try
{
socket = new WebSocket(host);
socket.addEventListener(„onopen”, onOpen);
socket.addEventListener(„onmessage”, onMessage);
socket.addEventListener(„onclose”, onClose);
} catch(e) { };
function onMessage(msg)
{
alert(msg.data);
}
function send(msg)
{
try
{
socket.send(msg);
} catch(e) { };
}
czwartek, 5 kwietnia 12
AJAX
•
•
•
czwartek, 5 kwietnia 12
Można programować ręcznie
Można skorzystać z gotowej biblioteki (np. XAJAX)
W połączeniu z EventSource ma da takie same możliwości jak
WebSocket, a jest dużo prostsze w implementacji
?
Pytania
czwartek, 5 kwietnia 12

Podobne dokumenty