"Без Бэкенда" — Андрей Саломатин — доклад на moscowjs...

49
Без Бэкенда Андрей Саломатин @filipovskii MoscowJS 12

Upload: moscowjs

Post on 08-May-2015

1.081 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Без Бэкенда

Андрей Саломатин@filipovskii

MoscowJS 12

Page 2: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

основная работана сервере

Раньше

Page 3: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12
Page 4: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Сейчас

Развитие браузеров и мобильных устройств

Появление облачной инфраструктуры

Page 6: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

2004простой клиент

Page 7: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

2014сложный клиент

Page 8: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Сейчасwow

SUCH CLoUD

very frontenD

Page 9: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Как не думать о сервере?

1. Использовать только локальное хранилище

2. Прикрутить готовый бэкенд

3. Гибридное решение

Page 10: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Локальные хранилища

Cookie LocalStorage IndexedDB

Page 11: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Local Storage

Page 12: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Local StorageAPI

localStorage.setItem(‘key’, ‘value’);localStorage.getItem(‘key’);localStorage.removeItem(‘key’);

Page 13: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Local StorageTricks

localStorage.setItem(

‘key’, JSON.stringify(obj));

JSON.parse(localStorage.getItem(‘key’));

Page 14: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

CanIUseLocal Storage

Page 15: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

ОграниченияLocal Storage

5 MbКлючи и значения — строкиЗапросы не поддерживаются

Page 16: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

IndexedDB

Page 17: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

IndexedDB Local Storage

API

Размер

Запросы

Поддержка

Сложное

Не ограничен

На индексах

Нет в Safari, Opera Mini

Простое

5Mb

Не поддерживаются

Нет в Opera Mini

Page 18: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Локальное хранилище

Page 19: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Локальные vs УдалённыеЗа локальные:Работа в оффлайн, при медленном интернете

За удалённые:Синхронизация между устройствами

Page 20: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Когда локального хранилица достаточно?

Игры

Прототипы

Другие приложения, которые не требуют синхронизации

Page 21: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

BaaSна примере

Page 22: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Parseинициализация

Parse.initialize( “your-application-id”, “your-javascript-key”);

Page 23: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Parseрегистрация

Parse.User.signUp(username, password) .done(function(user) {}) .fail(function(error) {});

Page 24: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Parseавторизация

Parse.User.logIn(username, password) .done(function(user) {}) .fail(function(error) {});

Parse.User.logOut();

Page 25: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12
Page 26: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Parseсохранение

var todo = new Parse.Object.extend(“Todo”);todo.set(“text”, “Nothing”);todo.set(“checked”, true);todo.save() .done(function(saved) {}) .fail(function(error) {});

Page 27: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Parseзапросы

var Todo = Parse.Object.extend(‘Todo’);var query = new Parse.Query(Todo);query.equalTo(‘checked’, false);query.find() .done(function(array) {}) .error(function(error) {});

Page 28: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

ParseData Browser

Page 29: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Другие возможности

Parse

CloudCode (кастомный код, node.js)Push уведомленияРабота с файлами…

Page 30: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

BaaS

Page 31: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

BaaS vs Свой БэкендЗа BaaS:SDK для всех платформЗатраты на разработку, поддержку

За Свой Бэкенд:Хранение критичных пользовательских данныхКастомный код на сервере

Page 32: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Альтернативы

Parse

Apache usergrid_ (на его основе Apigee)KinveyBuilt.io

Page 33: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Гибридные решенияна примере

Page 34: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Hoodieинициализация

var hoodie = new Hoodie( “http://localhost:6007/_api“);

Page 35: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Hoodieрегистрация

hoodie.account.signUp(username, password) .done(function(user) {}) .fail(function(error) {});

Page 36: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Hoodieавторизация

hoodie.account.signIn(username, password) .done(function(user) {}) .fail(function(error) {});

hoodie.account.signOut();

Page 37: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Hoodieсохранение

var hoodie = new hoodie();hoodie.store.add(‘todo’, { text: ‘nothing’, checked: true }) .done(function(todo) {}) .fail(function(error) {});

Page 38: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Hoodieзапросы

hoodie.store.findAll(‘todo’) .done(function(results) {}) .fail(function(error) {});

Page 39: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

АрхитектураHoodie

Page 40: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Фото Maddie

Page 41: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

АрхитектураHoodie

Page 42: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12
Page 43: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Hoodie vsВсё Остальное

За Hoodie:Offline по-умолчаниюРасширения на node.js

За Всё Остальное:Hoodie пока только в разработке (web + iOS)Серверный код Hoodie нужно развернуть самому

Page 44: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Альтернативы

Hoodie

Page 45: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Альтернативы

Hoodie

PouchDB (IndexedDB <-> CouchDB)

Page 46: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Когда без бэкендане обойтись?

Page 47: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Когда без бэкендане обойтись?

Нужна высокая произоводительностьREST API недостаточноМного работы не от фронтенда

Page 48: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Думайте о пользователе.

Не о сервере.

Page 49: "Без Бэкенда" — Андрей Саломатин — доклад на MoscowJS 12

Материалы:http://andreysalomatin.me/

no-backend