-
nowość
-
promocja
Node.js. Wzorce projektowe i techniki tworzenia aplikacji produkcyjnych - ebook
Node.js. Wzorce projektowe i techniki tworzenia aplikacji produkcyjnych - ebook
Wstępy napisali: Colin J. Ihrig (współtwórca Node.js) i Matteo Collina (główny opiekun Fastify, współtwórca Node.js).
Node.js to obecnie jedna z najpopularniejszych platform do tworzenia aplikacji serwerowych, używana przez miliony programistów na całym świecie. Jej asynchroniczna, sterowana zdarzeniami architektura idealnie sprawdza się w budowaniu skalowalnych systemów internetowych, API i mikrousług. Książka odpowiada na potrzeby współczesnych programistów, prezentując najnowsze funkcje platformy, sprawdzone wzorce projektowe, a także praktyczne techniki tworzenia wydajnych, niezawodnych aplikacji produkcyjnych.
Autorzy prowadzą czytelnika przez wszystkie aspekty profesjonalnego programowania w Node.js od fundamentów platformy i systemu modułów, przez programowanie asynchroniczne z wykorzystaniem callbacks, obietnic i async/await, aż po zaawansowane wzorce projektowe i architektury mikrousług. Szczegółowo omawiają strumienie Node.js, konstrukcyjne, strukturalne i behawioralne wzorce projektowe. Książka zawiera praktyczne receptury odpowiadające na typowe wyzwania: asynchroniczną inicjalizację, buforowanie, anulowanie operacji czy wykonywanie zadań obciążających procesor. Końcowe rozdziały koncentrują się na skalowalności przedstawiają techniki skalowania aplikacji, zastosowanie Kubernetes i wzorce komunikacji w systemach rozproszonych z użyciem Redis, RabbitMQ i ZeroMQ.
Najważniejsze zagadnienia:
- Asynchroniczne wzorce kontroli przepływu
- Wzorce projektowe dostosowane do Node.js
- Testowanie aplikacji testy jednostkowe, integracyjne i E2E
- Zaawansowane receptury
- Skalowanie i architektura
- Komunikacja w systemach rozproszonych
Mistrzowskie opanowanie Node.js od podstaw po systemy produkcyjne
Spis treści
O autorach
O korektorach merytorycznych
Beta czytelnicy
Wstęp 1
Wstęp 2
Wprowadzenie
Rozdział 1. Platforma Node.js
- Filozofia Node.js
- Mały rdzeń
- Małe moduły
- Mała powierzchnia
- Prostota i pragmatyzm
- Jak działa Node.js?
- Wąskim gardłem są często operacje wejścia-wyjścia
- Blokujące operacje wejścia-wyjścia
- Nieblokujące operacje wejścia-wyjścia
- Demultipleksacja zdarzeń
- Wzorzec reaktora
- libuv, czyli silnik wejścia-wyjścia w Node.js
- Kompletna receptura dla Node.js
- JavaScript w Node.js
- Bez obaw uruchamiaj najnowszy kod napisany w JavaScripcie
- System modułowy
- Pełny dostęp do usług systemu operacyjnego
- Uruchamianie kodu natywnego
- Node.js i TypeScript
- Podsumowanie
Rozdział 2. System modułów
- Zalety stosowania modułów
- Systemy modułów w JavaScripcie i w Node.js
- Wzorzec ujawnianego modułu
- Moduły ES
- Korzystanie z modułów ES w Node.js
- Składnia modułów ES
- Algorytm rozwiązywania modułów
- Szczegółowe omówienie procesu wczytywania modułów
- Moduły modyfikujące inne moduły
- Moduły CommonJS
- Moduły ES i CommonJS - różnice i współdziałanie
- Tryb ścisły
- Oczekiwanie na najwyższym poziomie
- Sposób działania słowa kluczowego this
- Brakujące odwołania w modułach ES
- Współdziałanie operacji importowania
- Importowanie plików JSON
- Korzystanie z modułów w TypeScripcie
- Rola kompilatora TypeScriptu
- Konfiguracja formatu wyjściowego modułu
- Składnia modułu wejściowego i generowanie danych wyjściowych
- Rozwiązywanie modułów
- Podsumowanie
Rozdział 3. Zdarzenia i funkcje wywołania zwrotnego
- Wzorzec wywołania zwrotnego
- Styl przekazywania kontynuacji
- Synchroniczny czy asynchroniczny?
- Konwencje funkcji wywołań zwrotnych w Node.js
- Wzorzec obserwatora
- Klasa EventEmitter
- Tworzenie i stosowanie egzemplarza EventEmitter
- Propagowanie błędów
- Określenie dowolnego obiektu jako obserwowalnego
- Ryzyko wycieku pamięci
- Zdarzenia synchroniczne i asynchroniczne
- Emiter zdarzeń a funkcje wywołania zwrotnego
- Łączenie wywołań zwrotnych i zdarzeń
- Podsumowanie
- Ćwiczenia
Rozdział 4. Asynchroniczne wzorce kontroli przepływu z użyciem funkcji wywołań zwrotnych
- Wyzwania związane z programowaniem asynchronicznym
- Tworzenie prostego robota indeksującego strony internetowe
- Piekło wywołań zwrotnych
- Najlepsze praktyki dotyczące wywołań zwrotnych
- Dyscyplina wywołań zwrotnych
- Stosowanie dyscypliny wywołań zwrotnych
- Wzorce przepływu sterowania
- Wykonywanie sekwencyjne
- Wykonywanie współbieżne
- Ograniczone wykonywanie współbieżne
- Podsumowanie
- Ćwiczenia
Rozdział 5. Asynchroniczne wzorce kontroli przepływu z użyciem obietnic i konstrukcji async/await
- Obietnice
- Czym jest obietnica?
- Specyfikacja Promises/A+ i obiekty podobne do obietnic
- API obietnicy
- Tworzenie obietnicy
- Uproszczenie asynchroniczności
- Wykonywanie sekwencyjne i iteracja
- Wykonywanie współbieżne
- Ograniczone wykonywanie współbieżne
- Obietnice leniwe
- Słowa kluczowe async i await
- Funkcje asynchroniczne i wyrażenie await
- Wyrażenie await na najwyższym poziomie
- Obsługa błędów podczas stosowania konstrukcji async/await
- Wykonywanie sekwencyjne i iteracja
- Wykonywanie współbieżne
- Ograniczone wykonywanie współbieżne
- Problem z nieskończonymi łańcuchami rekurencyjnego rozwiązywania obietnic
- Podsumowanie
- Ćwiczenia
Rozdział 6. Programowanie ze strumieniami
- Znaczenie strumieni
- Buforowanie i strumieniowanie
- Efektywność przestrzenna
- Efektywność czasowa
- Komponowalność
- Wprowadzenie do strumieni
- Anatomia strumieni
- Strumienie klasy Readable
- Strumienie klasy Writable
- Strumienie klasy Duplex
- Strumienie klasy Transform
- Strumienie klasy PassThrough
- Strumienie leniwe
- Łączenie strumieni za pomocą potoków
- Asynchroniczne wzorce kontroli przepływu z wykorzystaniem strumieni
- Wykonywanie sekwencyjne
- Wykonywanie współbieżne bez ustalonej kolejności
- Ograniczone wykonywanie współbieżne bez ustalonej kolejności
- Uporządkowane wykonywanie współbieżne
- Wzorce potokowania
- Łączenie strumieni
- Rozwidlanie strumieni
- Scalanie strumieni
- Multipleksowanie i demultipleksowanie
- Narzędzia dla strumieni odczytu
- Mapowanie i przekształcanie
- Filtrowanie i iteracja
- Wyszukiwanie i ocena
- Ograniczanie i redukowanie
- Strumienie internetowe
- Konwersja strumieni Node.js na strumienie internetowe
- Konwersja strumieni internetowych na strumienie Node.js
- Narzędzia dla konsumentów strumieni
- Podsumowanie
- Ćwiczenia
Rozdział 7. Konstrukcyjne wzorce projektowe
- Fabryka
- Rozdzielenie tworzenia obiektów od ich implementacji
- Mechanizm stosowania hermetyzacji
- Tworzenie prostego profilera kodu
- W ekosystemie Node.js
- Budowniczy
- Implementacja konstruktora obiektów URL
- W ekosystemie Node.js
- Konstruktor ujawniający
- Tworzenie niemodyfikowalnego bufora
- W ekosystemie Node.js
- Singleton
- Łączenie modułów
- Zależności pojedynczego egzemplarza
- Wstrzykiwanie zależności
- Podsumowanie
- Ćwiczenia
Rozdział 8. Strukturalne wzorce projektowe
- Pełnomocnik
- Metody implementacji pełnomocnika
- Tworzenie strumienia zapisującego do dziennika
- Obserwator zmian i Pełnomocnik
- W ekosystemie Node.js
- Dekorator
- Techniki implementacji dekoratorów
- Dekorowanie bazy danych Level
- W ekosystemie Node.js
- Propozycja dekoratorów w specyfikacji ECMAScript
- Granica między wzorcami projektowymi Pełnomocnik i Dekorator
- Adapter
- Korzystanie z biblioteki Level przez API systemu plików
- W ekosystemie Node.js
- Podsumowanie
- Ćwiczenia
Rozdział 9. Behawioralne wzorce projektowe
- Strategia
- Obiekty konfiguracyjne o wielu formatach
- W ekosystemie Node.js
- Stan
- Implementacja prostego gniazda odpornego na awarie
- W ekosystemie Node.js
- Szablon
- Szablon menedżera konfiguracji
- W ekosystemie Node.js
- Iterator
- Protokół iteratora
- Protokół iterowalny
- Iteratory i obiekty iterowalne jako natywny interfejs JavaScriptu
- Implementacja protokołu iterowalnego dla iteratorów
- Narzędzia do iteracji
- Generatory
- Iteratory asynchroniczne
- Generatory asynchroniczne
- Asynchroniczne iteratory i strumienie Node.js
- Narzędzia do iteracji asynchronicznej
- W ekosystemie Node.js
- Pośrednik
- Oprogramowanie pośredniczące w Expressie
- Wzorzec projektowy Pośrednik
- Tworzenie frameworka oprogramowania pośredniczącego dla ZeroMQ
- W ekosystemie Node.js
- Polecenie
- Wzorzec Zadanie
- Bardziej złożone polecenie
- W ekosystemie Node.js
- Podsumowanie
- Ćwiczenia
Rozdział 10. Testowanie - wzorce i najlepsze praktyki
- Wprowadzenie do testowania oprogramowania
- Definicje
- Rodzaje testów
- Piramida testów
- Tworzenie testów w Node.js
- Nasz pierwszy test jednostkowy
- Program uruchamiający testy w Node.js
- Nasz pierwszy test z użyciem narzędzia testowego Node.js
- Organizacja testów
- Sparametryzowane przypadki testowe
- Wskazówki i podpowiedzi dla testera
- Narzędzie do raportowania testów
- Tworzenie testów jednostkowych
- Testowanie kodu asynchronicznego
- Imitacja
- Tworzenie testów integracyjnych
- Testowanie z wykorzystaniem lokalnej bazy danych
- Testowanie aplikacji internetowej
- Tworzenie testów E2E
- Struktura aplikacji
- Przepływ użytkownika
- Automatyzacja przeglądarki internetowej
- Tworzenie testu E2E przy użyciu Playwrighta
- Podsumowanie
- Ćwiczenia
Rozdział 11. Receptury zaawansowane
- Obsługa komponentów inicjalizowanych asynchronicznie
- Problem z komponentami inicjalizowanymi asynchronicznie
- Lokalna kontrola inicjalizacji
- Opóźnione uruchomienie
- Kolejki przed inicjalizacją
- W ekosystemie Node.js
- Asynchroniczne przetwarzanie wsadowe i buforowanie
- Czym jest asynchroniczne przetwarzanie wsadowe?
- Optymalne buforowanie żądań asynchronicznych
- Serwer API bez pamięci podręcznej i grupowania zapytań
- Przetwarzanie wsadowe i buforowanie z użyciem obietnic
- Anulowanie operacji asynchronicznych
- Podstawowa receptura na tworzenie funkcji, które można anulować
- Opakowywanie wywołań asynchronicznych
- Funkcje asynchroniczne z możliwością anulowania przy użyciu AbortController
- Wykonywanie zadań obciążających procesor
- Rozwiązywanie problemu sumy podzbioru
- Przeplatanie z użyciem setImmediate
- Korzystanie z procesów zewnętrznych
- Korzystanie z wątków roboczych
- Uruchamianie w środowisku produkcyjnym zadań obciążających procesor
- Podsumowanie
- Ćwiczenia
Rozdział 12. Skalowalność i wzorce architektoniczne
- Wprowadzenie do skalowania aplikacji
- Skalowanie aplikacji utworzonych z użyciem Node.js
- Trzy wymiary skalowalności
- Klonowanie i równoważenie obciążenia
- Moduł cluster
- Obsługa komunikacji stanowej
- Skalowanie z użyciem odwrotnego serwera proxy
- Dynamiczne skalowanie poziome
- Równoważenie obciążenia między węzłami równorzędnymi
- Skalowanie aplikacji przy użyciu kontenerów
- Dekompozycja złożonych aplikacji
- Architektura monolityczna
- Architektura mikrousług
- Wzorce integracji w architekturze mikrousług
- Podsumowanie
- Ćwiczenia
Rozdział 13. Wzorce komunikacji i integracji
- Podstawy systemu komunikacji
- Wzorce jednokierunkowe i wzorce żądanie-odpowiedź
- Typy komunikatów
- Semantyki dostarczania typu push i pull
- Kolejki, strumienie i asynchroniczne przekazywanie komunikatów
- Komunikacja bezpośrednia lub z pośrednikiem
- Wzorzec Publikowanie-Subskrybowanie
- Tworzenie minimalistycznej aplikacji czatu działającego w czasie rzeczywistym
- Wykorzystanie Redisa jako prostego brokera komunikatów
- Wzorzec pub-sub typu P2P z użyciem ZeroMQ
- Niezawodne dostarczanie komunikatu za pomocą kolejek
- Niezawodne przesyłanie komunikatów za pomocą strumieni
- Wzorce dystrybucji zadań
- Wzorce fan-out i fan-in w ZeroMQ
- Potoki i konkurujące konsumenty w protokole AMQP
- Rozdzielanie zadań za pomocą strumieni Redisa
- Wzorce żądań i odpowiedzi
- Identyfikator korelacji
- Adres zwrotny
- Podsumowanie
- Ćwiczenia
Skorowidz
| Kategoria: | Programowanie |
| Zabezpieczenie: |
Watermark
|
| ISBN: | 978-83-289-3648-5 |
| Rozmiar pliku: | 8,3 MB |