SlideShare a Scribd company logo
basis.js
почему я не бросил разрабатывать свой
фреймворк
Роман Дворнов
Ostrovok.ru
FrontTalks, июль 2013
Немного о себе
•Работаю в Ostrovok.ru
•До этого руководил
веб-разработкой в
ПС Единый кошелек
•Автор и мейтейнер
фреймворка basis.js,
которому уже 7 лет
2
basis.js
фреймворк,
для разработки
одностраничных
приложений
3
4
TodoMVC
Настоящие
веб-приложения
basis.js для настоящих приложений
basis.js
5
• Модульность, namespace
• Конструирование классов
• Работа с данными
• Сетевое сообщение
• Построение интерфейса, компоненты
• Шаблоны, адаптивность, локализация
• Инструменты, сборка
6
Шаблоны
Другие шаблонизаторы
7
element.innerHTML = 'string';
Шаблон basis.js
8
<b:style src="block.css"/>
<div{element} class="block block_{selected}">
<h2>{title}</h2>
<ul>
<!--{childNodesHere}-->
</ul>
</div>
Шаблон → DOM
9
Шаблон декларация
эталон
(DOM fragment)
функция
(фабрика экземпляров)
DOM fragment bindings
Шаблон = «HTML» + CSS
10
<b:style src="block.css"/>
<div class="block block_{disabled}">
<h2>{title}</h2>
<ul{childNodeElement}/>
</div>
.block
{
...
}
.block_disabled
{
...
}
Шаблон CSS
Разделение логики и
представления
11
Объект
Шаблон
(DOM fragment)
binding
action
Javascript Страница
В шаблонах нет логики,
нет ветвлений и циклов
12
Замена DOM фрагмента
<div class="sidebar">
...
<ul class="list">
<li>item 1</li>
<li>item 2</li>
</ul>
...
</div>
13
<div class="list-wrapper">
<h2>Header</h2>
<ul class="list">
</ul>
</div>
replaceNode
insertBefore
Синхронизация
14
Шаблон basis.js
var view = new basis.ui.Node({
template: basis.resource('path/to/template.tmpl')
});
basis server
файловая
система
Live update
«киллер» фича
15
Тема = HTML + CSS
16
// опеределение шаблона для темы
basis.template.theme('mobile').define({
'some.view': resource('path/to/view.tmpl')
});
// переключение темы
if (window.innerWidth > 480)
basis.template.setTheme('base');
else
basis.template.setTheme('mobile');
Адаптивность
17
Шаблоны в basis.js
18
• Простое logic-less описание
• Live update
• Динамические представления
• Быстрый процесс верстки
• Темы
• Адаптивность
Интерфейс
19
childNodes
Унификация API
20
методы
appendChild, insertBefore, removeChild, replaceChild, ...
node nextSiblingpreviousSibling
parentNode
firstChild lastChild
Паттерны
21
• selection (выделение)
• disable/enable
• сортировка
• группировка
• привязка данных
22
...
childNodes: [
form {
childNodes: [
field { ... },
field { ... }
]
},
buttonPanel {
childNodes: [
button { caption: 'Save' },
button { caption: 'Cancel' }
]
}
]
...
<form class="user-form">
<div class="form-field">
<label>Name:</label>
<input type="text" />
</div>
<div class="form-field">
<label>Email:</label>
<input type="text" />
</div>
</form>
<div class="button-panel">
<button>Save</button>
<button>Cancel</button>
</div>
basis.js UI tree Browser DOM tree
23
There is no spoon
basis.js <3 DOM
24
Данные
25
Классы данных backbone.js
26
Model Collection
Классы basis.js
27
НаборыОбъектыСкаляры
Property Object
Entity
Dataset
Slot
Автоматические
наборы
Агрегатные
функции
DataObjectSet
Особенности
28
• Все данные имеют состояние
• При изменении данных создается дельта
изменений
• Механизм делегирования
• Объекты взаимодействуют через
изменение данных и состояния
• ...
Наборы данных
29
Dataset
(Collection)
Виды наборов
• Merge – слияние множеств:
объединение, разность и другие
• Subtract – вычитание
• Subset – получение подмножества
• Split – разбиение на подмножества 1:1
• Cloud – разбиение на подмножества 1:М
• Slice – срез подмножества
30
Наборы: пример
31
32
contacts
33
???
selected
contacts
34
new basis.data.dataset.Subtract({
minuend: contacts,
subtrahend: selectedContacts
});
35
new basis.data.dataset.Subset({
source: new basis.data.dataset.Subtract({
minuend: contacts,
subtrahend: selectedContacts
}),
rule: function(item){
return /ч/i.test(item.data.title);
}
});
В итоге
36
• Описана некоторая логическая
схема связи данных и компонент
• Код работающий с contacts и
selectedContacts остался прежним
• О согласованности наборов и
данных заботится фреймворк
Модульность
37
Основные модули
core event data DOM UI
entity dataset
net routerl10n
components
38
Ресурсы
basis.require('basis.ui');
module.exports = new basis.ui.Node({
template: resource('template/view.tmpl'),
binding: {
editor: resource('editor.js').fetch(),
list: resource('list.js').fetch()
}
});
39
Почему не require.js?
40
Почему не require.js?
40
Относительные пути
Режимы
41
• Много файлов
• Ленивая подгрузка
• Оптимизируем
загрузку с помощью
basis server
Dev Production
• Один (обычно) js
файл, в котором весь
код, шаблоны и
словари, один CSS
файл на тему
• Различные
оптимизации
Режимы
42
<b:style src="block.css"/>
<div{element} class="block
block_{selected}">
<h2>{title}</h2>
<ul>
<!--{childNodesHere}-->
</ul>
</div>
[[1,1,["element"],"div",[4,
[["block_","selected"]],
0,"block"],[1,0,0,"h2",
[3,1,["title"]]],
[1,0,0,"ul",[8,1,
["childNodesHere"]]]]]
Dev Production
Производительность
43
История одного view
44
45
1900 msknockout.js
basis.js
45
1900 ms
23 ms
knockout.js
basis.js
45
1900 ms
23 ms
Разница более чем в 80 раз!
knockout.js
Все дело в DOM
46
Структуры данных
47
Другие фреймворки
48
• backbone.js – постоянно копирует
поля, событие для каждого
изменного поля
• knockout.js – создает слишком
много массивов, замыканий и других
структур
• AngularJS – dirty check (глубокое
копирование и сравнение объектов)
Простые модели
49
backbone.js knockout.js basis.data
10 000 моделей c 5 полями
1 000 моделей с 50 полями
136 ms 160 ms 2 ms
3.3 MB 10.9 MB 0.3 MB
86 ms 220 ms 1 ms
1.3 MB 13.5 MB 0.1 MB
Время
Память
Время
Память
Модели посложнее
50
backbone.js basis.entity
создание 10 000 моделей
5 типизированных полей, индекс, коллекция
обновление
189 ms 58 ms
3.1 MB 1.1 MB
235 ms 15 ms
+0.3 MB +0 MB
Время
Память
Время
Память
Архив с тестами
goo.gl/nLPJf
51
basis.js
52
• Простые структуры
• Дельта изменений
• Агрегация событий
• Данные не упорядочены
• Избегаем bind, замыканий
• ...
Инструменты
53
basisjs-tools
• Консольный инструмент для
разработки
• Работает под управлением node.js
• Установка:
npm install -g basisjs-tools
54
Команды basisjs-tools
• create – кодогенерация
• server – dev-сервер
• build – сборщик
55
Сборщик
56
• Не требует деклараций, списков
файлов, карты зависимостей и т.п.
• Рекурсивно парсит и анализирует
файлы, строя граф файлов
приложения
• Использует AST для анализа
• Может применять различные
оптимизации
basis build
57
Google Chrome plugin
58
(расширение для Developer Tools)
goo.gl/OYhFK
59
НЕЛЬЗЯ ТАК ПРОСТО ВЗЯТЬ
И РАССКАЗАТЬ ПРО BASIS.JS
ЗА 30 МИНУТ
Сделано на basis.js
60
Сделано на basis.js
60
Сделано на basis.js
60
Сделано на basis.js
60
Сделано на basis.js
60
Сделано на basis.js
60
61
ostrohack
62
github.com/sharifulin/ostrohack
basisjs.com
63
basisjs.com/tour
64
github.com/basisjs
65
Спасибо за внимание!
Вопросы?
66
Роман Дворнов
@rdvornov
rdvornov@gmail.com
basis.js
basisjs.com
github.com/basisjs

