Top Banner
ГРЯЗНЫЕ ПОДРОБНОСТИ ЖИЗНИ С ANGULARJS Антон Плешивцев aviasales.ru
43
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CodeFest dirty facts about AngularJS

ГРЯЗНЫЕ ПОДРОБНОСТИ ЖИЗНИ С ANGULARJSАнтон Плешивцев

aviasales.ru

Page 2: CodeFest dirty facts about AngularJS

МЕТАПОИСК

Page 3: CodeFest dirty facts about AngularJS

ПРИЛОЖЕНИЕ

Page 4: CodeFest dirty facts about AngularJS

ПРИЛОЖЕНИЕ• единый codestyle

• одинаковый функционал

Page 5: CodeFest dirty facts about AngularJS

RAW JS• 20k SLOC

• 10+ custom components

• custom AMD

• 72 h/f

Page 6: CodeFest dirty facts about AngularJS

BACKBONE• 15k SLOC

• weak modules

• 60 h/f

Page 7: CodeFest dirty facts about AngularJS

ANGULAR JS• 5k SLOC

• DI

• 4 h/f

Page 8: CodeFest dirty facts about AngularJS

EMBER JS• beta

Page 9: CodeFest dirty facts about AngularJS

ANGULAR JS

Page 10: CodeFest dirty facts about AngularJS

ANGULAR JS

Page 11: CodeFest dirty facts about AngularJS

ANGULAR JS

Page 12: CodeFest dirty facts about AngularJS

ANGULAR JS

Page 13: CodeFest dirty facts about AngularJS

FIRST BUGS спустя какое-то время мы с удивлением обнаружили, что ангуляр неидеален

Page 14: CodeFest dirty facts about AngularJS

FIRST BUGS

Page 15: CodeFest dirty facts about AngularJS

SECOND BUGS

Page 16: CodeFest dirty facts about AngularJS

ИНТЕГРАЦИЯ

Page 17: CodeFest dirty facts about AngularJS

INTEGRATION

<script> (function(){ //… }());</script>

Page 18: CodeFest dirty facts about AngularJS

INTEGRATION

angular.element(document).ready(function() { angular.bootstrap(document, ['myApp']); });

Page 19: CodeFest dirty facts about AngularJS

ПЕРЕНОСИМОСТЬ

Page 20: CodeFest dirty facts about AngularJS

MODULE SYSTEM

angular.module('myApp', []) .controller('MyController', ['$scope', function ($scope) { $scope.greetMe = 'World'; }]);

Page 21: CodeFest dirty facts about AngularJS

ГИБКОСТЬ

Page 22: CodeFest dirty facts about AngularJS

$COOKIESTORE

Page 23: CodeFest dirty facts about AngularJS

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 )

Page 24: CodeFest dirty facts about AngularJS

NGROUTE

Page 25: CodeFest dirty facts about AngularJS

SOLUTION• использовать форк

• патчи в исходном коде

• постоянный мониторинг обновлений

Page 26: CodeFest dirty facts about AngularJS

DATA-BINDING

Page 27: CodeFest dirty facts about AngularJS

DATA-BINDING

Page 28: CodeFest dirty facts about AngularJS

DATA-BINDING

Page 29: CodeFest dirty facts about AngularJS

DATA-BINDING

Page 30: CodeFest dirty facts about AngularJS

MOAR!!! DATA-BINDING

Page 31: CodeFest dirty facts about AngularJS

NG-REPEAT

<div ng-repeat="(key, value) in myObj"> ... </div>

рекурсивно создает watchers на весь список в глубинунаш список - 5 тысяч билетов по 200 значений на билет.

Page 32: CodeFest dirty facts about AngularJS

NG-REPEAT• 5000 билетов

• 200 значений на билет

• 1 000 000 (миллион) watchers

Page 33: CodeFest dirty facts about AngularJS

QUICK-NG-REPEAT TO THE RESCUE

<div quick-ng-repeat=«(key, value) in myObj"> ... </div>

Page 34: CodeFest dirty facts about AngularJS

QUICK-NG-REPEAT• $watchCollection -> $watch

• $digest hack

• handmade updates

Page 35: CodeFest dirty facts about AngularJS

КУДА НАМ ПЛЫТЬ

Page 36: CodeFest dirty facts about AngularJS

ANGULAR JS

• внутренние интерфейсы (аналитика, админки)

• B2B

• прототипы

Page 37: CodeFest dirty facts about AngularJS

WTF?

Page 38: CodeFest dirty facts about AngularJS

REACT JS

• stateful-приложение

• сложный DOM

• критичные к производительности приложения

Page 39: CodeFest dirty facts about AngularJS

CLOJURESCRIPT

• сверхкритичные к скорости приложения

• некритичные к размеру

• команда выше среднего

Page 40: CodeFest dirty facts about AngularJS

HANDMADE

• размер приложения критичен

• нужны низкоуровневые оптимизации

• команда выше среднего

Page 41: CodeFest dirty facts about AngularJS

Handmade (размер)

AngularJS (скорость разработки)

Clojurescript (производительность)

?

Page 42: CodeFest dirty facts about AngularJS

ВЫВОДЫ

• Стоит изначально понимать требования к проекту

• AngularJS применим, но с набором ограничений

• Иногда лучше попробовать что-то другое

Page 43: CodeFest dirty facts about AngularJS

ABOUT

АНТОН ПЛЕШИВЦЕВtwitter.com/allaud github.com/allaud

https://www.facebook.com/ant.pl.3

aviasales.ru