SlideShare a Scribd company logo
1 of 43
Download to read offline
ГРЯЗНЫЕ ПОДРОБНОСТИ ЖИЗНИ С
ANGULARJS
Антон Плешивцев
aviasales.ru
МЕТАПОИСК
ПРИЛОЖЕНИЕ
ПРИЛОЖЕНИЕ
• единый codestyle
• одинаковый функционал
RAW JS
• 20k SLOC
• 10+ custom components
• custom AMD
• 72 h/f
BACKBONE
• 15k SLOC
• weak modules
• 60 h/f
ANGULAR JS
• 5k SLOC
• DI
• 4 h/f
EMBER JS
• beta
ANGULAR JS
ANGULAR JS
ANGULAR JS
ANGULAR JS
FIRST BUGS спустя какое-то время мы с удивлением
обнаружили, что ангуляр неидеален
FIRST BUGS
SECOND BUGS
ИНТЕГРАЦИЯ
INTEGRATION
<script>
(function(){
//…
}());
</script>
INTEGRATION
angular.element(document).ready(function() {
angular.bootstrap(document, ['myApp']);
});
ПЕРЕНОСИМОСТЬ
MODULE SYSTEM
angular.module('myApp', [])
.controller('MyController', ['$scope', function ($scope) {
$scope.greetMe = 'World';
}]);
ГИБКОСТЬ
$COOKIESTORE
NGROUTE
$routeProvider
.when('/searches/new',
templateUrl: 'empty.html'
controller: 'EmptyController'
)
.when('/',
templateUrl: 'empty.html'
controller: 'EmptyController'
)
.when('/:encoded_search',
templateUrl: 'search_results.html'
controller: 'SearchResultsController'
reloadOnSearch: false
)
NGROUTE
SOLUTION
• использовать форк
• патчи в исходном коде
• постоянный мониторинг обновлений
DATA-BINDING
DATA-BINDING
DATA-BINDING
DATA-BINDING
MOAR!!! DATA-BINDING
NG-REPEAT
<div ng-repeat="(key, value) in myObj"> ... </div>
рекурсивно создает watchers на весь
список в глубину

наш список - 5 тысяч билетов по 200
значений на билет.
NG-REPEAT
• 5000 билетов
• 200 значений на билет
• 1 000 000 (миллион) watchers
QUICK-NG-REPEAT
TOTHE RESCUE
<div quick-ng-repeat=«(key, value) in myObj"> ... </div>
QUICK-NG-REPEAT
• $watchCollection -> $watch
• $digest hack
• handmade updates
КУДА НАМ ПЛЫТЬ
ANGULAR JS
• внутренние интерфейсы (аналитика, админки)
• B2B
• прототипы
WTF?
REACT JS
• stateful-приложение
• сложный DOM
• критичные к производительности приложения
CLOJURESCRIPT
• сверхкритичные к скорости приложения
• некритичные к размеру
• команда выше среднего
HANDMADE
• размер приложения критичен
• нужны низкоуровневые оптимизации
• команда выше среднего
Handmade
(размер)
AngularJS
(скорость разработки)
Clojurescript
(производительность)
?
ВЫВОДЫ
• Стоит изначально понимать требования к
проекту
• AngularJS применим, но с набором ограничений
• Иногда лучше попробовать что-то другое
ABOUT
АНТОН ПЛЕШИВЦЕВ
twitter.com/allaud
github.com/allaud
https://www.facebook.com/ant.pl.3
aviasales.ru

More Related Content

What's hot

Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейKonstantin Komelin
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)Fedor Malyshkin
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)DrupalYug
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Я ♥ Svg — Владимир Кузнецов, Engine6
Я ♥ Svg — Владимир Кузнецов, Engine6Я ♥ Svg — Владимир Кузнецов, Engine6
Я ♥ Svg — Владимир Кузнецов, Engine6Yandex
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and AngularSQALab
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRAMBLER&Co
 
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12HappyDev
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSГлеб Тарасов
 
MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?Kseniya Redunova
 

What's hot (20)

Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
knockout.js
knockout.jsknockout.js
knockout.js
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Я ♥ Svg — Владимир Кузнецов, Engine6
Я ♥ Svg — Владимир Кузнецов, Engine6Я ♥ Svg — Владимир Кузнецов, Engine6
Я ♥ Svg — Владимир Кузнецов, Engine6
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOS
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 
AngularJS
AngularJSAngularJS
AngularJS
 
MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?
 

Similar to CodeFest dirty facts about AngularJS

Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиGonchik Tsymzhitov
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Javascript! That's sick! Modules, AMD, Require.js
Javascript! That's sick! Modules, AMD, Require.jsJavascript! That's sick! Modules, AMD, Require.js
Javascript! That's sick! Modules, AMD, Require.jsStanislav Chistenko
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus0leGG
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»DevDay
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
Процесс изменения платформы Java
Процесс изменения платформы JavaПроцесс изменения платформы Java
Процесс изменения платформы JavaAlexey Fyodorov
 
The Great Migration by Baruch Sadogursky
The Great Migration by Baruch SadogurskyThe Great Migration by Baruch Sadogursky
The Great Migration by Baruch SadogurskyJavaDayUA
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»e-Legion
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011CodeCamp
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 

Similar to CodeFest dirty facts about AngularJS (20)

Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Javascript! That's sick! Modules, AMD, Require.js
Javascript! That's sick! Modules, AMD, Require.jsJavascript! That's sick! Modules, AMD, Require.js
Javascript! That's sick! Modules, AMD, Require.js
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Angular js
Angular jsAngular js
Angular js
 
Процесс изменения платформы Java
Процесс изменения платформы JavaПроцесс изменения платформы Java
Процесс изменения платформы Java
 
The Great Migration by Baruch Sadogursky
The Great Migration by Baruch SadogurskyThe Great Migration by Baruch Sadogursky
The Great Migration by Baruch Sadogursky
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 

More from Антон Плешивцев (10)

1k speedup
1k speedup1k speedup
1k speedup
 
Es6 good parts
Es6 good partsEs6 good parts
Es6 good parts
 
How to create modern web application (about Virool mobile player)
How to create modern web application (about Virool mobile player)How to create modern web application (about Virool mobile player)
How to create modern web application (about Virool mobile player)
 
Повышение конверсии через оптимизацию JS
Повышение конверсии через оптимизацию JSПовышение конверсии через оптимизацию JS
Повышение конверсии через оптимизацию JS
 
Frontend for the win
Frontend for the winFrontend for the win
Frontend for the win
 
как мы сделали поисковой движок
как мы сделали поисковой движоккак мы сделали поисковой движок
как мы сделали поисковой движок
 
Why fp
Why fpWhy fp
Why fp
 
Happydev presentation soa
Happydev presentation soaHappydev presentation soa
Happydev presentation soa
 
Happydev presentation angular
Happydev presentation angularHappydev presentation angular
Happydev presentation angular
 
интерфейсы3 ppt
интерфейсы3 pptинтерфейсы3 ppt
интерфейсы3 ppt
 

CodeFest dirty facts about AngularJS