Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 62 additions & 14 deletions src/content/docs/pl/concepts/islands.mdx
Original file line number Diff line number Diff line change
@@ -1,31 +1,42 @@
---
title: Wyspy Astro
description: Wyspy Astro (znane również jako Wyspy Komponentów) to wzorzec architektury webowej zapoczątkowany przez Astro. Termin "architektura wysp" został po raz pierwszy użyty przez Katie Sylor-Miller, architektkę frontendu w Etsy, w 2019 roku, a następnie rozwinięty przez Jasona Millera, twórcę Preact.
title: Architektura wysp
description: Dowiedz się, w jaki sposób architektura wysp Astro pomaga w utrzymaniu szybkości stron.
i18nReady: true
---

import IslandsDiagram from '~/components/IslandsDiagram.astro';
import ReadMore from '~/components/ReadMore.astro';

Framework Astro zapoczątkował i spopularyzował architekturę frontendu zwaną **Wyspy.** Architektura Wysp zapewnia lepszą wydajność frontendu, pomagając uniknąć monolitycznych wzorców JavaScript i automatycznie usuwając ze strony cały niepotrzebny JavaScript. Deweloperzy mogą nadal korzystać ze swoich ulubionych komponentów UI i frameworków z Astro, jednocześnie czerpiąc te korzyści.
Astro pomogło zapoczątkować i spopularyzować nowy wzorzec architektury frontendu zwaną **Architekturą Wysp.** Działa ona poprzez renderowanie większości twojej strony do szybkiego, statycznego HTML-a z mniejszymi "wyspami" JavaScriptu, dodanymi, gdy na stronie jest potrzebna interaktywność lub personalizacja (np. karuzela zdjęć). Pomaga to uniknąć monolitycznych payloadów JavaScriptu, które spowalniają responsywność wielu innych, nowoczesnych frameworków webowych JavaScript.

## Krótka historia

