Making Scalable JavaScript Application

45
Масштабируемые JavaScript-приложения Михаил Давыдов JavaScript разработчик группы разработки Веб-чатов Я.Субботник, Екатеринбург, 2 июля 2011 года

description

 

Transcript of Making Scalable JavaScript Application

Page 1: Making Scalable JavaScript Application

Масштабируемые JavaScript-приложенияМихаил ДавыдовJavaScript разработчик группы разработки Веб-чатов

Я.Субботник, Екатеринбург, 2 июля 2011 года

Page 2: Making Scalable JavaScript Application

2

Page 3: Making Scalable JavaScript Application

<a href="javascript:

external.AddFavorite (location, 'Мой сайт!')

"> Добавить закладку</a>

3

Байт 40 JavaScript

Page 4: Making Scalable JavaScript Application

4

Page 5: Making Scalable JavaScript Application

5

Код стал меняться

// Lamo code<buttononclick="doStuff.call(this, event)"/> // Pro code$('button').click(doStuff);

Page 6: Making Scalable JavaScript Application

6

$(function () { // Типичный код для сайта $('#button').click(function (event) { alert(this.innerHTML); });

$('#list').uberScrollerPluginStart({ "theme": "red" });

$('#lazy_thing').click(function () { $.get('/lazy/thing/body.html', doLazyLoad.bind(this)); });

/* Ещё десяток разных стилей и плагинов */});

Page 7: Making Scalable JavaScript Application

$(function () { // Типичный код для сайта $('#button').click(function (event) { alert(this.innerHTML); });

$('#list').uberScrollerPluginStart({ "theme": "red" });

$('#lazy_thing').click(function () { $.get('/lazy/thing/body.html', doLazyLoad.bind(this)); });

/* Ещё десяток разных стилей и плагинов */});

7

Для сайта — это хорошо!

Page 8: Making Scalable JavaScript Application

8

Часто код сайта похож на маленький клубок

Page 9: Making Scalable JavaScript Application

9

Page 10: Making Scalable JavaScript Application

Сильная связанность

10

Page 11: Making Scalable JavaScript Application

Структура

11

Page 12: Making Scalable JavaScript Application

12

Page 13: Making Scalable JavaScript Application

Зависимость от библиотеки

13

Page 14: Making Scalable JavaScript Application

14

Ядро

Библиотека

Нужна обертка — Ядро

Page 15: Making Scalable JavaScript Application

Задачи Ядра

15

1. Обертка библиотеки

2. Управляет жизнью частей системы

3. Коммуникационный интерфейс

4. Контролирует ошибки

5. Расширяется

Page 16: Making Scalable JavaScript Application

Модули

16

Page 17: Making Scalable JavaScript Application

Структура как на МКС

17

Page 18: Making Scalable JavaScript Application

Модули — обособлены

18

Page 19: Making Scalable JavaScript Application

19

JavaScript + HTML + CSS + ...Модуль состоит из

Page 20: Making Scalable JavaScript Application

20

Модуль «Ростер»

Моя задача — отображать список контактов и обновлять статусы.

Page 21: Making Scalable JavaScript Application

21

Модуль «Диалог»

Моя задача — отображать сообщения пользователей в чате.

Page 22: Making Scalable JavaScript Application

Модуль в песочнице

22

Page 23: Making Scalable JavaScript Application

Модуль ограничен

23

1. Может — вызывать свои методы и песочницы — использовать свой HTML элемент2. Должен спрашивать разрешения3. Запрещено — создавать глобалы — использовать нестандартные глобалы — общаться с модулями напрямую

Page 24: Making Scalable JavaScript Application

24

var Module = (function (global) { "use strict"; var $content; return { "init": function ($) { // $=sandbox $content = $.$('<div/>') .appendTo($.box());

$.on("message", function (e) { $content.text(e.data); }); }, "destroy": function () { /*,..,*/ } }; // Тут может быть ещё какой-то код}(this))

Page 25: Making Scalable JavaScript Application

25

Ядро

Библиотека

Песочница

Модули

Жесткая архитектура

Page 26: Making Scalable JavaScript Application

Ни один из объектов не знает о всем приложении!

26

Page 27: Making Scalable JavaScript Application

27

Расширяемая архитектура

Расширения

Плагины

Ядро

Библиотека

Песочница

Модули

Page 28: Making Scalable JavaScript Application

Коммуникация

28

Page 29: Making Scalable JavaScript Application

29

var Module1 = { "someAction": function () { Module2.getSomeValue(); }}; var Module2 = { "getSomeValue": function () { return 'data'; }};

Page 30: Making Scalable JavaScript Application

30

var Module1 = { "someAction": function () { Module2.getSomeValue(); }}; var Module2 = { "getSomeValue": function () { return 'data'; }};

Page 31: Making Scalable JavaScript Application

// Слабая связанностьvar Module1 = { "init": function ($) { $.on('event', function (e) { console.log(e.data); }); }}; var Module2 = { "someAction": function ($) { $.trigger('event', 'data'); }};

31

Page 32: Making Scalable JavaScript Application

32

// Слабая связанностьvar Module1 = { "init": function ($) { $.on('event', function (e) { console.log(e.data); }); }}; var Module2 = { "someAction": function ($) { $.trigger('event', 'data'); }};

Page 33: Making Scalable JavaScript Application

Асинхронные функции

33

Page 34: Making Scalable JavaScript Application

Асинхронные функции

34

Page 35: Making Scalable JavaScript Application

// Синхронный кодvar Storage = { "read": function (key) { return localStorage[key]; }};

var data = Storage.read('key'), pData = process(data);$.trigger('data', pData);

35

Page 36: Making Scalable JavaScript Application

// Асинхронный кодvar Storage = { "read": function (key, cb) { $.get('/read/' + key, cb); }};

Storage.read('key',function(data) { var pData = processData(data); $.trigger('data', pData);}.bind(this));

36

Page 37: Making Scalable JavaScript Application

Соберем все вместе

37

Page 38: Making Scalable JavaScript Application

38

Жесткая и расширяемая архитектура

Расширения

Плагины

Ядро

Библиотека

Песочница

Модули

Page 39: Making Scalable JavaScript Application

Повторное использование

39

Page 40: Making Scalable JavaScript Application

Модульное тестирование

40

Page 41: Making Scalable JavaScript Application

Можем менять без опасения

41

Page 42: Making Scalable JavaScript Application

События — это по течению

42

Page 43: Making Scalable JavaScript Application

Асинхронность — решение будущих проблем

43

Page 44: Making Scalable JavaScript Application

Вопросы?

44

Page 45: Making Scalable JavaScript Application

Михаил ДавыдовJavaScript и Node.js разработчик

[email protected]

Twitter @azproduction

Habr http://azproduction.habrahabr.ru

45