SlideShare a Scribd company logo
Современный
фронтенд:
Как не утонуть
в море хайпа?
vladimir.malyk@gmail.com
Язык фронтенда – JavaScript
Написан за 10 дней
Единственный язык, который
выполняется в браузерах
Исполнилось 20 лет
Что думают о JavaScript ?
Что требуют от JavaScript ?
Меншьше перезагрузок страницы.
Больше ajax.
Все меньше продукта на сервере,
всё больше его во фронтенде.
Веб-странички превращаются в
полноценные приложения
(SPA – Single Page Applications).
Требования рынка опережают
традиционные возможности Web
Что требуют от JavaScript ?
Рынок хочет UX
как в нативных
приложениях.
Что требуют от JavaScript ?
Нам понадобилось
приложение
с хорошим UX в браузере
на мобильных устройствах
Чем живёт современный
фронтенд?
Чем живёт современный
фронтенд?
Суета как на Клондайке
Чем живёт современный
фронтенд?
Несколько экосистем.
Чем живёт современный
фронтенд?
Несколько экосистем.
Десятки фреймворков.
Чем живёт современный
фронтенд?
Несколько экосистем.
Десятки фреймворков.
Тысячи библиотек и утилит.
Чем живёт современный
фронтенд?
Несколько экосистем.
Десятки фреймворков.
Тысячи библиотек и утилит.
Ежегодные
революционные концепции.
Чем живёт современный
фронтенд?
Если выходит что-то новенькое, то:
v0.0.1 – пробуют
v0.0.2 – советуют друзьям
v0.0.3 – пускают в продакшн
#1 на GitHub – JavaScript
Вершина айсберга JavaScript
shim, polyfill, es5, es6, es7, traceur,
babel, requirejs, commonjs,
systemjs, browserify, webpack,
jspm, gulp, grunt, bower, npm,
nodejs, expressjs, polymer, angular,
react, backbone, marionette, lodash,
underscore, jquery,html5, css3,
sass, less, vanillajs
VanillaJS – чистый JavaScript
Асинхронщина, которая
живёт долго.
VanillaJS – чистый JavaScript
Классов нет, всё состоит из объектов.
Функции – это объекты, которые могут
выполняться.
Изкоробки предложена концепция
компоновки объектов – Прототипы и
прототипное наследование.
Прототипы – это просто
VanillaJS – “асинхронщина”
Функициям управление передаётся
"хаотично" – в завимисти
от того, какие события возникают
во время "долгой жизни" приложения.
VanillaJS – “асинхронщина”
В один момент времени управление
предоставляется только одной функции,
поэтому функции должны удерживать
управление минимальное время.
VanillaJS – “асинхронщина”
В общем виде, это минимальное время
достигается за счёт того, что:
1. функция стартует долгую i/o операцию;
2. подписывает новую функцию на событие
завершения операции;
3. завершает свою работу и отпускает
управление.
VanillaJS – “асинхронщина”
Удобно, когда цепочка таких функций
имеет общую область видимости.
Эту проблему решают замыкания
и инструменты передачи контекста.
VanillaJS => jQuery
<script src="myscripts.js"></script>
Ajax + DOM манипуляции
(виджеты, анимашки).
jQuery => Backbone + Underscore
Шаблоны, Вьюшки, Модельки,
Коллекции, Хэш-роутинг, Шины событий,
Манипуляции данными
Backbone => Marionette
MVC фреймворк поверх Backbone.
Вместо Underscore часто берут Lo-Dash.
Marionette => Marionette + Bower
Наступает в тот момент, когда уже лень
следить за версиями
jQuery-*, backbone-* и bootstrap.
Bower – пакетный менеджер, который
закачает нужные библиотеки в корень
проекта и согласует их по версиям.
Кроме того, Bower – это первый
проблеск внебраузерного JS:
понадобится установка nodejs и npm.
Marionette => Marionette + Bower + RequireJS
Библиотек стало ещё больше – теперь
необходимо менеджить их загрузку в браузер.
VanillaJS, в нынешнем виде,
не умеет модульность исполняемого кода,
поэтому на помощь приходит RequireJS.
RequireJS – это js-утилита, которая загрузит
фрагмент исполняемого кода только тогда, когда
тот понадобится другому исполняемому коду.
Marionette > Marionette + Bower + RequireJS
Фрагменты исполняемого кода будут
изолированы друг от друга через замыкания,
загружаются в рантайме,
асинхронно и по требованию.
Такие фрагменты должны соответствовать
AMD (Asynchronous Module Definition).
Практически всё, что можно найти
на bower.io – можно подгружать как AMD.
Marionette > Marionette + Bower + RequireJS
Ещё есть r.js.
Утилита, которая по RequireJS конфигу
собирает все модули в один
минифицированный исполняемый файл.
Теперь весь код отправится на девайс
в один запрос.
Всё это – Классика.
Backend: node/io + npm + CommonJS
Альтернативная js реальность,
в которой исполняемый код
подключается синхронно
и выполняется на бекенде.
Как в php/python/ruby.
Модули npm поставляются в формате
CommonJS, предназначены для выполнения в
NodeJs,
и несовместимы с AMD.
Ребята захотели npm модули в браузере.
Так родился Browserify.
Marionette => Marionette + npm + Browserify
В реализации отказываются от асинхронной
загрузки исполняемого кода. Исходник выглядит
чище и приятней.
Такой код нельзя запустить в браузере "как есть",
поэтому Browserify парсит исходники и
собирает их в пригодный для браузера файл.
Подход популярен – в npm есть почти всё то,
что есть в bower.
Разаботчики поставляют свой софт как в виде
AMD, так и в виде CommonJS модулей.
Marionette => Marionette + npm + Browserify
Побочная плюшка – теперь ваш код сможет
отрендерить DOM как на бекенде внутри NodeJS,
так и в браузере.
Это назвали "Изоморфный Web" и слепили под
это специально заточенный фреймворк – Meteor.
Marionette + npm + Browserify + Grunt
Grunt – таск ранер.
Это утилита, которая автоматизирует вам
рутинные операции.
Например: следить за изменениями в исходниках,
автоматически собирать новый бандл
и перезагрузить страничку браузера.
Вместо Grunt сегодня отказываются в пользу
проворного Gulp. А ещё есть Broccoli.
Marionette + bower + npm + Browserify + Gulp
Некоторые не около-js-ные вещи,
например разные css плюшки,
реже попадают в npm.
Поэтому часто пакеты тащат
одновременно и из bower и из npm.
Склеивают это всё через
написание правил Gulp.
Boilerplate: Marionette + bower + npm + Browserify + Gulp
У каждого уважающего себя
фронденд-разработчика свой "коронный"
набор утилит и способов их склейки.
Фронтендщики обязательно публикуют их на
своём гитхабе с приставкой "boilerplate".
Сотни их – разных boilerplate с "коронным"
набором утилит и "коронным" workflow.
Yeoman: Marionette + bower + npm + Browserify + Gulp
Часто boilerplate заточены
под конкретные версии софта, поэтому они
стремительно плодятся
и стремительно устаревают.
Апофеоз – заплить свой генератор для
http://yeoman.io/
Это специальный пакетный менеджер для
скафолдинга приложений.
Marionette + bower + npm + Gulp +
КоронныйЗоопаркУтилит + AMD + CommonJS +
Webpack!!11
Webpack написали чтобы упаковать любой
фронтенд зоопарк.
Позволяют упаковать в один бандл как AMD,
так и CommonJS, код с GitHub, стили, шаблоны,
графику и вашу собаку.
Написаны плагины для подгрузки и упаковки
CSS, LESS, SASS, Stylus, CoffeeScript, JSX, JSON
и всего на свете.
Всё это было модно полгода назад.
Встречайте!
ES6 Harmony!
ES6 Modules!
ES6 Harmony & ES6 Modules
Пару недель назад была принята
новая спецификая JS (ES6)
с нативной поддержкой модулей
в новом формате!
Множественные улучшения языка JS:
модули
классы
генераторы
функции-стрелки
и многое другое
ES6 Harmony & ES6 Modules
Хотите писать на ES6?
Ждёте появленя поддержки ES6 в браузерах?
ES6 Harmony & ES6 Modules
Зря. Люди уже давно пишут на ES7.
В ES7 ещё больше плюшек.
Ожидается, что он будет принят
в следующем 2016м году.
ES6/ES7
Фронтенд на несуществующем языке
это норма.
Настолько сильно перегрет
современный фронтенд.
ES6/ES7
Ребята на JavaScript запилили себе
JavaScript-компилятор,
который компиллирует ES6/ES7
в VanillaJS ES5.
ES6/ES7
Но один компилятор – это мало.
Поэтому запилили сразу два:
Traceur и Babel.
Поддерживаемые фичи здесь:
http://kangax.github.io/compat-table/es7/
ES6/ES7
Итак, теперь на повестке дня
AMD + CommonJS + ES6 Modules.
ES6/ES7 + SystemJS
SystemJS – универсальный загрузчик модулей
AMD/CommonJS/ES6 с синтаксисом ES6+.
Ваши ES6/7 исходники загрузятся в браузер
как есть и скомпилируются на лету.
Если хочется – можно собрать всё в один
предкомпиленный и минифицированный бандл.
import $ from 'jquery'; // загрузит вам jQuery
import MainAppES6 from 'apps/mainAppES6'; // загрузит
ваш ES6+ файл и скомпилирует его на лету
ES6/ES7 + SystemJS + jspm
Jspm это менеджер пакетов,
специально разработанный для
SystemJS
jspm умеет тащить зависимости
c github, npm и bower.
Весь зоопарк теперь аккуратно лежит в
jspm_packages.
Документация по JS:
http://dmitrysoshnikov.com/ecmascript/ru-chapter-1-execution-contexts/
Обзор новых возможностей ES6:
https://github.com/lukehoban/es6features
Старт с es6 и jspm за 10 минут (видео):
http://glenmaddern.com/articles/javascript-in-2015

