SlideShare a Scribd company logo
Куда мы все катимся?
Беда Илья
bro.agency
1
Кто я?
• Тимлид и один из основателей bro.agency
• Разрабатываю веб-формочки на python в течение 8 лет
• Продвигаю функциональное программирование в массы
• Провожу воркшопы и мастер-классы
2
Про что доклад?
• JavaScript сейчас на гребне волны
• Я расскажу свой личный опыт. Свое видение индустрии
• Расскажу о причинах, по которым произошел такой бурный рост
JavaScript
• Расскажу о проблемах и возможном пути их решения
3
Когда-то давно все было просто
<script type="text/javascript">
$(document).ready(function() {
$(".fancybox").fancybox();
});
</script>
4
Когда-то давно все было просто
<script type="text/javascript">
$(document).ready(function() {
$(".fancybox").fancybox();
});
</script>
5
Потом стало немного сложнее
<script type="text/javascript">
$(document).ready(function() {
$("p").click(function() {
$(this).slideUp();
});
});
</script>
6
Потом стало немного сложнее
<script type="text/javascript">
$(document).ready(function() {
$("p").click(function() {
$(this).slideUp();
});
});
</script>
7
Дальше появилась динамика
<script type="text/javascript">
$.get("ajax/test.html", function(data) {
$(".result").html(data);
});
</script>
8
Дальше появилась динамика
<script type="text/javascript">
$.get("ajax/test.html", function(data) {
$(".result").html(data);
});
</script>
9
Дальше появилась динамика
<script type="text/javascript">
$.get("ajax/test.html", function(data) {
$(".result").html(data);
});
</script>
10
Браузеры стали еще быстрее
• 2009 — Mozilla Firefox 3.5 TraceMonkey(SpiderMonkey)
• 2010 — Mozilla Firefox 4.0 JägerMonkey
11
И все продолжили использовать
JQuery
12
Кто из вас знает, почему JQuery
плох для больших фронтенд
проектов со сложной логикой?
13
Проблемы JQuery
• Не задает структуру проекта
• Не задает архитектуру приложения
• Набор низкоуровневых императивных примитивов
• Нет единого мнения, как делать правильно
• Очень много степеней свободы
14
Крупные компании с опытом сразу
это понимали.
Они делали внутренние
фреймворки для создания
фронтенда.
15
Нельзя написать сложный
фронтенд на JQuery без подготовки
<script type="text/javascript">
...
$('a.tra.papa').unbind('click');
$('a.tra.papa').bind(doSomething);
...
</script>
16
Нельзя написать сложный
фронтенд на JQuery без подготовки
<script type="text/javascript">
...
$('a.tra.papa').unbind('click');
$('a.tra.papa').bind(doSomething);
...
</script>
17
Нельзя написать сложный
фронтенд на JQuery без подготовки
<script type="text/javascript">
...
$('a.tra.papa').unbind('click');
$('a.tra.papa').bind(doSomething);
...
</script>
18
Компромиcсы на бэкэнде
{% for fset, cap, tid in study_formsets.fset_cap_tid %}
$(function() {
$('.form_container_{{ tid }}').formset({
prefix: '{{ fset.prefix }}',
formCssClass: '{{ tid }}',
extraClasses: ['myrow1', 'myrow2']
});
});
19
У кого был legacy проект на JQuery,
который хотелось быстрее
забросить?
20
Самые стойкие извлекли урок и
начали делать фронтенд по-другому
21
backbone.js
• Шаблонизатор
• Не дает архитектуру
• Позволяет взять за основу MVC
22
marionettejs
• Архитектура
• Набор хэлперов для backbone.js
• Data-Binding
23
• Больше логики и структуры
• Все включено
• Полноценный фронтенд фреймворк
AngularJS
24
<!doctype html>
<html ng-app>
<head>
<script src="scripts/angular.1.5.3.min.js"></script>
</head>
<body>
<div>
<label>Name:</label>
<input type="text" ng-model="yourName" placeholder="Enter a name here">
<hr>
<h1>Hello {{yourName}}!</h1>
</div>
</body>
</html>
AngularJS
25
<!doctype html>
<html ng-app>
<head>
<script src="scripts/angular.1.5.3.min.js"></script>
</head>
<body>
<div>
<label>Name:</label>
<input type="text" ng-model="yourName" placeholder="Enter a name here">
<hr>
<h1>Hello {{yourName}}!</h1>
</div>
</body>
</html>
AngularJS
26
<!doctype html>
<html ng-app>
<head>
<script src="scripts/angular.1.5.3.min.js"></script>
</head>
<body>
<div>
<label>Name:</label>
<input type="text" ng-model="yourName" placeholder="Enter a name here">
<hr>
<h1>Hello {{yourName}}!</h1>
</div>
</body>
</html>
AngularJS
27
<!doctype html>
<html ng-app>
<head>
<script src="scripts/angular.1.5.3.min.js"></script>
</head>
<body>
<div>
<label>Name:</label>
<input type="text" ng-model="yourName" placeholder="Enter a name here">
<hr>
<h1>Hello {{yourName}}!</h1>
</div>
</body>
</html>
AngularJS
28
AngularJS
• Код из примеров и документации не подходит для реальных
проектов
• Много магии, которую ты не понимаешь
• С определенного момента, не зная эту магию, нельзя создавать
эффективные приложения
29
React
• Функциональный подход к фронтенду
• Фронтенд как чистая функция от состояния
30
Фронтенд как чистая функция от
состояния
31
Фронтенд как чистая функция от
состояния
32
Фронтенд как чистая функция от
состояния
33
React открыл дверь
функциональному миру во
фронтенд
Виртуальный дом решил проблему производительности, что
позволило использовать концепции реактивного программирования
для фронтенда на реальных проектах
34
Webcomponents
Создатели браузеров знают, как делать фронтенд, и
предлагают свою концепцию компонетного подхода в вебе.
35
Angular2
Это абсолютно новый фреймворк
Предлагает изначально пользоваться TypeScript
36
Gradual typing
Недостаточно писать код на императивном языке со слабой
динамической типизацией
Нужно больше гарантий - нужна система типов
• Typescript
• Flow
37
Развитие идет колоссальными
темпами
38
Почему идет такой стремительный
рост и развитие фронтенда?
39
Достаточно освоить JavaScript, и ты
можешь писать фуллстек
приложения и оптимизировать свой
рабочий процесс
40
node.js
Полностью гомогенная структура
В отличие от:
• C/C++ и Makefile
• Android и gradle
41
node.js
• Grunt
• Gulp
• Babel
• Webpack
42
Но все ли так хорошо?
43
Быстрорастущая индустрия
создает проблемы
44
Проблемы зависимостей и
менеджера пакетов
45
npm -> npm2 -> npm3
• npm 1
• npm 2
• npm 3
46
npm -> npm2 -> npm3
• npm 1 — dependency hell
• npm 2
• npm 3
47
Dependency hell
48
npm -> npm2 -> npm3
• npm 1 — dependency hell
• npm 2
• npm 3
49
npm -> npm2 -> npm3
• npm 1 — dependency hell
• npm 2 — 1,5 GB зависимостей в node_modules
• npm 3
50
npm -> npm2 -> npm3
• npm 1 — dependency hell
• npm 2 — 1,5 GB зависимостей в node_modules
• npm 3 — долгая установка: 40 минут занимает разворачивание проекта
с нуля
51
npm -> npm2 -> npm3
• npm 1 — dependуncy hell
• npm 2 — 1,5 GB зависимостей в node_modules
• npm 3 — долгая установка: 40 минут занимает разворачивание проекта
с нуля
• npm 3 — если жестко фиксировать версии, работает как npm2
52
ReactRouter v1.0.2
Минорное изменение в history с 1.12 на 1.13 сломало ReactRouter
Разработчики не всегда следуют спецификации semver
53
Старые зависимости
54
React Native
Проект начали в ноябре на react-native 0.13.0
В процессе разработки обновились до 0.15.0, дальше не получилось
Закончили активную разработку при 0.19.0
Сейчас 0.23.0
55
React Native
Проект начали в ноябре на react-native 0.13.0
В процессе разработки обновились до 0.15.0, дальше не получилось
Закончили активную разработку при 0.19.0
Сейчас 0.24.1
56
Баги на этапе установки
зависимостей
57
Баги на этапе установки
зависимостей
58
Баги на этапе установки
зависимостей
59
Баги на этапе установки
зависимостей
60
Новый стек - новый toolset
61
Иммутабельные данные в
мутабельном языке
62
Иммутабельные данные в
мутабельном языке
63
Gradual typing
64
Gradual typing
65
Gradual typing
66
Gradual typing
67
“Головокружение от успехов”
68
Цикличность мира
Мы пытаемся использовать старые добрые инструменты для решения
новых задач более высокого уровня
69
Цикличность мира
Но это уже с нами было
70
Цикличность мира
Мы имеем проблемы, аналогичные тем, что были у JQuery, но на
уровне инфраструктуры и языка
71
И что же нам делать?
72
Elm
73
Elm
• Статически типизированный с автоматическим выводом типов
• Изначально ориентирован на фронтенд
• Свой менеджер пакетов
• Интеграция с JavaScript
• Интеграция с webpack и React
74
Статически типизированный с
автоматическим выводом типов
75
Изначально ориентирован на
фронтенд
• The Elm Architecture
• Реактивный
• Компоненты могут вкладываться друг в друга бесконечно
• Высокая модульность и ориентированность на повторное
использование кода
76
Реактивный
• Интерфейс — свертка потока событий
• Логирование всех событий
• Time travel debugger
77
Свой менеджер пакетов
• Содержит все необходимые базовые примитивы
• Легко интегрируется с github
• Документация генерируется автоматически
• Строго следит за тем, чтобы пакеты следовали semver
78
Интеграция с JavaScript runtime
Elm interop guide
var div = document.getElementById('elm-stamps');
var stamps = Elm.embed(Elm.Stamps, div, { reset:[] });
stamps.ports.reset.send([]);
stamps.ports.count.subscribe(function(count) {
console.log(count);
});
79
Интеграция с JavaScript runtime
Elm interop guide
var div = document.getElementById('elm-stamps');
var stamps = Elm.embed(Elm.Stamps, div, { reset:[] });
stamps.ports.reset.send([]);
stamps.ports.count.subscribe(function(count) {
console.log(count);
});
80
Интеграция с JavaScript runtime
Elm interop guide
var div = document.getElementById('elm-stamps');
var stamps = Elm.embed(Elm.Stamps, div, { reset:[] });
stamps.ports.reset.send([]);
stamps.ports.count.subscribe(function(count) {
console.log(count);
});
81
Интеграция с JavaScript runtime
Elm interop guide
var div = document.getElementById('elm-stamps');
var stamps = Elm.embed(Elm.Stamps, div, { reset:[] });
stamps.ports.reset.send([]);
stamps.ports.count.subscribe(function(count) {
console.log(count);
});
82
Интеграция с Webpack и React
• elm-webpack-loader
• elm-react-component
83
Как начать?
http://elm-lang.org/docs
http://elm-lang.org/try
Mario example
Time travel debugger example
84
Время для вопросов
Илья Беда
ilya@bro.agency
js.bro.agency
85
Fork me
on GitHub