Termin "wyspa komponentów" został po raz pierwszy użyty przez [Katie Sylor-Miller](https://sylormiller.com/), architektkę frontendu w Etsy, w 2019 roku. Idea ta została następnie rozwinięta i udokumentowana w [tym poście](https://jasonformat.com/islands-architecture/) przez Jasona Millera, twórcę Preact, 11 sierpnia 2020 roku.

> Ogólna idea architektury "Wyspy" jest zwodniczo prosta: renderuj strony HTML na serwerze i wstrzykuj placeholdery lub sloty wokół wysoce dynamicznych regionów [...], które mogą być następnie "nawodnione" po stronie klienta w małe, samodzielne widżety, ponownie wykorzystując ich początkowo wyrenderowany HTML po stronie serwera. \
> Ogólna idea architektury "Wysp" jest zwodniczo prosta: renderuj strony HTML na serwerze i wstrzykuj placeholdery lub sloty wokół wysoce dynamicznych regionów [...], które mogą być następnie "nawodnione" po stronie klienta w małe, samodzielne widżety, ponownie wykorzystując ich początkowo wyrenderowany HTML po stronie serwera.
> — Jason Miller, Twórca Preact

Technika, na której opiera się ten wzorzec architektoniczny, znana jest również jako **częściowa** lub **selektywna hydracja.**

W przeciwieństwie do tego, większość frameworków webowych opartych na JavaScripcie hydruje i renderuje całą stronę internetową jako jedną dużą aplikację JavaScript (znaną również jako aplikacja jednostronicowa lub SPA). SPA zapewniają prostotę i moc, ale cierpią z powodu problemów z wydajnością ładowania strony ze względu na intensywne wykorzystanie JavaScript po stronie klienta.
W przeciwieństwie do tego, większość frameworków webowych opartych na JavaScripcie hydruje i renderuje całą stronę internetową jako jedną dużą aplikację JavaScript (znaną również jako aplikacja jednostronicowa lub SPA). SPA zapewniają prostotę i moc, ale cierpią z powodu problemów z wydajnością ładowania strony ze względu na intensywne wykorzystanie JavaScriptu po stronie klienta.

SPA mają swoje miejsce, nawet [osadzone wewnątrz strony Astro](/pl/guides/migrate-to-astro/from-create-react-app/). Jednak SPA brakuje wrodzonej zdolności do selektywnej i strategicznej hydracji, co czyni je w dzisiejszych czasach zbyt ciężkim wyborem dla większości projektów w sieci.

Astro zyskało popularność jako pierwszy powszechny framework webowy JavaScript z wbudowaną selektywną hydracją, wykorzystując wzorzec wysp komponentów po raz pierwszy nazwany w ten sposób przez Sylor-Miller.
Astro zyskało popularność jako pierwszy powszechny framework webowy JavaScript z wbudowaną selektywną hydracją, wykorzystując wzorzec wysp komponentów po raz pierwszy nazwany w ten sposób przez Sylor-Miller. Od tego czasu rozszerzyliśmy i ewoluowaliśmy pracę Sylor-Miller, co pomogło zainspirować podobne podejście komponentów-wysp do treści dynamicznie renderowanych przez serwer.

## Czym jest wyspa?

**W Astro "wyspa" odnosi się do każdego interaktywnego komponentu UI na stronie.** Wyobraź sobie wyspę jako interaktywny widżet unoszący się w morzu statycznego, lekkiego HTML renderowanego po stronie serwera.
W Astro "wyspa" to ulepszony komponent UI na stronie HTML, która w innym przypadku byłaby statyczna.

[**Wyspa kliencka**](#wyspy-klienckie) jest interaktywnym JavaScriptowym komponentem UI, do której hydracji dochodzi oddzielnie od reszty strony. [**Wyspa serwerowa**](#wyspy-serwerowe) to natomiast komponent UI, który renderuje dynamiczną zawartość na serwerze niezależnie od reszty strony.

Obie wyspy uruchamiają kosztowne lub wolniejsze procesy w sposób niezależny, na bazie komponentu, dla zoptymalizowanego ładowania stron.

## Komponenty wysp

Komponenty Astro to klocki konstrukcyjne szablonu twojej strony. Są renderowane do statycznego HTML-a bez wykonywania po stronie klienta.

Wyobraź sobie wyspę jako interaktywny widżet unoszący się w morzu statycznego, lekkiego HTML renderowanego po stronie serwera. Wyspy serwerowe mogą zostać dodane do spersonalizowanych lub dynamicznych elementów renderowanych przez serwer, takich jak zdjęcie profilowe zalogowanego użytkownika.

<IslandsDiagram>
<Fragment slot="headerApp">Nagłówek (interaktywna wyspa)</Fragment>
Expand All @@ -49,36 +60,73 @@ Chociaż większość deweloperów będzie trzymać się tylko jednego framework
- Stopniowe konwertowanie istniejącej strony na inny framework bez przestojów.
:::

## Tworzenie wyspy
## Wyspy klienckie

Domyślnie Astro automatycznie renderuje każdy komponent UI do samego HTML i CSS, **automatycznie usuwając cały JavaScript po stronie klienta.**

```astro title="src/pages/index.astro"
<MyReactComponent />
```

Może to brzmieć restrykcyjnie, ale to zachowanie utrzymuje strony Astro szybkimi domyślnie i chroni deweloperów przed przypadkowym wysyłaniem niepotrzebnego lub niechcianego JavaScript, który mógłby spowolnić ich stronę internetową.
Może to brzmieć restrykcyjnie, ale to zachowanie utrzymuje strony Astro domyślnie szybkimi i chroni deweloperów przed przypadkowym wysyłaniem niepotrzebnego lub niechcianego JavaScriptu, który mógłby spowolnić ich stronę internetową.

Przekształcenie dowolnego statycznego komponentu UI w interaktywną wyspę wymaga tylko dyrektywy `client:*`. Astro następnie automatycznie buduje i pakuje Twój JavaScript po stronie klienta dla zoptymalizowanej wydajności.

```astro title="src/pages/index.astro" ins="client:load"
<!-- Ten komponent jest teraz interaktywny na stronie!
Reszta Twojej strony pozostaje statyczna. -->
Reszta twojej strony pozostaje statyczna. -->
<MyReactComponent client:load />
```

Dzięki wyspom, JavaScript po stronie klienta jest ładowany tylko dla jawnych interaktywnych komponentów, które oznaczysz za pomocą dyrektyw `client:*`.

A ponieważ interakcja jest konfigurowana na poziomie komponentu, możesz obsłużyć różne priorytety ładowania dla każdego komponentu w oparciu o jego wykorzystanie. Na przykład, `client:idle` mówi komponentowi, aby ładował się, gdy przeglądarka staje się bezczynna, a `client:visible` mówi komponentowi, aby ładował się tylko wtedy, gdy wchodzi w obszar widoczności.

## Jakie są korzyści z Wysp?
<h3>Korzyści wysp klienckich</h3>

Najbardziej oczywistą korzyścią z budowania z Wyspami Astro jest wydajność: większość Twojej strony internetowej jest konwertowana na szybki, statyczny HTML, a JavaScript jest ładowany tylko dla pojedynczych komponentów, które go potrzebują. JavaScript jest jednym z najwolniejszych zasobów, które możesz załadować w przeliczeniu na bajt, więc każdy bajt się liczy.
Najbardziej oczywistą korzyścią z budowania z Wyspami Astro jest wydajność: większość twojej strony internetowej jest konwertowana na szybki, statyczny HTML, a JavaScript jest ładowany tylko dla pojedynczych komponentów, które go potrzebują. JavaScript jest jednym z najwolniejszych zasobów do załadowania w przeliczeniu na bajt, więc każdy bajt się liczy.

Kolejną korzyścią jest równoległe ładowanie. W przykładowej ilustracji powyżej, nisko priorytetowa wyspa "karuzela obrazów" nie musi blokować wysoko priorytetowej wyspy "Nagłówek". Obie ładują się równolegle i hydrują w izolacji, co oznacza, że nagłówek staje się interaktywny natychmiast, bez konieczności czekania na cięższą karuzelę niżej na stronie.
Kolejną korzyścią jest równoległe ładowanie. W przykładowej ilustracji powyżej, nisko priorytetowa wyspa "karuzeli obrazów" nie musi blokować wysoko priorytetowej wyspy "Nagłówka". Obie ładują się równolegle i hydrują w izolacji, co oznacza, że nagłówek staje się interaktywny natychmiast, bez konieczności czekania na cięższą karuzelę niżej na stronie.

Co więcej, możesz powiedzieć Astro dokładnie jak i kiedy renderować każdy komponent. Jeśli ta karuzela obrazów jest naprawdę kosztowna do załadowania, możesz dołączyć specjalną [dyrektywę klienta](/pl/reference/directives-reference/#client-directives), która mówi Astro, aby ładować karuzelę tylko wtedy, gdy staje się widoczna na stronie. Jeśli użytkownik nigdy jej nie zobaczy, nigdy się nie załaduje.

W Astro to ty jako deweloper musisz wyraźnie powiedzieć Astro, które komponenty na stronie muszą również działać w przeglądarce. Astro będzie hydrować tylko to, co jest dokładnie potrzebne na stronie i pozostawi resztę Twojej strony jako statyczny HTML.
W Astro to ty jako deweloper musisz wyraźnie powiedzieć Astro, które komponenty na stronie muszą również działać w przeglądarce. Astro będzie hydrować tylko to, co jest dokładnie potrzebne na stronie i pozostawi resztę twojej strony jako statyczny HTML.

**Wyspy są tajemnicą sukcesu Astro w zakresie domyślnej wydajności!**

<ReadMore>Przeczytaj więcej na temat [korzystania z komponentów frameworków JavaScript](/pl/guides/framework-components/) w twoim projekcie.</ReadMore>

## Wyspy serwerowe

Wyspy serwerowe są sposobem na przeniesienie kosztownego lub powolnego kodu po stronie serwera z daleka od głównego procesu renderowania, ułatwiając łączenie wysokowydajnego, statycznego HTML-a i dynamicznych komponentów wygenerowanych przez serwer.

Dodaj [dyrektywę `server:defer`](/pl/reference/directives-reference/#server-directives) do dowolnego komponentu Astro na twojej stronie, aby zamienić go w wyspę serwerową:

```astro title="src/pages/index.astro" "server:defer"
---
import Avatar from "../components/Avatar.astro";
---
<Avatar server:defer />
```

To rozbija twoją stronę w mniejsze obszary treści renderowanych przez serwer, a każda z nich ładuje równolegle.

Główna treść twojej strony może zostać wyrenderowana natychmiastowo z treściami zastępczymi, takimi jak generyczne awatary, dopóki treść twojej wyspy nie będzie dostępna. Z wyspami serwerowymi posiadanie małych komponentów ze spersonalizowaną treścią nie opóźnia renderowania strony, która w innym przypadku byłaby statyczna.

Ten wzorzec renderowania został zaprojektowany jako przenośny. Nie polega on na żadnej infrastrukturze serwerowej, więc będzie działać z każdym hostem, od serwera Node.js w kontenerze Dockera, do wybranego przez ciebie dostawcy usług bezserwerowych.

<h3>Korzyści wysp serwerowych</h3>

Jedną z korzyści wysp serwerowych jest możliwość renderowania bardziej dynamicznych części twojej strony na bieżąco. To umożliwia bardziej agresywne buforowanie zewnętrznej powłoki i głównej zawartości, co przekłada się na szybsze działanie.

Kolejną korzyścią jest zapewnienie świetnych wrażeń odwiedzającym. Wyspy serwerowe są zoptymalizowane i ładują się szybko, często nawet zanim przeglądarka "namaluje" stronę. Jednak w krótkim czasie, który zajmuje twoim wyspom renderowanie, możesz wyświetlić dostosowane treści zastępcze oraz uniknąć jakichkolwiek zmian w układzie strony.

Przykładem strony, która ma korzyści z wysp serwerowych Astro może być strona sklepu e-commerce. Mimo to, że główne treści podstron produktowych nie zmieniają się często, te strony posiadają zazwyczaj jakieś dynamiczne części:

- Awatar użytkownika w nagłówku.
- Specjalne oferty i wyprzedaże produktu.
- Recenzje użytkowników.

Dzięki korzystaniu z wysp serwerowych dla tych elementów, twoi odwiedzający zobaczą najważniejszą część strony, czyli twój produkt, natychmiastowo. Generyczne awatary, wskaźniki ładowania oraz ogłoszenia sklepowe mogą być wyświetlane z treściami zastępczymi, dopóki części spersonalizowane nie są dostępne.

<ReadMore>Przeczytaj więcej na temat [używania wysp serwerowych](/pl/guides/server-islands/) w twoim projekcie.</ReadMore>