Suche senden
Hochladen
Happydev presentation angular
•
2 gefällt mir
•
694 views
Антон Плешивцев
Folgen
angular architecture
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 39
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
CodeFest dirty facts about AngularJS
CodeFest dirty facts about AngularJS
Антон Плешивцев
Савицкая
Савицкая
FinancialStudio
E travel13
E travel13
Media Gorod
WireCRM - Онлайн система учета клиентов
WireCRM - Онлайн система учета клиентов
wirecrm
Frontend for the win
Frontend for the win
Антон Плешивцев
Roman Vilyavin XII
Roman Vilyavin XII
SEMonline .Ru
Агентство недвижимости
Агентство недвижимости
Геннадий Метёлкин
marcketing221
marcketing221
Nikolay Korsakov
Empfohlen
CodeFest dirty facts about AngularJS
CodeFest dirty facts about AngularJS
Антон Плешивцев
Савицкая
Савицкая
FinancialStudio
E travel13
E travel13
Media Gorod
WireCRM - Онлайн система учета клиентов
WireCRM - Онлайн система учета клиентов
wirecrm
Frontend for the win
Frontend for the win
Антон Плешивцев
Roman Vilyavin XII
Roman Vilyavin XII
SEMonline .Ru
Агентство недвижимости
Агентство недвижимости
Геннадий Метёлкин
marcketing221
marcketing221
Nikolay Korsakov
event-Marketing
event-Marketing
Nikolay Korsakov
Seo Tools
Seo Tools
Darya Karelina
NaZapad 6 - Владислав Моргун - Семантическое ядро для 24 языков и 36 стран
NaZapad 6 - Владислав Моргун - Семантическое ядро для 24 языков и 36 стран
Vladislav Morgun
Управление сетками сайтов
Управление сетками сайтов
Playtini
Управление сетками сайтов
Управление сетками сайтов
Евгений Летов
Партнерская программа по авиабилетам
Партнерская программа по авиабилетам
Станислав Трубников
Cергей Aверин, Badoo
Cергей Aверин, Badoo
Ontico
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
Sergey Xek
Олександр Федотов. Як аналізувати конкурентів за допомогою digital-інструмент...
Олександр Федотов. Як аналізувати конкурентів за допомогою digital-інструмент...
UAMASTER Digital Agency
Все что нужно знать о SEO
Все что нужно знать о SEO
Dimaslennikov
Мониторинг "поискового здоровья" интернет-бизнеса
Мониторинг "поискового здоровья" интернет-бизнеса
Webit
Мониторинг поискового здоровья бизнеса
Мониторинг поискового здоровья бизнеса
Стас Поломарь
SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1
seo-intellect
Об автоматическом тестировании бэкенда в Media markt
Об автоматическом тестировании бэкенда в Media markt
Igor Lyubin
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QAFest
поиск в интернете
поиск в интернете
Yaroslav Azhnyuk
Search
Search
Yaroslav Azhnyuk
Практика SEO: Продвижение туристических сайтов
Практика SEO: Продвижение туристических сайтов
Evgeny Kostin
Оффлайн конверсии: Секреты работы и применения полученных знаний на практике
Оффлайн конверсии: Секреты работы и применения полученных знаний на практике
Cybermarketing, Moscow
SEO Продвижение - по принципу Парето
SEO Продвижение - по принципу Парето
Сергей Погодаев
1k speedup
1k speedup
Антон Плешивцев
Es6 good parts
Es6 good parts
Антон Плешивцев
Weitere ähnliche Inhalte
Ähnlich wie Happydev presentation angular
event-Marketing
event-Marketing
Nikolay Korsakov
Seo Tools
Seo Tools
Darya Karelina
NaZapad 6 - Владислав Моргун - Семантическое ядро для 24 языков и 36 стран
NaZapad 6 - Владислав Моргун - Семантическое ядро для 24 языков и 36 стран
Vladislav Morgun
Управление сетками сайтов
Управление сетками сайтов
Playtini
Управление сетками сайтов
Управление сетками сайтов
Евгений Летов
Партнерская программа по авиабилетам
Партнерская программа по авиабилетам
Станислав Трубников
Cергей Aверин, Badoo
Cергей Aверин, Badoo
Ontico
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
Sergey Xek
Олександр Федотов. Як аналізувати конкурентів за допомогою digital-інструмент...
Олександр Федотов. Як аналізувати конкурентів за допомогою digital-інструмент...
UAMASTER Digital Agency
Все что нужно знать о SEO
Все что нужно знать о SEO
Dimaslennikov
Мониторинг "поискового здоровья" интернет-бизнеса
Мониторинг "поискового здоровья" интернет-бизнеса
Webit
Мониторинг поискового здоровья бизнеса
Мониторинг поискового здоровья бизнеса
Стас Поломарь
SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1
seo-intellect
Об автоматическом тестировании бэкенда в Media markt
Об автоматическом тестировании бэкенда в Media markt
Igor Lyubin
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QAFest
поиск в интернете
поиск в интернете
Yaroslav Azhnyuk
Search
Search
Yaroslav Azhnyuk
Практика SEO: Продвижение туристических сайтов
Практика SEO: Продвижение туристических сайтов
Evgeny Kostin
Оффлайн конверсии: Секреты работы и применения полученных знаний на практике
Оффлайн конверсии: Секреты работы и применения полученных знаний на практике
Cybermarketing, Moscow
SEO Продвижение - по принципу Парето
SEO Продвижение - по принципу Парето
Сергей Погодаев
Ähnlich wie Happydev presentation angular
(20)
event-Marketing
event-Marketing
Seo Tools
Seo Tools
NaZapad 6 - Владислав Моргун - Семантическое ядро для 24 языков и 36 стран
NaZapad 6 - Владислав Моргун - Семантическое ядро для 24 языков и 36 стран
Управление сетками сайтов
Управление сетками сайтов
Управление сетками сайтов
Управление сетками сайтов
Партнерская программа по авиабилетам
Партнерская программа по авиабилетам
Cергей Aверин, Badoo
Cергей Aверин, Badoo
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
Олександр Федотов. Як аналізувати конкурентів за допомогою digital-інструмент...
Олександр Федотов. Як аналізувати конкурентів за допомогою digital-інструмент...
Все что нужно знать о SEO
Все что нужно знать о SEO
Мониторинг "поискового здоровья" интернет-бизнеса
Мониторинг "поискового здоровья" интернет-бизнеса
Мониторинг поискового здоровья бизнеса
Мониторинг поискового здоровья бизнеса
SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1
Об автоматическом тестировании бэкенда в Media markt
Об автоматическом тестировании бэкенда в Media markt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
поиск в интернете
поиск в интернете
Search
Search
Практика SEO: Продвижение туристических сайтов
Практика SEO: Продвижение туристических сайтов
Оффлайн конверсии: Секреты работы и применения полученных знаний на практике
Оффлайн конверсии: Секреты работы и применения полученных знаний на практике
SEO Продвижение - по принципу Парето
SEO Продвижение - по принципу Парето
Mehr von Антон Плешивцев
1k speedup
1k speedup
Антон Плешивцев
Es6 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)
Антон Плешивцев
Повышение конверсии через оптимизацию JS
Повышение конверсии через оптимизацию JS
Антон Плешивцев
как мы сделали поисковой движок
как мы сделали поисковой движок
Антон Плешивцев
Why fp
Why fp
Антон Плешивцев
Happydev presentation soa
Happydev presentation soa
Антон Плешивцев
интерфейсы3 ppt
интерфейсы3 ppt
Антон Плешивцев
Mehr von Антон Плешивцев
(8)
1k speedup
1k speedup
Es6 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)
Повышение конверсии через оптимизацию JS
Повышение конверсии через оптимизацию JS
как мы сделали поисковой движок
как мы сделали поисковой движок
Why fp
Why fp
Happydev presentation soa
Happydev presentation soa
интерфейсы3 ppt
интерфейсы3 ppt
Happydev presentation angular
1.
Лучшая client-side архитектура Антон Плешивцев twitter.com/allaud github.com/allaud aviasales.ru
2.
Что мы разрабатываем?
3.
Frontend-приложение • • • • Поисковая форма Поисковая выдача
(1000+ билетов) Фильтры (15 и более критериев) Календарь цен (цены на год)
4.
Frontend-приложение
5.
Legacy • Внутренний framework • 10
000 строк кода • Виджет ориентированная архитектура
6.
Проблемы старого подхода • • • • • Много
собственного кода Велосипеды Изобрели AMD Отсутствие тестов Высокий порог вхождения
7.
«Жидкое приложение» Поисковая форма
8.
«Жидкое приложение» Выдача Поиск Поисковая форма
9.
«Жидкое приложение» Состояние Фильтры Выдача Поиск Фильтры Поисковая форма
10.
«Жидкое приложение» Состояние Фильтры Выдача Фидбек Поиск Билеты Поисковая форма Агенства История
11.
«Жидкое приложение» Состояние Фильтры Выдача Фидбек Поиск Календарь Билеты Поисковая форма Агенства История
12.
«Жидкое приложение» Состояние Фильтры Выдача Фидбек Поиск Календарь Билеты Поисковая форма Агенства История
13.
Использовать jQuery-плагины? JQuery jQueryUIJformer
Hyjack SelectjQuery Sparkline sasmSelect jQuery PluginjQuery Plugin BoilerplatejQuery Floater PluginjQuery Queue plugin Apprise Jquery-toast message-plugin Websanova Color Picker safeSubmit Plugin JratingjQuery Opineo PluginFollow & Tweet WidgetjQuery Corner Gallery InputNotes GmapPicNet Table FilterJquery UI datepickerActivity IndicatorTitle AlertFix Scrollbar HeightBetter Check Boxes with jQuery and CSSBetterTooltip
14.
Frontend frameworks • • • • • Google Closure
library Backbone.js AngularJS EmberJS …
15.
First try • • • • Backbone RequireJS HandleBars Jasmine
16.
Выводы • • • • Стало лучше Порог вхождения
понизился AMD-модули полезны Функций недостаточно
17.
Next try • AngularJS •
Удобные тесты • Почти нет кастомных решений • Очень высокая скорость разработки
18.
Приложение aviasales. Как декомпозировать? •
Разбить на виджеты • Разбить на модели • Разбить на отдельные приложения
19.
Frontend-приложение
20.
Как спроектировать? Поисковая форма Выдача Фильтры
21.
Как спроектировать? Форма История поисков Календарь Цена Отели Время Билеты Авиакомпании
22.
Как организовать общение
между частями приложения? Календарь Цена Отели Время Билеты ? Авиакомпании
23.
Как организовать общение
между частями приложения? Календарь Цена Отели Время Билеты SERVICE Авиакомпании
24.
Как организовать общение
между частями приложения? «Выдача с фильтрами» Календарь Цена Отели Время Билеты Авиакомпании
25.
Как организовать модули? Отели Календарь Время Цена Билеты
26.
Как организовать модули? Календарь Отели Билеты Dependency Injection Цена Время
27.
Как собрать воедино? Ядро Ядро Форма История поисков Календарь Цена Отели Время Билеты Авиаком Форма
Поиска Выдача
28.
Как собрать воедино? Ядро Выдача Форма
Поиска Форма История поисков Билеты Фильтры Цена Запись Календарь Отели Список билетов Время …
29.
ng-controller directive CoreController SearchResultsController SearchFormController Form History Results Filters Price Record Calendar Hotels Tickets Time …
30.
Взаимодействие контроллеров SearchResultsController { tickets: [] sort:
function(){…} } Tickets { sorting: ‘price’ tickets: [] sort: function(){…} } { filters: {} tickets: [] } { Results reset: function(){…} filters: {} Filters } Price { visible: [1000, 10 000] reset: function(){} filters: {} }
31.
Много небольших работающих приложений
32.
Приложение «Список билетов» TicketsController TicketFactory BaseTicket FiltrableTicket RoundTripTicket OnewayTicket TourTicket
33.
Шаблоны (было) NANO("templates.searches.tickets.widgets.proposals", function(NANO){ return
NANO.templates('<%= j render 'nano_ui_templates/searches/tickets/widgets/proposals' %>', { "@data-ticket-id": "ticket.id", "@data-source": "source", ".ticket_proposal": { "gate<-proposals": { ".gate_name": "gate.name", ".gate_select_button a@href": "gate.url", ".gate_select_button a@data-gate": "gate.id", ".gate_price": "gate.price", ".gate_payment_methods .payment_method": { "method<-gate.payment_methods": { "@class+": " #{method}" } } } } }); });
34.
Шаблоны (стало) %li.proposal-carousel{'ng-repeat' =>
'proposal in ticket.proposals_for_carousel()'} %a.agency_offer{'ng-click' => 'buy_ticket(ticket, proposal)'} %span {{ proposal.name() | cut:15 }} %span.price %span {{ proposal.price() | current_price:search.currency }}
35.
Unobtrusive javascript layout.find(".yes").bind("click", function(){ self.toggle(layout,
"yes"); }); layout.find(".no").bind("click", function(){ self.toggle(layout, "no"); }); layout.find("#new_feedback").submit(function(){ return self._submit(); });
36.
Angular way <form class="feedback"
ng-submit="submit()"> <div class="yes" ng-click='success(true)'>Да</div> <div class="no" ng-click='success(false)'>Нет</div> ... </form>
37.
Итоги • Теперь делать
фиксы и фичи могут все • Ускорили разработку в разы • Части приложения используются в других проектах • Ядро поддерживает сообщество
38.
About Антон Плешивцев ! twitter.com/allaud github.com/allaud https://www.facebook.com/ant.pl.3 ! aviasales.ru
Jetzt herunterladen