JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом...

26
SPA + мультисайтинг на highload

Transcript of JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом...

Page 1: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

SPA + мультисайтингна highload

Page 2: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

О проекте● Более 500 сайтов на одном движке и базе● Более 100 разработчиков● Более 20 локаций● Более 3,5 миллионов посетителей● Более 300 основных устройств

Page 3: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Технологии фронтэнда● Backbone● {less}● jade● grunt● socket.io

Page 4: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Что такое SPASingle Page Application

Page 5: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Классический сайт

СерверКлик по ссылке

Page 6: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

PAjax

СерверКлик по ссылке XMLHttpRequest

HTML

Page 7: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Single Page Application

СерверКлик по ссылке XMLHttpRequest

JSON

Page 8: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Мультисайтинг

Page 9: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

apple.com orange.com garnet.com

Page 10: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

apple.com

orange.com

garnet.com

multisite

Page 11: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Преимущества multisite● Проще обслуживание инфраструктуры● Меньше дублирования кода● Проще поддерживать, если нужно

добавить один функционал на множество сайтов

● Одна база и серверсайд, нет проблем обмена данными между сайтами

Page 12: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Бизнес задачиМножество возможностей для маркетинга● для разных регионов

○ региональные новостные сайты с одной базой● для разных групп товаров

○ отдельный сайт как магазин игрушек● для разных социальных групп

○ отдельный сайт с дешевыми и не очень качественными товарами

Page 13: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Config сайтов

garnet.comtheme: theme1.theme2

country: Spaine

color: red

juice: true

orange.comtheme: theme1.theme3

country: USA

color: orange

juice: true

apple.comtheme: theme1

country: Ukraine

color: green

juice: true

Page 14: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Темы● Иерархическое наследование● Подтемы с мобильной и полной версией● Override

Page 15: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Структура

● theme1○ _default○ _mobSite○ _webSite○ theme2

■ _default■ _mobSite■ _webSite

○ theme3■ _default■ _mobSite■ theme4

● _mobSite● _webSite1

2

35

m.site.com

Тема:theme1.theme3.theme4

Подключаем test.js4

Page 16: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Компонентыtheme1/_mobSite/components

● component1○ views○ models○ templates○ styles

● component2● component3

Page 17: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Подгрузка ресурсов- k: environment: mobSite theme: theme1 v: package1: - component1 - component2 package2: - component3

Resources.load('package1', function() {

var model1 = new Component1Model();

var model2 = new Component2Model();

....

});

Resources.load('package2', function() {

var model3 = new Component3Model();

....

});

Page 18: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Gruntless, jade, sprites, po-переводы

Page 19: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Сборка less● Если стили компонента перекрыты, то

они снова компилятся, иначе будут взяты из верхней темы

● Повторная компиляция в окружении темы при использовании сторонних миксинов или переменных

Page 20: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Сборка спрайтовgrunt.initConfig({

...

sprite: _.object(_.map(grunt.lib.Config.get('_themes'), function(theme, themeName) {

return [themeName, {

src: theme.themeDir + '/images/sprite/*.png',

dest: theme.themeDir + '/images/sprite-images.png',

destCss: theme.themeDir + '/styles/sprite.less',

padding: 2,

cssTemplate: 'spritesmith-template.mustache'

}];

}))

});

Page 21: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Проблемыи костыли для их решения

Page 22: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Длительностью деплояПолный деплой занимает около 30 минут.

● Компиляция Jade и Less только для одной темы

● Компиляция ресурсов для одной темы иерархически

● Less компилируются только там, где это нужно

Page 23: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Overwrite● less● po-переводы● jade● js

Page 24: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Тестирование● Автотестирование● Точечное мануальное тестирование● Legacy● Правильна структура шаблонов

Page 25: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Git● Избегать конфигов, которые могут

конфликтить● Группировать функционал в отдельные

модули и репозитории● Автоматическая чистка старых веток

Page 26: JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"

Вопросы