Без Бэкенда
Андрей Саломатин
@filipovskii
MoscowJS 12
основная работа
на сервере
Раньше
Сейчас
Развитие браузеров и
мобильных устройств
Появление облачной
инфраструктуры
2004
простой клиент
2014
сложный клиент
Сейчас
wow
SUCH CLOUD
very frontend
Как не думать о сервере?
1. Использовать только локальное хранилище
2. Прикрутить готовый бэкенд
3. Гибридное решение
Локальные хранилища
Cookie
Local
Storage
IndexedDB
Local Storage
Local Storage
API
localStorage.setItem(‘key’, ‘value’);
localStorage.getItem(‘key’);
localStorage.removeItem(‘key’);
Local Storage
Tricks
localStorage.setItem(
‘key’, JSON.stringify(obj));
JSON.parse(localStorage.getItem(‘key’));
CanIUse
Local Storage
Ограничения
Local Storage
5 Mb
Ключи и значения — строки
Запросы не поддерживаются
IndexedDB
IndexedDB Local Storage
API
Размер
Запросы
Поддержка
Сложное
Не ограничен
На индексах
Нет в Safari, Opera Mini
Простое
5Mb
Не поддерживаются
Нет в Opera Mini
Локальное
хранилище
Локальные vs Удалённые
За локальные:
Работа в оффлайн, при медленном интернете
За удалённые:
Синхронизация между устройствами
Когда локального хранилица
достаточно?
Игры
Прототипы
Другие приложения, которые не требуют
синхронизации
BaaS
на примере
Parse
инициализация
Parse.initialize(
“your-application-id”,
“your-javascript-key”);
Parse
регистрация
Parse.User.signUp(username, password)
.done(function(user) {})
.fail(function(error) {});
Parse
авторизация
Parse.User.logIn(username, password)
.done(function(user) {})
.fail(function(error) {});
Parse.User.logOut();
Parse
сохранение
var todo = new Parse.Object.extend(“Todo”);
todo.set(“text”, “Nothing”);
todo.set(“checked”, true);
todo.save()
.done(function(saved) {})
.fail(function(error) {});
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) {});
Parse
Data Browser
Другие возможности
Parse
CloudCode (кастомный код, node.js)
Push уведомления
Работа с файлами
…
BaaS
BaaS vs Свой Бэкенд
За BaaS:
SDK для всех платформ
Затраты на разработку, поддержку
За Свой Бэкенд:
Хранение критичных пользовательских данных
Кастомный код на сервере
Альтернативы
Parse
Apache usergrid_ (на его основе Apigee)
Kinvey
Built.io
Гибридные решения
на примере
Hoodie
инициализация
var hoodie = new Hoodie(
“http://localhost:6007/_api“);
Hoodie
регистрация
hoodie.account.signUp(username, password)
.done(function(user) {})
.fail(function(error) {});
Hoodie
авторизация
hoodie.account.signIn(username, password)
.done(function(user) {})
.fail(function(error) {});
hoodie.account.signOut();
Hoodie
сохранение
var hoodie = new hoodie();
hoodie.store.add(‘todo’, {
text: ‘nothing’, checked: true })
.done(function(todo) {})
.fail(function(error) {});
Hoodie
запросы
hoodie.store.findAll(‘todo’)
.done(function(results) {})
.fail(function(error) {});
Архитектура
Hoodie
Фото Maddie
Архитектура
Hoodie
Hoodie vs
Всё Остальное
За Hoodie:
Offline по-умолчанию
Расширения на node.js
За Всё Остальное:
Hoodie пока только в разработке (web + iOS)
Серверный код Hoodie нужно развернуть самому
Альтернативы
Hoodie
Альтернативы
Hoodie
PouchDB (IndexedDB <-> CouchDB)
Когда без бэкенда
не обойтись?
Когда без бэкенда
не обойтись?
Нужна высокая произоводительность
REST API недостаточно
Много работы не от фронтенда
Думайте о пользователе.
Не о сервере.
Материалы:
http://andreysalomatin.me/
no-backend

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