More Related Content

PPTX
Little Service in 2h
PDF
Node.js Меньше сложности, больше надежности Holy.js 2021
PDF
Расширь границы возможного вместе с Gradle
PDF
Jbreak 2016: Твой личный Spring Boot Starter
PDF
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
PDF
микроСЕРВИСЫ: огонь, вода и медные трубы
PDF
Javaone 2013 moscow gradle
PPTX
Chef @DevWeb
Little Service in 2h
Node.js Меньше сложности, больше надежности Holy.js 2021
Расширь границы возможного вместе с Gradle
Jbreak 2016: Твой личный Spring Boot Starter
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
микроСЕРВИСЫ: огонь, вода и медные трубы
Javaone 2013 moscow gradle
Chef @DevWeb

What's hot (20)

PDF
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
PDF
Конструктор / Денис Паясь (Яндекс)
PDF
Remote Highload
PDF
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
PDF
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
PDF
Всему своё время / Роман Ивлиев (Банки.ру)
PDF
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
PDF
Инструменты разные нужны, инструменты разные важны
PDF
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
PDF
Баба Яга против!
PPTX
Daemons In Web on #devrus
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
PDF
Инструментируй это
PDF
Алексей Фомкин, Практическое применение Web Workers
PDF
мифы о спарке
PDF
Фронтенд разработка без боли
PDF
Хорошо поддерживаемое приложение
PDF
Continuous Delivery with Jenkins: Lessons Learned
PDF
Современный фронтенд -- как не утонуть в море хайпа?
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Конструктор / Денис Паясь (Яндекс)
Remote Highload
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
Всему своё время / Роман Ивлиев (Банки.ру)
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Node.js введение в технологию, КПИ #ITmeetingKPI
Инструменты разные нужны, инструменты разные важны
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Баба Яга против!
Daemons In Web on #devrus
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Инструментируй это
Алексей Фомкин, Практическое применение Web Workers
мифы о спарке
Фронтенд разработка без боли
Хорошо поддерживаемое приложение
Continuous Delivery with Jenkins: Lessons Learned
Современный фронтенд -- как не утонуть в море хайпа?
Ad