More Related Content

What's hot

Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
Webpack integration
Webpack integrationWebpack integration
Webpack integration
Illia Zub
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ontico
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
Konstantin Komelin
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
ITCrowd Almaty
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Ontico
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
IT Event
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
Ontico
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
Ontico
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
Denis Izmaylov
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
DevDay
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENBAleksandr Boichenko
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
GeeksLab Odessa
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
endeveit
 
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
Fwdays
 

What's hot (20)

Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Webpack integration
Webpack integrationWebpack integration
Webpack integration
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
non-blocking java script
non-blocking java scriptnon-blocking java script
non-blocking java script
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENB
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
 

Viewers also liked

Flexbox - верстка без float'ов by Dmitry Radyno
Flexbox - верстка без float'ов by Dmitry RadynoFlexbox - верстка без float'ов by Dmitry Radyno
Flexbox - верстка без float'ов by Dmitry Radyno
Дмитрий Радыно
 
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
Омские ИТ-субботники
 
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
Chen-Tien Tsai
 
Webpack - просто о сложном
Webpack -  просто о сложномWebpack -  просто о сложном
Webpack - просто о сложном
Tatiana Sakharova
 
современный подход к Html верстке
современный подход к Html версткесовременный подход к Html верстке
современный подход к Html верстке
Транслируем.бел
 
