Slide 1

Slide 1 text

ВЕБ-ПРИЛОЖЕНИЯ БУДУЩЕГО « » Илья Пухальский

Slide 2

Slide 2 text

ВЕБ-ПРИЛОЖЕНИЯ БУДУЩЕГО « » Илья Пухальский

Slide 3

Slide 3 text

@witchfinderx 3 Илья Пухальский, EPAM Mobile Competency Center

Slide 4

Slide 4 text

Правда действительности — Мобильный веб существует — HTMLx не будет готов никогда 4

Slide 5

Slide 5 text

http://play.freeciv.org

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Веб-приложения

Slide 9

Slide 9 text

9 ?

Slide 10

Slide 10 text

10 "...a Web page (XHTML or a variant thereof + CSS) or collection of Web "pages delivered over HTTP which use server-side or client- side "processing (e.g. JavaScript) to provide an "application-like" "experience within a Web browser." http://www.w3.org/TR/mwabp/#webapp-defined

Slide 11

Slide 11 text

11 !== Ориентировано на задачи Ориентирован на контент

Slide 12

Slide 12 text

Может это вообще не нужно?

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

North American Development Survey: Vol. II, Evans Data Corp.

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Как так вышло?

Slide 17

Slide 17 text

DHTML 1997

Slide 18

Slide 18 text

AJAX 1999

Slide 19

Slide 19 text

JSONP 2005

Slide 20

Slide 20 text

2005

Slide 21

Slide 21 text

2006

Slide 22

Slide 22 text

22 2007

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

2007

Slide 25

Slide 25 text

2008

Slide 26

Slide 26 text

2008

Slide 27

Slide 27 text

2009

Slide 28

Slide 28 text

2009

Slide 29

Slide 29 text

2010

Slide 30

Slide 30 text

Look ma, no backend!

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

RISES AGAIN

Slide 33

Slide 33 text

Проблемы

Slide 34

Slide 34 text

Доступ к возможностям устройства

Slide 35

Slide 35 text

Сложная архитектура приложения

Slide 36

Slide 36 text

Тач-события и жесты совместно с другими устройствами ввода

Slide 37

Slide 37 text

Скроллинг и sticky-элементы

Slide 38

Slide 38 text

Анимации

Slide 39

Slide 39 text

Дополнительные элементы интерфейса

Slide 40

Slide 40 text

Эмуляция внешнего вида и поведения native-приложений

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Нет быстрых и простых решений

Slide 44

Slide 44 text

Только «обходные пути»

Slide 45

Slide 45 text

Будущее

Slide 46

Slide 46 text

Диалоги http://wiki.whatwg.org/wiki/Dialogs

Slide 47

Slide 47 text

dialog.showModal([anchor]); dialog.show([anchor]); dialog.close([returnValue]); dialog.onclose dialog.returnValue

Slide 48

Slide 48 text

Navigator

Slide 49

Slide 49 text

navigator.battery navigator.connection navigator.onLine

Slide 50

Slide 50 text

File API

Slide 51

Slide 51 text

