od Podstaw
9 godz. 20 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJavaScript to język programowania, który napędza niemal wszystkie strony internetowe. Dopełnia on technologie HTML i CSS, za pomocą których tworzymy strukturę i wygląd dokumentu. Co jednak w sytuacji, gdy chcemy po kliknięciu w wybrany przycisk wyświetlić powiększone zdjęcie lub wczytać dodatkowe dane z serwera? To właśnie w takich sytuacjach przydaje się język JavaScript i tzw. DOM API, dostępne w przeglądarce. Jak się przekonasz, możliwości nowoczesnych przeglądarek w połączeniu z tym językiem są naprawdę ogromne.
Język JavaScript może być używany nie tylko na stronach internetowych. Z tego powodu, w kursie omówimy najpierw najważniejsze konstrukcje tego języka, które są niezależne od platformy uruchomieniowej. Dzięki temu zbudujesz fundamenty niezbędne do tego, by wykorzystać ten język np. w środowisku Node.js. Krok po kroku omówimy sposoby tworzenia zmiennych, dostępne typy danych i operatory. Następnie zobaczysz jak tworzyć tablice i obiekty, z jakich instrukcji warunkowych i pętli możesz korzystać, a także jak tworzyć własne funkcje. Przekazywana wiedza uwzględniać będzie nowości, które pojawiły się w języku wraz z rewolucyjnym standardem EcmaScript 6 (ES6).
Sam język JavaScript to nie wszystko, by tchnąć ducha w strony internetowe. Z tego powodu, przeglądarki internetowe udostępniają tzw. DOM API. To interfejs, który z użyciem języka JavaScript pozwala na manipulację treścią i wyglądem strony. W kursie bardzo dokładnie omówimy czym jest Obiektowy Model Dokumentu, a także jak z nim pracować. Zobaczysz jak tworzyć nowe elementy HTML i wstawiać je na stronę, jak modyfikować ich treść, atrybuty, style czy klasy CSS. Poznasz sposoby na odczytywanie położenia elementu na stronie i jego wymiarów, które będą niezbędne w wielu sytuacjach. Dowiesz się także, jak przypisywać obsługę zdarzeń w przeglądarce, by np. wywołać własną funkcję, gdy ktoś kliknie w wybrany przez Ciebie przycisk.
JSON to popularny format wymiany danych, a Ajax to potoczna nazwa dla asynchronicznych zapytań HTTP, które wysyłać możemy z poziomu kodu JavaScript. Dziś niemal każda strona internetowa wykorzystuje te technologie. W niektórych przypadkach jako dopełnienie podstawowej funkcjonalności witryny, a w innych jako główny motor napędzający stronę. Jeśli kiedykolwiek widziałeś, jak na stronie internetowej jakaś treść "doczytuje" się np. podczas przewijania - widziałeś w praktyce Ajax. W jednym z rozdziałów kursu zobaczysz, jak pracować z tym formatem, a także jak wysyłać wspomniane zapytania do serwera.
Choć kurs który masz przed sobą, jest kursem dla początkujących, to aby zrozumieć jak działa język JavaScript i jak z nim się współcześnie pracuje, omówimy dwa ważne tematy - zarządzanie zależnościami i bundlowanie kodu. Dowiesz się czym jest npm i jak z jego pomocą pobierać paczki gotowego kodu z internetu, a także jak sprawić, by bez trudnu dołączać je do własnego kodu. W tym celu skorzystamy z narzędzia snowpack, które pozwoli nam także na optymalizację kodu przed jego wypuszczeniem w świat. Na tym etapie omówimy również jak działają moduły ESM, pozwalające dzielić kod na mniejsze części.
Kurs podzielony został na możliwie krótkie lekcje, do których w każdej chwili możesz wrócić. Jeśli zatem zapomnisz jak odczytywać wymiary elementu na stronie, szybko odnajdziesz odpowiednią lekcję. Czym jednak była by sama teoria i proste przykłady, bez pokazania, jak połączyć je w całość i wykorzystać w praktyce? Dobra wiadomość jest taka, że w kursie stworzymy aż 5 praktycznych projektów, wykorzystujących zdobytą wcześniej wiedzę. Najpierw napiszemy program losujący Dużego Lotka, następnie dynamiczny pasek postępu przeczytania artykułu, dymek pojawiający się nad elementem po najechaniu na niego myszą, wygenerujemy tabelkę w użytkownikami na podstawie danych JSON, a na koniec tworzymy prosty odtwarzacz wideo, z możliwością pauzowania i przewijania filmu.
Kurs ten jest dla wszystkich osób, które znają już podstawy HTML i CSS i chciałyby przejść poziom wyżej i dodać do swoich stron dynamiczności. Żadna wcześniejsza wiedza z zakresu JavaScript nie jest wymagana, ale zalecana jest podstawowa wiedza z zakresu samego programowania (czym są zmienne, pętle, funkcje itd.). Materiał ten będzie również świetnym odświeżeniem i usystematyzowaniem wiedzy dla osób, które już z tym językiem miały do czynienia. Po przerobieniu tego kursu będziesz gotowy, by poznawać język JavaScript dalej i zacząć korzystać z nowoczesnych frameworków.
W tej lekcji powiemy sobie trochę o
wydajności wstawienia elementów na stronę i w tym celu pokaże Ci fragment dokumentu.
Mamy tutaj taki element
ul i chciałbym do niego wstawić 5 dynamicznie wygenerowanych elementów li.
Zatem przejdźmy od razu do pracy.
Zapiszemy sobie w stałej list po to, żeby
mieć odwołanie do tego elementu, czyli querySelector.
Wyszukaj go po id list.
Czyli tutaj mamy odwołanie do tego ul. I teraz pętlą for, bo jesteśmy w języku
JavaScript, więc wszystko jest tutaj dla nas dostępne,
będę chciał
stworzyć taką pętle, która nam stworzy 5 elementów. Czyli będzie to i równa się 0
i mniejsze lub równe 5 i + + standardowa pętla for.
I teraz w środku będę chciał tworzyć sobie za każdym razem element li,
czyli document.createElement li będę chciał do niego wstawić jakiś tekst,
czyli zrobimy li.append
i tutaj zrobimy document.createTextNode.
Chciałbym żeby to było dynamiczne, więc tutaj
sobie przekażemy taki template string i napiszemy element listy
i chciałbym tutaj wstawić po prostu index. Czyli na początku index to będzie
0, a więc zrobimy sobie i + 1 czyli będzie element listy 1-2-3 itd.
Od razu zauważ, że liniowo tutaj stworzyłem ten TextNode,
można by go było zapisać w zmiennej i dopiero tutaj podstawić.
Nie ma to znaczenia jak to zrobimy i tak najpierw to zostanie
stworzone i podstawione do metody append. I teraz będę chciał do tego elementu list
poprzez append dodać ten nowo utworzony element li.
OK.
Zapiszemy sobie to wszystko, odświeżymy stronę i
jak widzisz dokładnie stało się to co chcieliśmy.
OK, chciałbym żeby tutaj było mniej tych elementów o 1.
Czyli zrobimy to tak.
Wszystko się zgadza.
Natomiast jaki tutaj jest problem?
Tutaj trzeba trochę wiedzieć, jak działa przeglądarka.
Otóż za każdym razem, kiedy utworzymy taki element i mówimy przeglądarce wstaw ten
element do ul, to przeglądarka wstawia tutaj ten element
i musi wykonać całą pracę pod tytułem wstaw ten element, czyli po prostu
wyrenderuj go na stronie, ale przelicz wszystko.
Czy tutaj pod spodem nie było jakiegoś
elementu, który należy przesunąć w dół, bo są jakieś marginesy itd.
czyli cały tzw. repainting
przeglądarka musi zrobić co jest dla niej kosztowne z punktu widzenia oczywiście
operacji na procesorze, szczególnie na urządzeniach mobilnych.
Więc to nie jest tak, że jak tutaj zrobisz
to w ten sposób i wstawisz 5 elementów to to będzie zauważalne.
Aczkolwiek jeżeli tych elementów byłoby
znacznie więcej, będzie to już miało wpływ na wydajność.
W tej lekcji jednak chodzi o to, żebyś
poznał fragment dokumentu i zobaczył jak on ten problem rozwiązuje.
Chciałbym po prostu zrobić tak, aby utworzyć najpierw te 5 elementów, a potem
jednorazowo wstawić je na stronę, a nie wstawiać ich za każdym razem.
Zatem zrobimy sobie coś takiego, że
utworzymy fragment dokumentu, czyli stworzę sobie jakąś stałą, którą nazwę dc
jak DocumentFragment i znowu mamy na obiekcie document
metodę, która się nazywa createDocumentFragment.
Wywołujemy ją i nic jej nie przekazujemy.
Ona nam tworzy fragment dokumentu, który możesz sobie wyobrazić, że jest
takim jakby pustym div, ale on nie jest żadnym elementem HTML.
I teraz co zrobimy?
Skopiuję sobie to wszystko co było u góry i wykomentuje i wstawimy w to miejsce.
I zamiast stawiać te elementy, które tworzymy do listy, która jest na stronie,
będziemy je wstawiać do fragmentu dokumentu.
Czyli fragment dokumentu to jest taki
obiekt, który również posiada metodę append, tak samo jak inne elementy, takie
rzeczywiste HTML, ale on nie jest takim elementem.
Więc jeżeli coś takiego tylko zrobimy
i odświeżamy, to zauważ, że nic się nie stało.
Chociaż uwierz mi te 5 elementów li zostało
utworzonych i wstawionych do fragmentu dokumentu.
Natomiast to co zrobimy teraz to do naszej
listy jednorazowo za pomocą append wstawimy tenże fragment dokumentu.
Czyli zamiast tam wstawiać jakieś div czy pojedyncze elementy li, wstawiamy
fragment dokumentu i dzięki temu to jest tak jakbyśmy
wstawili na raz wszystkie te elementy li. Po odświeżeniu zobacz,
działa to dokładnie tak samo, ale jest
dużo bardziej wydajne, bo najpierw utworzyliśmy pięć elementów, których nie
ma na stronie, potem jednorazowo je wstrzykneliśmy na stronę i przeglądarka
jednorazowo musiała przeliczyć to wszystko i od nowa wyrenderować.
Jeżeli zatem będziesz miał jakieś
dynamiczne dane, z których będziesz tworzył np.
długą listę takich elementów li albo np.
jakąś tabelkę, to pamiętaj o tym, że możesz skorzystać z fragmentu dokumentu,
do niego upchnąć wszystkie te elementy, a jego jednorazowo wstawić na stronę.