Proč se vyhnout Angularu

Před nějakou dobou jsem dostal do schránky mail zhruba tohoto znění: „Dobrý den, používáme Angular, máme v něm rozepsanou aplikaci, ale máme problémy s výkonem, a programátoři si stěžují, že se jim struktura aplikace zkomplikovala. Implementace nových funkcí trvá déle, než bychom očekávali. Našel byste si chvilku? Třeba děláme něco špatně.“

Autor článku pořádá školení, která si můžete objednat na Javascript-skoleni.cz.

Nebyl to první mail tohoto typu. Abyste rozuměli, posledních pět let se živím tím, že pomáhám firmám i jednotlivcům s jejich webovými projekty. Jak psát testy, jak ladit výkon, jak navrhnout architekturu a mnohé další. Jelikož se mi nechtělo zas a znova všechno sepisovat zvlášť, publikoval jsem stručný článek What’s wrong with Angular.js. Odezva byla nečekaná, k dnešnímu dni skoro 60 tisíc shlédnutí. Článek je citován, naposledy na legendárním webu Quirksmode „The Angular criticism that resonates most with me comes from the What’s wrong with Angular.js article by Daniel Steigerwald“ – The problem with Angular.

Dva dny jsem strávil s firmou nad jejím projektem. Ti z vás co znají Angular, asi tuší. Angular nijak nenaznačuje, jak v aplikaci implementovat business model. Ne, scope není business model. Programátoři, kterých na projektu pracovalo několik, zamořili celý zdrojový kód watch(), $digest() and $apply() metodami. Všechno poslouchalo všechno a nikdo si nebyl jist, odkud změny přicházejí. Celá aplikace se zle debugovala. Další problém byly direktivy, všechny je psala externí firma. Záměr byl asi takový: nakoupit hotové komponenty a nechat je vlastní programátory využívat.

Výsledkem bylo, že programátoři nemohli pružně reagovat na změny zadání a komponenty začali hackovat. Je třeba říct, že nešlo o nijak složitou aplikaci. Možná vás překvapí, že jsem nenavrhoval kompletní přepis. Aplikace byla již v produkci, na přepsání tak nebyl čas ani prostředky. A především, programátoři nejdříve museli pochopit v čem je problém, a že webové aplikace se dají psát jinak a lépe.

Tento článek však není case study, takže jen stručně. Jako první bylo třeba postupně aplikaci dodat business model, a to skrze Facebook Flux. Tento pattern není vázán na konkrétní implementaci, lze jej použít i s Angularem. Hezký článek jak na to je How can React and Flux help us create better Angular applications?

Co je tedy tak špatného na Angularu, že doporučuji se mu vyhnout?

Skoro všechno. Opravdu. Ačkoliv ne vše. Modularizace kódu a dependency injection, které Angular nabízí, jsou skvělé praktiky a držte se jich. Také důraz na testovatelnost kódu. Autor Angularu Miško Hevery psal kdysi skvělý blog, který stojí za to si přečíst i dnes. Vřele doporučuji. Pokud však chcete detailně popis toho, co vše je špatného na Angularu, přečtěte si můj anglický článek. Nemá smysl, abych jej zde překládal. Pokud však nesouhlasíte, máte prostor k diskuzi v komentářích tady zde na zdrojáku, rád vše dovysvětlím. Než však napíšete rozhorčený komentář, vemte prosím na vědomí, že Angular 2 je hodně jiný. Proč asi?

Angular 2

V roce 2014 uvolnil Facebook React, později Flux. A způsobil tak revoluci. Možná krčíte rameny a říkáte si, proč by mě mělo zajímat, jak programují programátoři nějaké sociální sítě? Třeba proto, že Facebook je nyní největší open source firmou. Týmy Angularu a Emberu, dvou asi největších frameworků pro vývoj webových SPA aplikací, se mohutně od Reactu a Fluxu inspirují. Ember zavádí virtual dom a server side rendering, Angular zavádí one way data flow. To vše je v Reactu a Fluxu už od začátku elegentně vyřešené. Správným a čistým návrhem.