BabelJS - James Kyle at Modern Web UI
BabelJS - James Kyle at Modern Web UIBabelJS - James Kyle at Modern Web UI
BabelJS - James Kyle at Modern Web UI
modernweb
 
Intro to Open Babel
Intro to Open BabelIntro to Open Babel
Intro to Open Babel
baoilleach
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
Roman Dvornov
 
Hey webpack
Hey webpackHey webpack
Hey webpack
Andrew Makarow
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Marcin Gajda
 
Webpack DevTalk
Webpack DevTalkWebpack DevTalk
Webpack DevTalk
Alessandro Bellini
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
lgordey
 
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JS
Emil Öberg
 
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack Introduction
Anjali Chawla
 
Webpack
WebpackWebpack
Привлечение инвестиций: о чем никто не говорит
Привлечение инвестиций: о чем никто не говоритПривлечение инвестиций: о чем никто не говорит
Привлечение инвестиций: о чем никто не говорит
Нетология
 
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
tdc-globalcode
 
Integrating tornado and webpack
Integrating tornado and webpackIntegrating tornado and webpack
Integrating tornado and webpack
Tom Chen
 
TDC2016SP - Trilha Fintech
TDC2016SP - Trilha FintechTDC2016SP - Trilha Fintech
TDC2016SP - Trilha Fintech
tdc-globalcode
 
