{"id":5146,"date":"2024-09-18T11:37:31","date_gmt":"2024-09-18T09:37:31","guid":{"rendered":"https:\/\/www.infinity-group.pl\/blog\/?p=5146"},"modified":"2026-02-27T09:58:01","modified_gmt":"2026-02-27T08:58:01","slug":"optymalizacja-wydajnosci-w-aplikacjach-angular","status":"publish","type":"post","link":"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/","title":{"rendered":"Optymalizacja wydajno\u015bci w aplikacjach Angular"},"content":{"rendered":"\n<p>Aplikacje Angular to popularne frameworki do budowania dynamicznych aplikacji webowych. Pozwalaj\u0105 na tworzenie rozbudowanych i interaktywnych aplikacji, jednak wraz ze wzrostem rozmiaru projektu mog\u0105 pojawi\u0107 si\u0119 problemy z wydajno\u015bci\u0105. Dlatego optymalizacja jest kluczowa, aby aplikacje dzia\u0142a\u0142y p\u0142ynnie, a u\u017cytkownicy dobrze je oceniali. Jakie s\u0105 <strong>najlepsze praktyki, kt\u00f3re pomog\u0105 w optymalizacji wydajno\u015bci aplikacji Angular?<\/strong><\/p><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Summary<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#lazy-loading-modulow\" >Lazy loading modu\u0142\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#onpush-change-detection\" >OnPush Change Detection<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#odsubskrybowanie-od-observable\" >Odsubskrybowanie od Observable<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#zmniejszanie-rozmiaru-paczki-bundle-size\" >Zmniejszanie rozmiaru paczki (bundle size)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#server-side-rendering-ssr-z-angular-universal\" >Server-side rendering (SSR) z Angular Universal<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#asynchroniczne-ladowanie-zasobow\" >Asynchroniczne \u0142adowanie zasob\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#zmniejszenie-liczby-komponentow-i-wywolan-change-detection\" >Zmniejszenie liczby komponent\u00f3w i wywo\u0142a\u0144 Change Detection<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#uzywanie-angular-cli-do-produkcyjnych-buildow\" >U\u017cywanie Angular CLI do produkcyjnych build\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#zoptymalizowane-zarzadzanie-zasobami\" >Zoptymalizowane zarz\u0105dzanie zasobami<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#monitoring-i-analiza-wydajnosci\" >Monitoring i analiza wydajno\u015bci<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#ograniczenie-liczby-zewnetrznych-zapytan-http\" >Ograniczenie liczby zewn\u0119trznych zapyta\u0144 http<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#zmniejszenie-uzycia-zewnetrznych-bibliotek\" >Zmniejszenie u\u017cycia zewn\u0119trznych bibliotek<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#podsumowanie\" >Podsumowanie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.infinity-group.pl\/blog\/2024\/09\/18\/optymalizacja-wydajnosci-w-aplikacjach-angular\/#skontaktuj-sie-z-nami\" >Skontaktuj si\u0119 z nami<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"lazy-loading-modulow\"><\/span>Lazy loading modu\u0142\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Lazy loading to technika, kt\u00f3ra pozwala na \u0142adowanie tylko tych modu\u0142\u00f3w, kt\u00f3re s\u0105 potrzebne w danym momencie. Dzi\u0119ki temu pocz\u0105tkowy <strong>czas \u0142adowania aplikacji jest kr\u00f3tszy, a nieu\u017cywane zasoby nie obci\u0105\u017caj\u0105 przegl\u0105darki u\u017cytkownika<\/strong>. Narz\u0119dzia s\u0142u\u017c\u0105ce do szybkiego i \u0142atwego generowania projektu angularowego, takie jak Angular CLI, wspieraj\u0105 automatyczne tworzenie modu\u0142\u00f3w z lazy loadingiem, u\u0142atwiaj\u0105c wdro\u017cenie tej techniki.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"onpush-change-detection\"><\/span>OnPush Change Detection<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Domy\u015blnie Angular stosuje opart\u0105 na referencjach (Default) strategi\u0119 Change Detection, kt\u00f3ra monitoruje wszystkie komponenty przy ka\u017cdej zmianie stanu aplikacji. Mo\u017cna jednak zwi\u0119kszy\u0107 wydajno\u015b\u0107, zmieniaj\u0105c strategi\u0119 na OnPush, kt\u00f3ra sprawdza zmiany tylko wtedy, gdy referencje danych wej\u015bciowych (@Input) komponentu si\u0119 zmieniaj\u0105. To zmniejsza liczb\u0119 operacji Change Detection, znacz\u0105co zwi\u0119kszaj\u0105c wydajno\u015b\u0107 \u2013 szczeg\u00f3lnie w du\u017cych aplikacjach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"odsubskrybowanie-od-observable\"><\/span>Odsubskrybowanie od Observable<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Nieprawid\u0142owe zarz\u0105dzanie subskrypcjami Observable mo\u017ce prowadzi\u0107 do wyciek\u00f3w pami\u0119ci. Aby temu zapobiec, nale\u017cy r\u0119cznie anulowa\u0107 subskrypcj\u0119, na przyk\u0142ad przy u\u017cyciu operatora takeUntil. Alternatywnie warto u\u017cywa\u0107 AsyncPipe w szablonach \u2013 ta metoda <strong>automatycznie zarz\u0105dza subskrypcjami i anuluje je, gdy komponent zostaje zniszczony.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"zmniejszanie-rozmiaru-paczki-bundle-size\"><\/span>Zmniejszanie rozmiaru paczki (bundle size)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Zbyt du\u017ca paczka aplikacji negatywnie wp\u0142ywa na czas \u0142adowania. Jednak \u0142atwo temu zapobiec \u2013 wystarczy przyj\u0105\u0107 odpowiedni\u0105 taktyk\u0119:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>U\u017cyj mechanizmu tree-shaking, kt\u00f3ry usuwa nieu\u017cywany kod. Angular CLI wspiera tree-shaking, jednak warto r\u00f3wnie\u017c r\u0119cznie przegl\u0105da\u0107 zale\u017cno\u015bci, aby unika\u0107 zb\u0119dnych bibliotek.<\/li>\n\n\n\n<li>Korzystaj z @angular\/material lub innych bibliotek Angular w spos\u00f3b modu\u0142owy, importuj\u0105c tylko te komponenty, kt\u00f3re s\u0105 rzeczywi\u015bcie u\u017cywane.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"server-side-rendering-ssr-z-angular-universal\"><\/span>Server-side rendering (SSR) z Angular Universal<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>U\u017cycie Angular Universal do renderowania aplikacji po stronie serwera przyspiesza czas \u0142adowania strony i poprawia SEO. Dzi\u0119ki SSR tre\u015b\u0107 jest wy\u015bwietlana szybciej, <strong>co zmniejsza obci\u0105\u017cenie przegl\u0105darki u\u017cytkownika i poprawia do\u015bwiadczenie u\u017cytkownik\u00f3w<\/strong> \u2013 szczeg\u00f3lnie na s\u0142abszych urz\u0105dzeniach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"asynchroniczne-ladowanie-zasobow\"><\/span>Asynchroniczne \u0142adowanie zasob\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Asynchroniczne \u0142adowanie zasob\u00f3w, takich jak skrypty czy zewn\u0119trzne biblioteki, pozwala na szybsze renderowanie strony. Dodatkowo, <strong>aby nie blokowa\u0107 renderowania strony, w skryptach mo\u017cesz u\u017cy\u0107 znacznik\u00f3w async lub defer.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"zmniejszenie-liczby-komponentow-i-wywolan-change-detection\"><\/span>Zmniejszenie liczby komponent\u00f3w i wywo\u0142a\u0144 Change Detection<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>G\u0142\u0119bokie hierarchie komponent\u00f3w oraz nadmiarowe operacje Change Detection mog\u0105 obci\u0105\u017ca\u0107 aplikacje. Unikanie zbyt g\u0142\u0119bokich struktur komponent\u00f3w oraz technika memoizacji wynik\u00f3w mog\u0105 by\u0107 dobrymi praktykami w optymalizacji wydajno\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"uzywanie-angular-cli-do-produkcyjnych-buildow\"><\/span>U\u017cywanie Angular CLI do produkcyjnych build\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Angular CLI oferuje wbudowane mechanizmy optymalizacji dla produkcyjnych build\u00f3w. U\u017cycie komendy ng build \u2013 prod automatycznie stosuje minifikacj\u0119 (zmniejszenie kodu \u017ar\u00f3d\u0142owego poprzez usuni\u0119cie niepotrzebnych znak\u00f3w bez zmieniania jego funkcjonalno\u015bci) wspomniany wcze\u015bniej tree-shaking oraz inne optymalizacje. <strong>Innym sposobem na zapewnienie maksymalnej wydajno\u015bci jest u\u017cycie w\u0142a\u015bciwego konfiguratora do build\u00f3w.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"zoptymalizowane-zarzadzanie-zasobami\"><\/span>Zoptymalizowane zarz\u0105dzanie zasobami<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Du\u017ce zasoby statyczne, takie jak obrazy czy czcionki, mog\u0105 wyd\u0142u\u017ca\u0107 czas \u0142adowania aplikacji. Aby poradzi\u0107 sobie z tym wyzwaniem, u\u017cyj Webpack Bundle Analyzer, s\u0142u\u017c\u0105cego do analizy paczki aplikacji i identyfikacji du\u017cych zasob\u00f3w, kt\u00f3re mo\u017cna zoptymalizowa\u0107 lub podzieli\u0107 na mniejsze cz\u0119\u015bci. <strong>Zoptymalizuj r\u00f3wnie\u017c obrazy, czcionki oraz inne zasoby statyczne, aby zmniejszy\u0107 ich rozmiar<\/strong> \u2013 na przyk\u0142ad za pomoc\u0105 odpowiednich format\u00f3w, takich jak WebP dla obraz\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"monitoring-i-analiza-wydajnosci\"><\/span>Monitoring i analiza wydajno\u015bci<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Regularne monitorowanie i analiza aplikacji pozwala na szybsz\u0105 identyfikacj\u0119 w\u0105skich garde\u0142 i obszar\u00f3w wymagaj\u0105cych poprawy. W tym celu skorzystaj z narz\u0119dzi takich jak Angular DevTools, Chrome DevTools lub Lighthouse, kt\u00f3re oferuj\u0105<strong> rozbudowane funkcje do profilowania aplikacji<\/strong>. Z kolei na \u015brodowisku produkcyjnym do monitorowania wydajno\u015bci pos\u0142u\u017c\u0105 narz\u0119dzia Sentry lub New Relic.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"ograniczenie-liczby-zewnetrznych-zapytan-http\"><\/span>Ograniczenie liczby zewn\u0119trznych zapyta\u0144 http<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Zbyt du\u017ca liczba zapyta\u0144 HTTP do serwera mo\u017ce spowalnia\u0107 dzia\u0142anie aplikacji. Aby tego unikn\u0105\u0107, mo\u017cesz rozwa\u017cy\u0107 mi\u0119dzy innymi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0141\u0105czenie zapyta\u0144 HTTP za pomoc\u0105 technik takich jak debouncing, caching lub batching.<\/li>\n\n\n\n<li>U\u017cywanie mechanizm\u00f3w, takich jak HttpInterceptor, aby zoptymalizowa\u0107 zarz\u0105dzanie \u017c\u0105daniami HTTP.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"zmniejszenie-uzycia-zewnetrznych-bibliotek\"><\/span>Zmniejszenie u\u017cycia zewn\u0119trznych bibliotek<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ka\u017cda kolejna biblioteka wprowadza dodatkowy kod do aplikacji, zwi\u0119kszaj\u0105c rozmiar paczki. Wybieraj tylko te biblioteki, kt\u00f3re s\u0105 niezb\u0119dne, a pozosta\u0142e funkcjonalno\u015bci staraj si\u0119 implementowa\u0107 w ramach natywnych mo\u017cliwo\u015bci Angulara.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"podsumowanie\"><\/span>Podsumowanie<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Optymalizacja aplikacji Angular to proces wymagaj\u0105cy ci\u0105g\u0142ego monitorowania i dostosowywania strategii. Koncentruj\u0105c si\u0119 na redukcji niepotrzebnych oblicze\u0144, minimalizacji liczby renderowa\u0144 oraz optymalnym zarz\u0105dzaniu zasobami, mo\u017cna osi\u0105gn\u0105\u0107 lepsz\u0105 wydajno\u015b\u0107 aplikacji. Dzi\u0119ki tym praktykom Twoja aplikacja Angular b\u0119dzie dzia\u0142a\u0107 szybciej, p\u0142ynniej i oferowa\u0107 lepsze do\u015bwiadczenia u\u017cytkownikom.<\/p>\n\n\n\n<p>Nasi programi\u015bci specjalizuj\u0105 si\u0119 w budowaniu r\u00f3\u017cnych aplikacji webowych \u2013 w tym aplikacjach Angularowych. Wype\u0142nij poni\u017cszy formularz i dowiedz si\u0119, jak <strong>mo\u017cemy pom\u00f3c w stworzeniu nowoczesnej i wydajnej aplikacji dopasowanej do Twoich potrzeb biznesowych.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-contact-form-7-contact-form-selector\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f5-o1\" lang=\"pl-PL\" dir=\"ltr\" data-wpcf7-id=\"5\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/blog\/wp-json\/wp\/v2\/posts\/5146#wpcf7-f5-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formularz kontaktowy\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"5\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"pl_PL\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f5-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<h2 class=\"form-title\"><span class=\"ez-toc-section\" id=\"skontaktuj-sie-z-nami\"><\/span>Skontaktuj si\u0119 z nami\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"form-row\">\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Imi\u0119 i nazwisko*\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Firma*\" value=\"\" type=\"text\" name=\"your-company\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<div class=\"form-row\">\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"E-mail*\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"phone-number\"><input size=\"40\" maxlength=\"15\" class=\"wpcf7-form-control wpcf7-tel wpcf7-text wpcf7-validates-as-tel\" aria-invalid=\"false\" placeholder=\"Numer telefonu\" value=\"\" type=\"tel\" name=\"phone-number\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" aria-invalid=\"false\" placeholder=\"Wiadomo\u015b\u0107\" name=\"your-message\"><\/textarea><\/span>\n<\/p>\n<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Wy\u015blij\" \/>\n<\/p>\n<div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<p>*Wymagane\n<\/p>\n<p class=\"klauzula-naglowek\">Klauzula informacyjna dotycz\u0105ca przetwarzania danych osobowych:\n<\/p>\n<p>Administratorem Twoich danych osobowych jest Infinity Group Sp. z o.o. z siedzib\u0105 w Bia\u0142ymstoku.<br \/>\nDane podane w formularzu b\u0119d\u0105 przetwarzane w celu udzielenia odpowiedzi na zapytanie (art. 6 ust. 1 lit. f RODO \u2013 prawnie uzasadniony interes administratora polegaj\u0105cy na prowadzeniu korespondencji). Podanie danych jest dobrowolne, ale niezb\u0119dne do udzielenia odpowiedzi. Przys\u0142uguje Ci m.in. prawo sprzeciwu wobec przetwarzania danych oraz prawo wniesienia skargi do Prezesa Urz\u0119du Ochrony Danych Osobowych. Szczeg\u00f3\u0142owe informacje, w tym o odbiorcach danych, okresie przechowywania oraz mo\u017cliwym przekazywaniu danych poza EOG, znajdziesz pod linkiem \u201eInformacje o przetwarzaniu Twoich danych osobowych\u201d.\n<\/p>\n<\/form>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aplikacje Angular to popularne frameworki do budowania dynamicznych aplikacji webowych. Pozwalaj\u0105 na tworzenie rozbudowanych i interaktywnych aplikacji, jednak wraz ze wzrostem rozmiaru projektu mog\u0105 pojawi\u0107 si\u0119 problemy z wydajno\u015bci\u0105. Dlatego optymalizacja jest kluczowa, aby aplikacje dzia\u0142a\u0142y p\u0142ynnie, a u\u017cytkownicy dobrze je oceniali. Jakie s\u0105 najlepsze praktyki, kt\u00f3re pomog\u0105 w optymalizacji wydajno\u015bci aplikacji Angular? Lazy loading&#8230;<\/p>\n","protected":false},"author":33,"featured_media":5740,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-5146","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development"],"_links":{"self":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts\/5146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/comments?post=5146"}],"version-history":[{"count":6,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts\/5146\/revisions"}],"predecessor-version":[{"id":5942,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts\/5146\/revisions\/5942"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/media\/5740"}],"wp:attachment":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/media?parent=5146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}