More Related Content

What's hot (20)

Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
Roman Dvornov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
Roman Dvornov
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
Alexey Ivanov
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
Roman Dvornov
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
Eugene Abrosimov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
Igor Shkulipa
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
Alexey Ivanov
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
Denis Shestakov
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Ontico
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Roman Dvornov
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ontico
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Пишем БЭМ правильно
Пишем БЭМ правильноПишем БЭМ правильно
Пишем БЭМ правильно
Ihor Zenich
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
Roman Dvornov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
Roman Dvornov
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
Alexey Ivanov
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
Roman Dvornov
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
Eugene Abrosimov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
Igor Shkulipa
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
Alexey Ivanov
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
Denis Shestakov
 
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Basis.js — почему я не бросил разрабатывать свой фреймворк / Роман Дворнов (О...
Ontico
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Roman Dvornov
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ontico
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Пишем БЭМ правильно
Пишем БЭМ правильноПишем БЭМ правильно
Пишем БЭМ правильно
Ihor Zenich
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 

Similar to Basis.js - почему я не бросил разрабатывать свой фреймворк (extended) (20)

webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
Denis Izmaylov
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
Roman Brovko
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Dmitry Degtyarev
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
buranLcme
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
Mikhail Davydov
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
Alexandre Kalendarev
 
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир ДупелевRich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Ontico
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
InTRUEdeR
 
сравнение Drupal и 1с битрикс
сравнение Drupal и 1с битрикссравнение Drupal и 1с битрикс
сравнение Drupal и 1с битрикс
Andrii Podanenko
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
Igor Sazonov
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
The NGO Development Center
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
 
Введение в Oracle
Введение в OracleВведение в Oracle
Введение в Oracle
Alexander Rusetsky
 
ReactJS: Свет в конце тоннеля
ReactJS: Свет в конце тоннеляReactJS: Свет в конце тоннеля
ReactJS: Свет в конце тоннеля
Rinat Abdullin
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Yandex
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
Denis Izmaylov
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
Roman Brovko
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Dmitry Degtyarev
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
buranLcme
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
Mikhail Davydov
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
Alexandre Kalendarev
 
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир ДупелевRich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Ontico
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
InTRUEdeR
 
сравнение Drupal и 1с битрикс
сравнение Drupal и 1с битрикссравнение Drupal и 1с битрикс
сравнение Drupal и 1с битрикс
Andrii Podanenko
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
Igor Sazonov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
 
ReactJS: Свет в конце тоннеля
ReactJS: Свет в конце тоннеляReactJS: Свет в конце тоннеля
ReactJS: Свет в конце тоннеля
Rinat Abdullin
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Yandex
 

More from Roman Dvornov (16)

Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
Roman Dvornov
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
Roman Dvornov
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
Roman Dvornov
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
Roman Dvornov
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
Roman Dvornov
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
Roman Dvornov
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускорения
Roman Dvornov
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)
Roman Dvornov
 
CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)
Roman Dvornov
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
Roman Dvornov
 
Component Inspector
Component InspectorComponent Inspector
Component Inspector
Roman Dvornov
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
Roman Dvornov
 
Карточный домик
Карточный домикКарточный домик
Карточный домик
Roman Dvornov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
Roman Dvornov
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
Roman Dvornov
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
Roman Dvornov
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
Roman Dvornov
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
Roman Dvornov
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускорения
Roman Dvornov
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)
Roman Dvornov
 
CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)
Roman Dvornov
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
Roman Dvornov
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
Roman Dvornov
 
Карточный домик
Карточный домикКарточный домик
Карточный домик
Roman Dvornov
 

Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)

  翻译: