Angular in practice

Angular w praktyce: Jak pomaga budować interaktywne i wydajne aplikacje?

/ 19.12.2023 Angular

Rozwój nowoczesnych technologii napędza obecnie wzrost na interaktywne i wydajne aplikacje. Czy wiesz, że urządzenia IoT każdego dnia generują one 1 miliard GB danych? Przewiduje się, że do 2025 r. na całym świecie będą 42 miliardy urządzeń mobilnych podłączonych do IoT. Ta ogromna ilość danych wymaga wydajnych i interaktywnych aplikacji zbudowanych na solidnych frameworkach.   

W rezultacie deweloperzy i firmy nieustannie poszukują nowych sposobów tworzenia aplikacji, które są bardziej wydajne i zdolne do obsługi dużych ilości danych. Celem interaktywnych aplikacji jest angażowanie klientów, analizowanie ich zachowań i dostarczanie spersonalizowanych doświadczeń. Wydajne aplikacje są również potrzebne do obsługi dużych ilości danych, które firmy generują i wykorzystują każdego dnia.   

Angular, popularny framework front-endowy opracowany i utrzymywany przez Google, oferuje solidne narzędzia i funkcje pozwalające osiągnąć responsywność i dynamiczną wydajność. W 2023 roku Angular jest używany przez 359 980 stron internetowych. Obejmuje to 122 411 obecnie działających witryn i dodatkowe 584 211 domen, które przekierowują do witryn z tej listy. Ekosystem Angular składa się z różnorodnej grupy ponad 1,7 miliona programistów, autorów bibliotek i twórców treści.   

Statystyki te podkreślają popularność Angular’a w środowisku front-endowym. Należy zauważyć, że liczby te stale się zmieniają, ponieważ coraz więcej programistów wdraża Angular w swoich projektach.  

W tym artykule zagłębimy się w kluczowe koncepcje, strategie i najlepsze praktyki zapewniające responsywność i dynamiczną wydajność aplikacji zbudowanej na tym narzędziu. 

Wprowadzenie do Angular  

Angular to platforma programistyczna zbudowana na języku TypeScript. Zgodnie z definicją służy do tworzenia skalowalnych aplikacji internetowych i obejmuje framework oparty na komponentach, zbiór dobrze zintegrowanych bibliotek oraz zestaw narzędzi programistycznych. Jest używany w różnych aplikacjach, w tym w responsywnych aplikacjach internetowych, aplikacjach jednostronicowych (SPA) w czasie rzeczywistym, w przedsiębiorstwach i systemach zarządzania treścią (CMS). Jest wspierany przez dużą społeczność programistów, autorów bibliotek i twórców treści.  

Jak zbudować interaktywność w projekcie Angular?  

Angular daje nam kilka różnych narzędzi do budowania interaktywności w dynamicznych aplikacjach internetowych.  

1. Dwukierunkowe wiązanie danych 

Ten mechanizm umożliwia automatyczną synchronizację między modelem danych a widokiem, co pozwala na zmiany zorientowane na użytkownika w sposób reaktywny, tak aby wpływały one na model danych i odwrotnie. Ta dynamiczna interakcja zapewnia, że zmiany w danych bazowych są odzwierciedlane w interfejsie użytkownika w czasie rzeczywistym.  

To deklaratywne podejście upraszcza kod, zwiększa czytelność i zapewnia dynamiczne i responsywne wrażenia użytkownika.  

Kluczowe punkty dotyczące wiązania danych w Angular:  

 Możliwości wiązania danych w Angular znacząco przyczyniają się do jego wydajności, lepszej produktywności i umożliwiają tworzenie dynamicznych i responsywnych interfejsów użytkownika.  

  • Mechanizm wykrywania zmian w Angular zapewnia, że wszelkie zmiany w danych komponentów responsywnych powodują aktualizacje w widoku i odwrotnie.  
  •  Angular zachęca programistów do traktowania danych jako niezmiennych i tworzenia nowych odniesień po wystąpieniu zmian   
  • Angular płynnie obsługuje operacje asynchroniczne dzięki funkcjom takim jak async pipes i RxJS observables, pozwalając na dynamiczne aktualizacje w widoku, gdy dane zmieniają się w czasie.  
  • Oprócz standardowych elementów DOM, Angular obsługuje niestandardowe wiązanie zdarzeń, umożliwiając tworzenie niestandardowych zdarzeń w komponentach w celu komunikacji między komponentami nadrzędnymi i podrzędnymi.  

Porada od dewelopera: Wykorzystaj dwukierunkowe wiązanie danych do tworzenia interfejsów użytkownika, które natychmiast reagują na dane wprowadzane przez użytkownika. Skoncentruj zasoby na doświadczeniu użytkownika, minimalizując ilość standardowego kodu i promując bardziej intuicyjny proces programowania.  

2. Obsługa zdarzeń  

Obsługa zdarzeń jest kluczowym aspektem tworzenia interaktywnych i dynamicznych aplikacji Angular. Odnosi się do procesu reagowania i zarządzania interakcjami użytkownika w układzie aplikacji Angular. Zdarzenia mogą być wyzwalane przez działania użytkownika, takie jak kliknięcia, naciśnięcia klawiszy, przesyłanie formularzy lub zmiany stanu aplikacji. Po zbudowaniu komponentu możemy dodać sposób na jego animację, czyli przykład tego, jak komponent wygląda i jak powinien być wyświetlany. Daje nam to takie mechanizmy do dynamicznego tworzenia zawartości strony na podstawie modelu danych. Możemy również tworzyć całe komponenty w zależności od potrzeb.  

Kluczowe punkty dotyczące obsługi zdarzeń w Angular:  

Typy zdarzeń  

Angular obsługuje różne zdarzenia, w tym zdarzenia myszy (kliknięcie, najechanie kursorem), zdarzenia klawiatury, zdarzenia formularza (przesłanie, zmiana) i zdarzenia niestandardowe.  

  • Obiekt zdarzenia  

Wiązanie zdarzeń Angular może również przekazywać obiekt $event do funkcji i powiązanej metody. Obiekt ten zawiera informacje o zdarzeniu, takie jak współrzędne myszy lub kody klawiszy klawiatury.  

  • Propagowanie zdarzeń  

Zdarzenia w Angular propagują się domyślnie w górę lub w dół hierarchii DOM. Można użyć metody $event.stopPropagation(), aby zapobiec dalszej propagacji zdarzeń.  

  • Wiązanie z właściwościami komponentów  

Zdarzenia mogą być używane do aktualizacji właściwości komponentów. Na przykład kliknięcie przycisku może wywołać metodę, która zwiększa licznik lub przełącza wartość logiczną.  

  • Niestandardowe wiązanie zdarzeń  

Oprócz standardowych zdarzeń DOM, Angular obsługuje te niestandardowe. Komponenty mogą ustanawiać niestandardowe zdarzenia przy użyciu klasy EventEmitter, umożliwiając komunikację między elementami nadrzędnymi i podkomponentami.  

Porada od dewelopera: Wiązanie danych i obsługa zdarzeń są używane w każdym procesie bez wyjątku. Na przykład, wiązanie danych działa dobrze w aplikacjach, w których użytkownicy mogą wypełniać obszerne formularze. Dzięki temu można pracować nad takimi dynamicznymi rozwiązaniami formularzy i ułatwiać ich generowanie, w zależności od wymagań biznesowych klienta, szczególnie tam, gdzie zawartość musi się często zmieniać.  

3. Wydajne wykrywanie zmian  

Mechanizm wykrywania zmian w Angular został zaprojektowany z myślą o wydajności, dając pewność,  że aktualizacje stanu aplikacji powodują tylko niezbędne kalkulacje. Programiści powinni określić strategie takie jak OnPush, aby zoptymalizować wykrywanie zmian i zwiększyć wydajność aplikacji. Ta wydajność  jest najważniejsza dla tworzenia płynnych i responsywnych interfejsów, szczególnie w dużych i złożonych aplikacjach.  

Porada od dewelopera: Wykorzystaj strategie wykrywania zmian Angular, aby precyzyjnie dostroić wydajność swojej aplikacji. Regularnie monitoruj i profiluj swój kod, aby zidentyfikować możliwości optymalizacji.  

Problemy z wydajnością w Angular — na co zwrócić uwagę?  

Co możemy zrobić, aby aplikacje były bardziej wydajne?  

  • Zadbaj o zapewnienie odpowiedniej modułowości  

Architektura Angular oparta na komponentach promuje modułowość i możliwość ponownego użycia. Dzieląc aplikację na komponenty, programiści mogą skuteczniej zarządzać złożonością bazy kodu. Każdy komponent hermetyzuje swoją logikę, style i szablony, ułatwiając konserwację, testowanie i współpracę programistów.  

Zawsze dziel aplikacje na moduły reprezentujące logiczne części funkcjonalności tak, aby rozmiar modułów był niewielki, stosując zasadę SOLID (zestaw zasad projektowych używanych do tworzenia łatwych w utrzymaniu i skalowalnych aplikacji).  

Porada od dewelopera: Przyjmij architekturę opartą na komponentach, aby budować modułowe i skalowalne aplikacje. Zorganizuj swój kod w spójne komponenty, sprzyjając ponownemu wykorzystaniu kodu i ułatwiając zrozumienie i utrzymanie aplikacji. Podziel aplikację na moduły, które reprezentują pewne logiczne części funkcjonalności na stosunkowo małe rozmiary tych modułów, aby nie stały się zbyt duże.  

  • Zastosuj lazy loading 

Gdy mamy już odpowiednią modułowość w aplikacji, możemy zacząć korzystać z mechanizmu lazy loading. Oznacza to ładowanie tylko modułów wymaganych do bieżącego przepływu pracy użytkownika, skracając początkowy czas ładowania. Dzięki temu ładujemy tylko moduły aktualnie potrzebne przez już działającą aplikację, co pozwala nam przyspieszyć ładowanie strony.  

 Porada od dewelopera: Ważne jest również, aby pamiętać, że należy używać lazy loading dla obrazów, gdy operujemy ładowaniem plików graficznych. 

  • Wykorzystaj Angular CLI do usprawnienia rozwoju  

Angular CLI (Command Line Interface) to przyjazne dla deweloperów narzędzie, które usprawnia rozwój. Oferuje polecenia do generowania komponentów, usług, modułów i nie tylko, redukując standardową pracę i zapewniając spójną strukturę projektu. Przyspiesza to rozwój, ułatwiając programistom skupienie się na tworzeniu interaktywnych funkcji.  

Porada od dewelopera: Wykorzystaj Angular CLI, aby przyspieszyć przepływ pracy programistycznej. Wykorzystaj jego polecenia do tworzenia komponentów i usług, zapewniając spójny i wydajny rozwój oraz płynne wrażenia użytkownika.  

  •  Obsługa RxJS 

Angular wykorzystuje Reactive Extensions for JavaScript (RxJS) do wydajnej obsługi operacji asynchronicznych. Obserwowalne i reaktywne programowanie pozwalają programistom zarządzać strumieniami danych, umożliwiając tworzenie responsywnych i sterowanych zdarzeniami aplikacji. Jest to szczególnie korzystne w przypadku obsługi aktualizacji w czasie rzeczywistym i dynamicznych interakcji użytkownika.  

Porada od dewelopera: Wykorzystaj programowanie reaktywne z RxJS do płynnej obsługi zadań asynchronicznych. Wykorzystaj obserwowalne obiekty do zarządzania przepływem danych i tworzenia aplikacji, które dynamicznie reagują na działania użytkownika.  

  •   Utrzymuj przejrzystą strukturę katalogów, która jest zgodna z konwencjami  

Porada od dewelopera: Dobrym pomysłem jest utrzymywanie przejrzystej struktury katalogów i modułów oraz trzymanie się tych konwencji Angular, które utrzymują kod uporządkowany i łatwy w utrzymaniu. Jeśli ktoś inny z zespołu Angular Core będzie musiał zbudować coś w kodzie, łatwiej będzie mu znaleźć drogę, a wprowadzenie potencjalnych zmian zajmie znacznie mniej czasu i zasobów.  

  • Korzystaj z najnowszej wersji Angular tak szybko, jak to możliwe  

Porada od dewelopera: Często nowe wersje Angular wprowadzają ulepszenia wydajności, takie jak kompilator Ivy, który został zaprojektowany w celu rozwiązania głównych problemów Angular, tj. wydajności i dużych rozmiarów plików wprowadzonych w Angular 9. Dlatego korzystanie z najnowszej wersji Angular jest zawsze dobrym pomysłem.  

W jednym z projektów, nad którym pracujemy, używamy najnowszej wersji Angulara, a w innym używamy starszej, sprzed pięciu lat i mamy porównanie co do wydajności. Im wcześniej klient zdecyduje się przenieść projekt Angular do nowszej wersji, tym łatwiej, ponieważ każda nowa wersja Angular wprowadza więcej przełomowych zmian, a migracja do najnowszej wersji staje się coraz trudniejsza.  

  • Upewnij się, że używasz kompilacji Ahead-of-Time (AOT) w swoim projekcie  

Angular obsługuje zarówno kompilację Just-in-Time (JIT), jak i Ahead-of-Time (AOT). Kompilacja AOT tłumaczy kod aplikacji na wydajny JavaScript przed wdrożeniem, co skutkuje szybszym renderowaniem.   

Porada od dewelopera: Jeśli ktoś pracuje nad aplikacją Angular, warto by upewnił się, że ma automatycznie włączoną tę kompilację, ponieważ wtedy ładuje się ona znacznie szybciej, sam plik jest znacznie mniejszy, a w niektórych przypadkach niektóre biblioteki również działają znacznie szybciej.  

W jednym z projektów, nad którym pracują nasi programiści, nie korzystali oni z kompilacji AOT, gdy uruchamiali aplikację lokalnie. W wersji produkcyjnej dla klienta mamy bibliotekę do wyświetlania tabel, która, choć sama w sobie nie jest zbyt wydajna, to dzięki kompilacji AOT wszystko działa płynnie bez spowalniania aplikacji.  

Jakie narzędzia ułatwiają optymalizację wydajności?  

Deweloperzy najczęściej korzystają z narzędzi deweloperskich w przeglądarce, np. Lighthouse (zakładka wydajności w Google Chrome), która mierzy czas uruchamiania aplikacji i pokazuje, gdzie znajdują się wąskie gardła.  

W typowych aplikacjach webowych możliwe jest symulowanie zachowania usługi na urządzeniu mobilnym lub stacjonarnym. Możemy również ograniczyć prędkość transferu, aby zobaczyć wydajność aplikacji lub usługi w krajach o słabszym Internecie lub na wsi, jeśli istnieje tam jakakolwiek baza klientów.  

Kilka praktycznych porad od dewelopera Angular  

Dobrym pomysłem jest upewnienie się, że odpowiednio zaprojektowaliśmy strukturę naszych komponentów. W przeciwnym razie, jeśli zrobimy to przypadkowo, możemy zepsuć wydajność.  

Rzeczy, na które należy uważać, to nieostrożne korzystanie z metod obliczających określone wartości.  

Jeśli mamy bardzo złożone widoki, wyświetlanych jest wiele informacji, a następnie bardzo często używamy wiązania danych, aby dotrzeć do danych i coś obliczyć. Robienie tego za pomocą metody, która oblicza to za każdym razem, gdy wyświetlamy tę zawartość na stronie, może zepsuć naszą wydajność. Lepiej obliczyć to raz, wprowadzając konkretną zmienną odnoszącą się do pola.  

Po uruchomieniu strony aplikacja wielokrotnie sprawdza, czy coś się zmieniło, ponieważ mam kombinację AOT i mechanizmu wiązania danych. W modelu danych mapuje to, co dzieje się na stronie kilkanaście razy na sekundę. A jeśli za każdym razem nie odwołujemy się po prostu do przechowywanej wartości, tylko ją wyliczamy, to bardzo psuje to wydajność.  

Jest to szczególnie istotne, gdy wykonujemy obliczenia na dużej tablicy danych. Tam filtrujemy, szukamy jakichś danych, które mapujemy, przetwarzamy itd. i dopiero na tej podstawie budujemy jakieś dane. Im bardziej skomplikowane obliczenia w tych metodach, tym trudniej, więc trzeba podchodzić do tych mechanizmów ostrożnie, oceniając ich wpływ na wydajność aplikacji.  

Różne wzorce zmuszają nas do pisania aplikacji w taki sposób, aby łatwiej było nie zepsuć wydajności. Jednym z takich wzorców, który lubimy jest Smart and Dump Components — komponenty kontenerów i prezentacji. Tak więc ten szablon jest rodzajem wzorca, który naszym zdaniem zmusza nas do pisania w taki poprawny sposób.  

Podsumowanie  

Podsumowując, Angular jest świetnym narzędziem dla programistów, którzy chcą tworzyć płynne doświadczenia, równoważąc interaktywność z wydajnością i efektywnością. Wykorzystując jego funkcje, mogą oni tworzyć solidne, skalowalne i responsywne aplikacje, które spełniają wymagania nowoczesnego tworzenia stron internetowych.  

Chcesz pracować z nami? Wykorzystaj możliwości Angular i współpracuj z zespołami doświadczonych programistów, którzy stale udoskonalają swoje podejście. Zyskasz wtedy pewność, że Twoja aplikacja spełni oczekiwania użytkowników. 

Kategoria: Angular


Christian Wojtowicz_2
Christian Wojtowicz Senior Full-Stack Developer
Mariola Nowak Content Writer

Design, Development, DevOps czy Cloud – jakiego zespołu potrzebujesz, aby przyspieszyć pracę nad swoimi projektami?
Porozmawiaj o swoich potrzebach z naszymi specjalistami.

Jakub Orczyk

Członek zarządu / Dyrektor sprzedaży
VM.PL

Zamów bezpłatną konsultację
kuba (1)