Dan a Igor

„I don’t always agree with him, but I love this guy.“ https://plus.google.com/+IgorMinar/posts/a3ePEKy3mm6

Měl jsem s Igorem, hlavním vývojářem Angularu, dlouhou debatu. Snažil jsem se mu vysvětlit, že Angular tím, že vsadil na HTML, vsadil špatně. Igorův hlavní argument byl, že kodeři potřebují především HTML. Možná, ale problém leží v tom, že v Angularu se píší aplikace, ne weby. Angular 2 bude velmi jiný, a jeho popis je super obsáhlý „My phone battery ran out while I was reading it“ https://twitter.com/swannodette/status/552150238455431168.

Autor článku týden po jeho napsání, team Angularu opustil. Mnohé bylo opraveno, tak snad třeba, při vhodném použití, čistě pro obohacené statické weby, poslouží Angular 2 dobře. Problém však je ten, že Angular 2 zatím neexistuje a dlouho existovat nebude, a investovat do Angularu 1 už nemá cenu.

Co s tím?

Pokud máte existující aplikaci v Angularu 1, dále ji udržujte, a v mezičase se zkuste poučit z How can React and Flux help us create better Angular applications? Pokud budete tápat, napište mi. Pokud chystáte aplikaci novou, kterou nebudete chtít za pár let komplet přepisovat, přečtěte si můj článek.

Záměrem toho článku opravdu není přeložit to, co už jsem napsal a bylo okomentováno jinde, ale vyvolat diskuzi. Pište do komentářů, ptejte se, ale prosím až poté, co prostudujete odkazy. Velmi rád vše vysvětlím.

Independent software gardener, libertarian, web applications consultant and trainer. Google Developer Expert since 2012.

Komentáře: 89

Přehled komentářů

Ivan Proc nepsat clanky
Ondra Kučera Two way databinding
steida Re: Two way databinding
Majo
steida Re:
anon
Robert Re:
steida Re:
anon Re:
Robert Re:
anon Re:
steida Re:
vaclav.sir Re:
daniel Re:
anon Re:
steida Re:
fis Re:
Mark1516 Re:
NoxArt Re:
Lamicz Re:
steida Re:
jita Re:
Mark1516 Re:
Mark1516 Re:
MilanLempera
steida Re:
steida Re:
MilanLempera Re:
steida Re:
steida Re:
steida Re:
MilanLempera Re:
Robert Dan je nejlepší
vaclav.sir Re: Dan je nejlepší
Majo
steida Re:
Radek Miček Re:
semorad God bless angular ;-)
Miroslav Král
Kolemjdouci Direktivy
semorad Re: Direktivy
Kolemjdouci Re: Direktivy
steida Re: Direktivy
Jan Kašpar Re: Direktivy
steida Re: Direktivy
Radim
steida Re:
Radim Re:
steida Re:
alesroubicek Re:
jiri.vrany Jsou to jen nástrojeq
steida Re: Jsou to jen nástrojeq
steida
jiri.vrany Re: Flux
steida Re: Flux
jiri.vrany Re: Flux
Yosef Polymer
Yosef Re: Polymer
steida Re: Polymer
steida Re: Polymer
Yosef Re: Polymer
Yosef Re: Polymer
Yosef Re: Polymer
steida Re: Polymer
Yosef Re: Polymer
snakeyyy Meteor
steida Re: Meteor
steida Jak vysvětlovat React
czberg kral je mrtev, at zije kral
petrjiricka Co říkáte na Aurelia?
steida
steida
steida
steida
semorad Learn once.
steida Skvělé demo
vskiper Re: Skvělé demo
steida Re: Skvělé demo
vidya this
steida
semorad Proč je Angularjs skvělý
steida Re: Proč je Angularjs skvělý
semorad Re: Proč je Angularjs skvělý
steida Re: Proč je Angularjs skvělý
bronek.krystalin
Richard Casar Angularu vdacime za vela
Fotr No
Michal Vávra
JosefJezek Polymer
Zdroj: https://www.zdrojak.cz/?p=14190