Similar to D2D Pizza JS Илья Беда "Куда мы все катимся?" (20)

PDF
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
PDF
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
PDF
Javascript-фреймворки:
 должен остаться только один
PDF
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
PDF
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
PPTX
Сложные социальные приложения с помощью JS MVC фреймворков
PDF
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
PDF
Компонентный подход: скучно, неинтересно, бесперспективно
PDF
Frontend - экосистема и будущее: iforum 2015
PDF
Фронтенд в Яндексе
PDF
JavaScript завтра / Сергей Рубанов (Exante Limited)
PDF
JavaScript завтра
PDF
webpack: 7 бед - один ответ
PDF
Фреймворк-невиидмка
PDF
Java script и frontend завтра - Kharkiv JS 2013
PDF
Фронтенд в Яндексе
PDF
Фронтенд в Яндексе
PDF
Фреймворки: недалёкое прошлое и ближайшее будущее
PDF
Фреймворки: Недалёкое Прошлое и Ближайшее Будущее
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
Сложные социальные приложения с помощью JS MVC фреймворков
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
Компонентный подход: скучно, неинтересно, бесперспективно
Frontend - экосистема и будущее: iforum 2015
Фронтенд в Яндексе
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра
webpack: 7 бед - один ответ
Фреймворк-невиидмка
Java script и frontend завтра - Kharkiv JS 2013
Фронтенд в Яндексе
Фронтенд в Яндексе
Фреймворки: недалёкое прошлое и ближайшее будущее
Фреймворки: Недалёкое Прошлое и Ближайшее Будущее
basis.js - почему я не бросил разрабатывать свой фреймворк
Ad

More from Dev2Dev (20)

PDF
D2D Чипец 2 Николай Иванов - Data Informed Design
PDF
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проект
PDF
D2D Чипец 2 Виталий Мазуревич - Engeneering design
PDF
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...
PDF
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"
PDF
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скуки
PDF
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...
PDF
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"
PDF
D2D Pizza JS Игорь Ковган "Koa поможет"
PPTX
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
PDF
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
PDF
Всё будет в Ажуре. Завершинский Денис D2D Just.NET
PPTX
Модульная структура. Цветцих Денис D2D Just.NET
PDF
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
PDF
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
PPTX
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
PPTX
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
PDF
Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NET
PDF
Трудности повторного использования
PDF
RxJava + Retrofit
D2D Чипец 2 Николай Иванов - Data Informed Design
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проект
D2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скуки
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"
D2D Pizza JS Игорь Ковган "Koa поможет"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
Всё будет в Ажуре. Завершинский Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NET
Трудности повторного использования
RxJava + Retrofit

D2D Pizza JS Илья Беда "Куда мы все катимся?"