21 термин из HTML-верстки
21 термин из HTML-верстки21 термин из HTML-верстки
21 термин из HTML-верстки
Нетология
 

Viewers also liked (20)

Flexbox - верстка без float'ов by Dmitry Radyno
Flexbox - верстка без float'ов by Dmitry RadynoFlexbox - верстка без float'ов by Dmitry Radyno
Flexbox - верстка без float'ов by Dmitry Radyno
 
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
 
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
 
Webpack - просто о сложном
Webpack -  просто о сложномWebpack -  просто о сложном
Webpack - просто о сложном
 
современный подход к Html верстке
современный подход к Html версткесовременный подход к Html верстке
современный подход к Html верстке
 
BabelJS - James Kyle at Modern Web UI
BabelJS - James Kyle at Modern Web UIBabelJS - James Kyle at Modern Web UI
BabelJS - James Kyle at Modern Web UI
 
Intro to Open Babel
Intro to Open BabelIntro to Open Babel
Intro to Open Babel
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Hey webpack
Hey webpackHey webpack
Hey webpack
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
 
Webpack DevTalk
Webpack DevTalkWebpack DevTalk
Webpack DevTalk
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
 
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JS
 
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack Introduction
 
Webpack
WebpackWebpack
Webpack
 
Привлечение инвестиций: о чем никто не говорит
Привлечение инвестиций: о чем никто не говоритПривлечение инвестиций: о чем никто не говорит
Привлечение инвестиций: о чем никто не говорит
 
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
 
Integrating tornado and webpack
Integrating tornado and webpackIntegrating tornado and webpack
Integrating tornado and webpack
 
TDC2016SP - Trilha Fintech
TDC2016SP - Trilha FintechTDC2016SP - Trilha Fintech
TDC2016SP - Trilha Fintech
 
21 термин из HTML-верстки
21 термин из HTML-верстки21 термин из HTML-верстки
21 термин из HTML-верстки
 

Similar to Современный фронтенд -- как не утонуть в море хайпа?

Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
Pavel Chertorogov
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
ITCrowd Almaty
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
Vasiliy Teliatnikov
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendenciesDarkestMaster
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
Provectus
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
От пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииОт пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лаборатории
Yandex
 
JavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальностьJavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальность
Denis Izmaylov
 
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
ScrumTrek
 
Browzer
BrowzerBrowzer
BrowzerIKTO
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Yandex
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщикаmcslayer
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработке
Denis Izmaylov
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
beshkenadze
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 

Similar to Современный фронтенд -- как не утонуть в море хайпа? (20)

Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
От пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииОт пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лаборатории
 
JavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальностьJavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальность
 
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
 
Browzer
BrowzerBrowzer
Browzer
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщика
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработке
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 