function handleFileSelect(evt) { var files = evt.target.files; // FileList object for (var i = 0, f; f = files[i]; i++) { console.log(f.size, f.lastModifiedDate); } document.getElementById('files') .addEventListener('change', handleFileSelect, false);

Slide 52

Slide 52 text

Drag and Drop

Slide 53

Slide 53 text

document.getElementById('id').addEventListener('drag', function (e) { e.dataTransfer.setData("Text", e.target.id); }); document.getElementById('id').addEventListener('drop', function (e) { e.preventDefault(); var data = e.dataTransfer.getData("Text"); e.target.appendChild(document.getElementById(data)) ; });

Slide 54

Slide 54 text

Fullscreen API

Slide 55

Slide 55 text

document.getElementById("id").request Fullscreen(); document.getElementById("id").cancelF ullscreen();

Slide 56

Slide 56 text

Progress Events

Slide 57

Slide 57 text

var progressBar = document.getElementById("p"), client = new XMLHttpRequest();

Slide 58

Slide 58 text

client.open("GET", "magical-unicorns"); client.onprogress = function(pe) { if(pe.lengthComputable) { progressBar.max = pe.total progressBar.value = pe.loaded } }; client.onloadend = function(pe) { progressBar.value = pe.loaded }; client.send();

Slide 59

Slide 59 text

Forms

Slide 60

Slide 60 text

Slide 61

Slide 61 text

Slide 62

Slide 62 text

Slide 63

Slide 63 text

Web Notifications

Slide 64

Slide 64 text

Webkit 64 if (window.webkitNotifications) { if (window.webkitNotifications.checkPermission() == 0) { window.webkitNotifications.createNotification( 'icon.png', 'Title', 'Content...' ); }else{ window.webkitNotifications.requestPermission(); } }

Slide 65

Slide 65 text

W3C / WHATWG 65 if (typeof Notification === 'function') { if (Notification.permission === 'granted') { var notification = new Notification( 'Title', { icon: 'icon.png', body: 'Content...' } ); }else{ Notification.requestPermission(callback); } }

Slide 66

Slide 66 text

Web Speech API

Slide 67

Slide 67 text

Web Speech API 67 if (!('webkitSpeechRecognition' in window)) { upgrade(); } else { var recognition = new webkitSpeechRecognition(); recognition.continuous = true; recognition.interimResults = true; recognition.onstart = function() { ... } recognition.onresult = function(event) { ... } recognition.onerror = function(event) { ... } recognition.onend = function() { ... } }

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

WebRTC

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

EcmaScript 6

Slide 72

Slide 72 text

72 Модули

Slide 73

Slide 73 text

73 module UniverseTest {}; module Universe { module MilkyWay {} }; module MilkyWay = 'Universe/MilkyWay'; module SolarSystem = Universe.MilkyWay.SolarSystem; module MySystem = SolarSystem; Определение

Slide 74

Slide 74 text

74 module Car { // приватные var licensePlateNo = '556-343'; // публичные export function drive(speed, direction) { console.log('details:', speed, direction); } export module engine{ export function check() { } } export var miles = 5000; export var color = 'silver'; }; Экспорт

Slide 75

Slide 75 text

75 import drive from Car; import {drive, miles} from Car; Импорт

Slide 76

Slide 76 text

76 // load(moduleURL, callback, errorCallback) Loader.load('car.js', function(car) { console.log(car.drive(500, 'north')); }, function(err) { console.log('Error:' + err); }); Загрузчик модулей

Slide 77

Slide 77 text

77 Классы

Slide 78

Slide 78 text

78 module widgets { // ... class DropDownButton extends Widget { constructor(attributes) { super(attributes); this.buildUI(); } buildUI() { this.domNode.onclick = function(){ // ... }; } } } Пример использования

Slide 79

Slide 79 text

79 var widgets = (function(global) { // ... function DropDownButton(attributes) { Widget.call(this, attributes); this.buildUI(); } DropDownButton.prototype = Object.create(Widget.prototype, { constructor: { value: DropDownButton }, buildUI: { value: function(e) { this.domNode.onclick = function(e) { // ... } } } }); })(this); class == function

Slide 80

Slide 80 text

Экосистема

Slide 81

Slide 81 text

Native vs Web?

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

No content

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

Native + Web = ❤

Slide 86

Slide 86 text

No content

Slide 87

Slide 87 text

No content

Slide 88

Slide 88 text

Веб как платформа?

Slide 89

Slide 89 text

Браузер = ограничение

Slide 90

Slide 90 text

Браузер — переходное состояние

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

Google Chrome OS

Slide 93

Slide 93 text

Эволюция приложений 93 Native Mixed Web только только 2005 2020?

Slide 94

Slide 94 text

Эволюция приложений 94 Native Mixed Web только только Мы живем не в лучшее время 2005 2020?

Slide 95

Slide 95 text

Веб и есть платформа, но это уже другая история...

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

Может, эта битва и проиграна, но война еще нет

Slide 98

Slide 98 text

@witchfinderx