Wydajne Tworzenie Stron WWW
2 godz. 2 min · Full-stack i Programowanie
Piotr PalarzWeb DeveloperNiezależnie od tego jak skomplikowana jest dana strona czy aplikacja internetowa, zawsze składa się ona z przynajmniej dwóch komponentów - struktury opisanej w HTML i wyglądu nadanego w CSS. Praca z tymi językami może czasami przyprawić o ból głowy, szczególnie wtedy, gdy tracimy czas na szukanie powodu "rozjeżdżającego się" layoutu lub złej wielkości fontu i miejsca, w którym został on nadpisany. W takich sytuacjach Chrome DevTools to nieoceniona pomoc. Dzięki temu narzędziu w mgnieniu oka znajdziesz zbyt szeroki element, zmienisz jego style "na żywo" i upewnisz się, że problem został rozwiązany. W kursie poznasz wszystkie techniki pracy z HTML i CSS, których wykorzystanie znacznie przyspieszy i uprości Twoją pracę.
Przygotowywanie stron na urządzenia mobilne nie należy do najłatwiejszych zadań. Składa się na to przede wszystkim fakt, iż do czynienia mamy z bardzo wieloma rozdzielczościami telefonów czy tabletów. W kursie zobaczysz, w jaki sposób skalować swoją stronę odwzorowując różne urządzenia, wyświetlać Media Queries czy emulować sensory ruchu. Dowiesz się również jak symulować wolniejsze połączenie internetowe, z którym mamy często do czynienia w mobilnych sieciach, a także jak spowolnić procesor, aby odwzorować słabszy sprzęt, jakim bez wątpienia są urządzenia mobilne.
Współczesne strony internetowe to nie tylko HTML i CSS. To także JavaScript - a nawet... sporo JavaScriptu. Z tego powodu narzędzia deweloperskie przeglądarek oferują i na tym polu wiele możliwości. Jedną z nich jest konsola, która pozwala wykonywać kod JavaScript w obrębie aktualnie otwartej strony. To właśnie tam możemy eksperymentować, podglądać logi czy błędy. Kiedy jednak stajemy przed rozwiązaniem trudniejszego problemu, często niezbędne jest skorzystanie z tzw. debuggera. Z kursu dowiesz się jak debugować swoje aplikacje, aby proces ich tworzenia był jak najprzyjemniejszy. Poznasz sposoby wykonywnania kodu linijka po linijce, gdzie na każdym etapie uzyskasz wgląd we wszystkie dane niezbędne do znalezienia problemu lub przetestowania tworzonego rozwiązania.
Nim dowolna strona internetowa zostanie wyświetlona, musi najpierw zostać do przeglądarki przesłana z serwera w formie kodu. Początkowo to tylko kod HTML, chwilę później CSS, JavaScript, fonty, obrazki, multimedia. Wszystkie te zasoby mają wpływ na szybkość ładowania się strony, a także jej renderowania. Tworząc serwis, bardzo łatwo "przesadzić" i stracić kontrolę nad wydajnością tego procesu.Tutaj z pomocą przychodzi panel Network, który omówimy w kursie. To tam znajdziemy wszystkie zapytania wysłane do serwera, dokładne dane na temat czasu pobierania każdego zasobu, statusy odpowiedzi ciasteczka i wiele więcej.
Choć zarówno komputery osobiste jak i urządzenia mobilne z roku na rok stają się coraz wydajniejsze, to i technologie tworzenia aplikacji internetowych idą do przodu. Oznacza to tylko tyle, że coraz bardziej zaawansowane aplikacje, wymagają do płynnego działania, coraz mocniejszych urządzeń. Trend ten można jednak w pewnym stopniu zatrzymać, skupiając się na tym, czy aby na pewno tworzone przez nas rozwiązania są dobrze przemyślane i wolne od błędów, które mogą powodować nadmierne zużycie pamięci czy czasu procesora. W kursie zobaczysz jak badać wydajność naszego kodu w kontekście CPU i pamięci RAM oraz na jakie pułapki zwracać szczególną uwagę.
Kurs ten jest dla wszystkich osób tworzących strony i aplikacje internetowe. Nieważne czy dopiero rozpoczynasz swoją przygodę z Web Developmentem czy jesteś już weteranem w tej branży. Materiał ten pokaże Ci nowoczesne techniki pracy, które przyspieszą i uproszczą proces tworzenia i testowania stron WWW. Kurs został podzielony w taki sposób, aby zarówno osoby znające wyłącznie HTML i CSS, jak i te korzystające już z języka JavaScript, znalazły porady odnośnie tych tematów.
W tej lekcji przejdziemy do zakładki memory i tutaj będę
chciał ci pokazać w jaki sposób możemy zobaczyć ile pamięci ram zajmuje
nasza aplikacja i tutaj będziemy mogli znaleźć problemy na
przykład z wyciekami pamięci na czym one polegają za sekundę powiem ale najpierw
pokażę ci jeszcze jedną fajną rzecz w chrome możemy przejść tutaj do menu wybrać more
tools i task manager i to nam pokaże tutaj różne otwarte
zakładki tutaj mamy ile
zajmuje jak widzisz ile jest CPU ale także ile pamięci zajmują
nasze poszczególne zakładki więc na przykład zakładka tab kurs narzędzia ponad
600 mb z jakiegoś powodu zajmuje a druga którą mam otwartą
tylko 54 mb no i tutaj jest
to istotne ile pamięci zajmuje która zakładka ale nie aż tak bardzo istotne
jest czy ta pamięć rośnie jeżeli zobaczysz że te wartości tutaj cały czas rosną
i nie maleją to znaczy że na twojej stronie
jest jakiś wyciek pamięci na przykład jakieś
dane są doczytywane a nie są odpowiednio oczyszczone czyli gdzieś
do nich jakieś odwołania są i tak zwane garbage collector nie może i wyczyścić
i tak dalej pokażę ci to na pewnym przykładzie stworzyłem sobie taki
przykład że mam funkcje get long string i mam taki string który nazwał long
string i potem 1000000 razy dodaje do niego randomowy ciąg znaków
więc będzie to bardzo duży string i później go zwracam i
zauważ co robi linijkę poniżej do zmiennej long string przypisuję
wywołanie tej funkcji to oznacza że w tej zmiennej będę miał to co ta funkcja przy
tej milionowej pętli nam wegeneruje no i ok wydaje się że nie
jest to problemem to będzie sporo pamięci zajmować ale przecież kiedyś zostanie przez ten
garbage collector czyli odświecacz usunięte niestety
tak się nie stanie bo poniżej mówimy na kliknięcie przycisku chcemy
zrobić console.log tego long string i garbage collector w javascripcie
działa tak że tak długo jak gdziekolwiek jest odwołanie do jakiejś zmiennej
czyli do jakiegoś obiektu nie może go usunąć z pamięci dlaczego
dlatego że nawet za godzinę jak ta strona będzie otwarta kliknę tutaj
kliknij mnie to musi się w konsoli pokazać ten długi ciąg znaków a więc
nie ma możliwości żeby go usunąć jedyna możliwość byłaby taka żeby
usunąć ten event handler tutaj mamy tak
że po pierwszym kliknięciu on się usunie i zobaczmy zaraz czy nam to zadziała
wtedy ten garbage collector wbudowany w silnikach do obsługi języka javascript
wie że w zasadzie z naszego kodu już nigdzie nie da się odwołać do tej zmiennej
i może wyczyścić to z pamięci więc zobaczmy może najpierw tutaj
w zakładce memory co się dzieje nasza strona nasza aplikacja zajmuje
nam chodzi o sam javascript jak widzisz bo cała widzieliśmy że zajmowała ponad
pół gb ale sam javascript
zajmuje nam tutaj 70 mb i teraz jeżeli
sobie kliknę ten przycisk w konsoli wyświetlimy cały
ten string ok wróćmy do zakładki memory i zobaczmy czy coś się dzieje pamięć
nam jeszcze wzrosła jak możesz teraz zobaczyć ale pod po
chwili zaczęła spadać dlaczego tak się stało jeżeli wszedł do konsoli wyczyszczę
bo jeżeli kliknę ponownie a ten przycisk to zauważ że już
nam się to ponownie nie wyświetla i tak się stało dlatego że mam do
przycisku przypisane zdarzenie kliknięcia one czyli mówię tylko raz jak
się na niego kliknie wywołaj tam funkcje a potem już nie i to co jQuery robi
pod spodem tak naprawdę to usuwa całą tę funkcję czyli
do niej odwołanie usuwa a więc garbage collector widzi że w tej funkcji było odwołanie
do long string tak naprawdę ta funkcja przestaje istnieć nie jest już przypisana
do kliknięcia więc skoro już nigdzie indziej nie ma dostępu do long
string to możemy to po prostu usunąć gdybym tutaj miał on to tak
zrobić by nie można było natomiast teraz ci pokażę co byłoby w
tej sytuacji wydajniejsze jeżeli zawartości tej zmiennej nie potrzebuję nigdzie
indziej to wystarczyłoby wstawić ją tutaj w zasadzie
nawet niżej czyli nie będziemy generować tego stingu który
zajmuje dużo pamięci dopóki nie klikniemy tego przycisku
i że jeżeli teraz odświeżę tą stronę to możemy zobaczyć
że ona nam zajmuje tam 30 kilka megabajtów natomiast dopiero
jak kliknę tutaj kliknij mnie to ta pamięć nam podskoczy powinniśmy to
tutaj widzieć podskoczyła do 80 zalogowaliśmy to w konsoli i
znowu może zacząć spadać dlatego że z żadnego miejsca
w naszym kodzie nie da się odwołać do tej zmiennej a więc garbage collector może ją usunąć
gdybyśmy z kolei tutaj zrobili takie psikusy i napisali window i
cokolwiek mogłoby to być long string równa się long string
to byśmy powiedzieli że na obiekcie globalnym window ma być dostęp
do tej zmiennej i wtedy garbage collector nigdy nie będzie mógł jej usunąć bo wiemy
że z dowolnego miejsca naszej aplikacji moglibyśmy wpisać window long string dopiero
jak byśmy pisali window long string równa się null to zostałoby to usunięte
więc mam nadzieję że tutaj rozumiesz jak działa garbage collector natomiast panel memory
pozwala nam zdiagnozować te wszystkie problemy i teraz jeszcze pokażę
ci jak można wykonać tak zwany snapshot żeby to potwierdzić czyli jeżeli zrobimy
tak że przy wczytywaniu naszego kodu od razu zapiszemy do zmiennej ten
długi string i on będzie czekał aż klikniemy w przycisk odświeżmy
sobie tutaj i w panelu memory będę chciał wykonać snapshot tutaj
musimy sekundę poczekać snapshot się wykonał i zajmuje prawie 70
megabajtów to tutaj będziemy mogli zobaczyć co ile w naszym kodzie javascript konkretnie
zajmuje i mamy coś takiego jak Shallow Size czyli jakby płytki rozmiar i Retained Size
Retained to jest to ile to naprawdę zajmuje czyli jeżeli garbage collector
będzie mógł to usunąć to tyle odzyskamy z pamięci natomiast Shallow Size
może być bardzo malutki bo to jest jakby rozmiar powiedzmy zmiennej
która przechowuje wskaźnik do tego Retained Size
więc tak naprawdę możemy sobie tutaj po tym posortować i
zobaczyć no i jeżeli przyjdziemy to widzimy że string zajmują dosyć
dużo albo tutaj mamy nawet jeszcze więcej concatenated string i jeżeli
tutaj przejdziemy to się za moment okaże że tutaj jest właśnie ten nasz konkatenowany string
bo zauważ że ja tutaj robiłem konkatenację i on się tutaj pokazał
więc możemy zdiagnozować że faktycznie coś tutaj mamy co dużo zajmuje i
niekoniecznie tutaj być powinno natomiast jeżeli sobie teraz to wyciągniemy
stąd i wstawimy tylko w to miejsce odświeżę
stronę ten snapshot nam tutaj zostanie wykonam to wiemy
że wygeneruje się długi string zostanie wypisane
i tak naprawdę garbage collector może go usunąć
z pamięci to jeżeli teraz wykonam kolejny snapshot tutaj klikamy na profiles
wykonam sobie snapshot zobaczymy
ile będzie zajmował być może zrobiłem trochę za
szybko nie bo tutaj jeszcze na tym przycisku chciałem
ci powiedzieć że możemy wymusić garbage collectora żeby on usunął to co może usunąć
i jeżeli nie wymusimy to co jakiś czas jest to usuwane widzimy że teraz to zajmuje
sporo mniej no i możemy sobie takie dwa snapshoty porównać wybierzemy
sobie tutaj Comparison i chcęmy porównać do snapshotu 7
i zobaczymy co zostało dodane pomiędzy tymi dwoma co
zostało usunięte i tak dalej oczywiście ja nie musiałem przeładowywać strony czasem
może być tak że po prostu wykonasz jakąś wykonasz sobie snapshot zobaczysz ile
masz pamięci klikniesz coś żeby wykonać jakąś akcję w twojej aplikacji i
wykonasz kolejny snapshot i zobaczysz na ile się zmieniła pamięć więc
tutaj moglibyśmy sobie to wszystko po prostu porównać to jest również dosyć skomplikowane
ale pozwala nam pokazać ile pamięci zajmuje nasza aplikacja
i czy nie mamy przypadkiem jakiegoś problemu z pamięcią czyli musimy też
zwracać uwagę na to jak przypisujemy jakieś zdarzenia do elementów i tak dalej do
jakich zmiennych one mają dostęp i co w tych zmiennych ewentualnie może być
problemy może być też na przykład tak zwanej infinity scroll kiedy scrollujemy
stronę i wczytujemy ciągle nowe dane które będą przechowywane gdzieś w jakiejś tablicy
a także później odzwierciedlane jako elementy na stronie również
powinniśmy wtedy zadbać o to żeby te elementy u góry tak naprawdę kasować
kiedy pokazujemy kolejne i tak dalej to naprawdę tutaj będzie można znaleźć
na koniec jednak chciałbym ci pokazać że mamy taki przykład taką stronkę Memory leak demo
tutaj jakbyś się zagłębił w kod to jest pokazane w
jaki sposób można właśnie zrobić taki leak czyli wyciek pamięci
kiedy ta pamięć w nieskończoność rośnie i jeżeli sobie teraz tutaj przejdziemy
i klikniemy Leak JS memory to widzimy że nam to rośnie i
będzie to widać w tym miejscu więc tutaj również możesz to zauważyć albo w tym
task manager że masz jakiś problem bo pamięć twojej aplikacji cały
czas wzrasta a to oznacza że po jakimś czasie po prostu ta aplikacja się
wykrzaczy bo zabraknie pamięci operacyjnej w systemie ok odświeżę
żeby zabić ten proces i to by było tyle jeżeli chodzi o panel memory
i performance i memory są tak naprawdę bardzo zaawansowane i
korzystaj z nich jeżeli będziesz czuł że coś
jest nie tak z twoją aplikacją że być może
gdzieś nie działa tak wydajne jak powinna myślę że tutaj powinieneś znaleźć
odpowiedzi na twoje problemy