Современный фронтенд -- как не утонуть в море хайпа?

  • 1. Современный фронтенд: Как не утонуть в море хайпа? vladimir.malyk@gmail.com
  • 2. Язык фронтенда – JavaScript Написан за 10 дней Единственный язык, который выполняется в браузерах Исполнилось 20 лет
  • 3. Что думают о JavaScript ?
  • 4. Что требуют от JavaScript ? Меншьше перезагрузок страницы. Больше ajax. Все меньше продукта на сервере, всё больше его во фронтенде. Веб-странички превращаются в полноценные приложения (SPA – Single Page Applications).
  • 6. Что требуют от JavaScript ? Рынок хочет UX как в нативных приложениях.
  • 7. Что требуют от JavaScript ? Нам понадобилось приложение с хорошим UX в браузере на мобильных устройствах
  • 11. Чем живёт современный фронтенд? Несколько экосистем. Десятки фреймворков.
  • 12. Чем живёт современный фронтенд? Несколько экосистем. Десятки фреймворков. Тысячи библиотек и утилит.
  • 13. Чем живёт современный фронтенд? Несколько экосистем. Десятки фреймворков. Тысячи библиотек и утилит. Ежегодные революционные концепции.
  • 14. Чем живёт современный фронтенд? Если выходит что-то новенькое, то: v0.0.1 – пробуют v0.0.2 – советуют друзьям v0.0.3 – пускают в продакшн
  • 15. #1 на GitHub – JavaScript
  • 16. Вершина айсберга JavaScript shim, polyfill, es5, es6, es7, traceur, babel, requirejs, commonjs, systemjs, browserify, webpack, jspm, gulp, grunt, bower, npm, nodejs, expressjs, polymer, angular, react, backbone, marionette, lodash, underscore, jquery,html5, css3, sass, less, vanillajs
  • 17. VanillaJS – чистый JavaScript Асинхронщина, которая живёт долго.
  • 18. VanillaJS – чистый JavaScript Классов нет, всё состоит из объектов. Функции – это объекты, которые могут выполняться. Изкоробки предложена концепция компоновки объектов – Прототипы и прототипное наследование.
  • 20. VanillaJS – “асинхронщина” Функициям управление передаётся "хаотично" – в завимисти от того, какие события возникают во время "долгой жизни" приложения.
  • 21. VanillaJS – “асинхронщина” В один момент времени управление предоставляется только одной функции, поэтому функции должны удерживать управление минимальное время.
  • 22. VanillaJS – “асинхронщина” В общем виде, это минимальное время достигается за счёт того, что: 1. функция стартует долгую i/o операцию; 2. подписывает новую функцию на событие завершения операции; 3. завершает свою работу и отпускает управление.
  • 23. VanillaJS – “асинхронщина” Удобно, когда цепочка таких функций имеет общую область видимости. Эту проблему решают замыкания и инструменты передачи контекста.
  • 24. VanillaJS => jQuery <script src="myscripts.js"></script> Ajax + DOM манипуляции (виджеты, анимашки).
  • 25. jQuery => Backbone + Underscore Шаблоны, Вьюшки, Модельки, Коллекции, Хэш-роутинг, Шины событий, Манипуляции данными
  • 26. Backbone => Marionette MVC фреймворк поверх Backbone. Вместо Underscore часто берут Lo-Dash.
  • 27. Marionette => Marionette + Bower Наступает в тот момент, когда уже лень следить за версиями jQuery-*, backbone-* и bootstrap. Bower – пакетный менеджер, который закачает нужные библиотеки в корень проекта и согласует их по версиям. Кроме того, Bower – это первый проблеск внебраузерного JS: понадобится установка nodejs и npm.
  • 28. Marionette => Marionette + Bower + RequireJS Библиотек стало ещё больше – теперь необходимо менеджить их загрузку в браузер. VanillaJS, в нынешнем виде, не умеет модульность исполняемого кода, поэтому на помощь приходит RequireJS. RequireJS – это js-утилита, которая загрузит фрагмент исполняемого кода только тогда, когда тот понадобится другому исполняемому коду.
  • 29. Marionette > Marionette + Bower + RequireJS Фрагменты исполняемого кода будут изолированы друг от друга через замыкания, загружаются в рантайме, асинхронно и по требованию. Такие фрагменты должны соответствовать AMD (Asynchronous Module Definition). Практически всё, что можно найти на bower.io – можно подгружать как AMD.
  • 30. Marionette > Marionette + Bower + RequireJS Ещё есть r.js. Утилита, которая по RequireJS конфигу собирает все модули в один минифицированный исполняемый файл. Теперь весь код отправится на девайс в один запрос. Всё это – Классика.
  • 31. Backend: node/io + npm + CommonJS Альтернативная js реальность, в которой исполняемый код подключается синхронно и выполняется на бекенде. Как в php/python/ruby. Модули npm поставляются в формате CommonJS, предназначены для выполнения в NodeJs, и несовместимы с AMD. Ребята захотели npm модули в браузере. Так родился Browserify.
  • 32. Marionette => Marionette + npm + Browserify В реализации отказываются от асинхронной загрузки исполняемого кода. Исходник выглядит чище и приятней. Такой код нельзя запустить в браузере "как есть", поэтому Browserify парсит исходники и собирает их в пригодный для браузера файл. Подход популярен – в npm есть почти всё то, что есть в bower. Разаботчики поставляют свой софт как в виде AMD, так и в виде CommonJS модулей.
  • 33. Marionette => Marionette + npm + Browserify Побочная плюшка – теперь ваш код сможет отрендерить DOM как на бекенде внутри NodeJS, так и в браузере. Это назвали "Изоморфный Web" и слепили под это специально заточенный фреймворк – Meteor.
  • 34. Marionette + npm + Browserify + Grunt Grunt – таск ранер. Это утилита, которая автоматизирует вам рутинные операции. Например: следить за изменениями в исходниках, автоматически собирать новый бандл и перезагрузить страничку браузера. Вместо Grunt сегодня отказываются в пользу проворного Gulp. А ещё есть Broccoli.
  • 35. Marionette + bower + npm + Browserify + Gulp Некоторые не около-js-ные вещи, например разные css плюшки, реже попадают в npm. Поэтому часто пакеты тащат одновременно и из bower и из npm. Склеивают это всё через написание правил Gulp.
  • 36. Boilerplate: Marionette + bower + npm + Browserify + Gulp У каждого уважающего себя фронденд-разработчика свой "коронный" набор утилит и способов их склейки. Фронтендщики обязательно публикуют их на своём гитхабе с приставкой "boilerplate". Сотни их – разных boilerplate с "коронным" набором утилит и "коронным" workflow.
  • 37. Yeoman: Marionette + bower + npm + Browserify + Gulp Часто boilerplate заточены под конкретные версии софта, поэтому они стремительно плодятся и стремительно устаревают. Апофеоз – заплить свой генератор для http://yeoman.io/ Это специальный пакетный менеджер для скафолдинга приложений.
  • 38. Marionette + bower + npm + Gulp + КоронныйЗоопаркУтилит + AMD + CommonJS + Webpack!!11 Webpack написали чтобы упаковать любой фронтенд зоопарк. Позволяют упаковать в один бандл как AMD, так и CommonJS, код с GitHub, стили, шаблоны, графику и вашу собаку. Написаны плагины для подгрузки и упаковки CSS, LESS, SASS, Stylus, CoffeeScript, JSX, JSON и всего на свете.
  • 39. Всё это было модно полгода назад.
  • 41. ES6 Harmony & ES6 Modules Пару недель назад была принята новая спецификая JS (ES6) с нативной поддержкой модулей в новом формате! Множественные улучшения языка JS: модули классы генераторы функции-стрелки и многое другое
  • 42. ES6 Harmony & ES6 Modules Хотите писать на ES6? Ждёте появленя поддержки ES6 в браузерах?
  • 43. ES6 Harmony & ES6 Modules Зря. Люди уже давно пишут на ES7. В ES7 ещё больше плюшек. Ожидается, что он будет принят в следующем 2016м году.
  • 44. ES6/ES7 Фронтенд на несуществующем языке это норма. Настолько сильно перегрет современный фронтенд.
  • 45. ES6/ES7 Ребята на JavaScript запилили себе JavaScript-компилятор, который компиллирует ES6/ES7 в VanillaJS ES5.
  • 46. ES6/ES7 Но один компилятор – это мало. Поэтому запилили сразу два: Traceur и Babel. Поддерживаемые фичи здесь: http://kangax.github.io/compat-table/es7/
  • 47. ES6/ES7 Итак, теперь на повестке дня AMD + CommonJS + ES6 Modules.
  • 48. ES6/ES7 + SystemJS SystemJS – универсальный загрузчик модулей AMD/CommonJS/ES6 с синтаксисом ES6+. Ваши ES6/7 исходники загрузятся в браузер как есть и скомпилируются на лету. Если хочется – можно собрать всё в один предкомпиленный и минифицированный бандл. import $ from 'jquery'; // загрузит вам jQuery import MainAppES6 from 'apps/mainAppES6'; // загрузит ваш ES6+ файл и скомпилирует его на лету
  • 49. ES6/ES7 + SystemJS + jspm Jspm это менеджер пакетов, специально разработанный для SystemJS jspm умеет тащить зависимости c github, npm и bower. Весь зоопарк теперь аккуратно лежит в jspm_packages.
  • 50. Документация по JS: http://dmitrysoshnikov.com/ecmascript/ru-chapter-1-execution-contexts/ Обзор новых возможностей ES6: https://github.com/lukehoban/es6features Старт с es6 и jspm за 10 минут (видео): http://glenmaddern.com/articles/javascript-in-2015