Optymalizacje w Next.js - Jak przyspieszyć swoją stronę?

Blog image - Optymalizacje w Next.js - Jak przyspieszyć swoją stronę?

18/12/2023

12 min

Bartosz Lewandowski

Optymalizacje w Next.js - Jak przyspieszyć swoją stronę?

18/12/2023

12 min

Bartosz Lewandowski

Blog image - Optymalizacje w Next.js - Jak przyspieszyć swoją stronę?

Spis Treści

  1. Optymalizacja zdjęć
  2. Optymalizacja czcionek
  3. Optymalizacja skryptów
  4. SEO
  5. Lazy Loading
  6. Third Party Libraries
  7. Podsumowanie

Przeczytaj także: Pobieranie danych w Next.js - Przewodnik dla początkujących

W dzisiejszym dynamicznie rozwijającym się świecie technologii internetowych, optymalizacja zasobów w aplikacjach webowych jest niezbędna dla zapewnienia płynnego i efektywnego działania. W kontekście frameworka Next.js, optymalizacja ta nabiera szczególnego znaczenia, zwłaszcza gdy mowa o elementach takich jak obrazy, czcionki, skrypty, seo, statyczne zasoby, ładowanie na żądanie (lazy loading) oraz integracja z zewnętrznymi usługami (third party). W niniejszym wpisie na blogu zagłębimy się w świat optymalizacji tych kluczowych komponentów aplikacji Next.js. Omówimy, jak skutecznie zarządzać obrazami i czcionkami, aby przyspieszyć ładowanie strony, jak optymalizować skrypty i seo dla lepszej wydajności, jak efektywnie wykorzystywać statyczne zasoby, a także jak inteligentnie implementować funkcję lazy loading i integrować usługi zewnętrzne. To podejście nie tylko poprawi wydajność aplikacji, ale także zaoferuje użytkownikom końcowym znacznie lepsze doświadczenie podczas korzystania ze strony.

Optymalizacja zdjęć

Obrazy stanowią znaczącą część obciążenia typowej strony internetowej, a ich odpowiednia optymalizacja może znacząco wpłynąć na wydajność strony, zwłaszcza na wskaźnik Largest Contentful Paint (LCP).Komponent Image w Next.js rozszerza standardowy element HTML <img> o funkcje automatycznej optymalizacji obrazów, obejmujące:

  1. Optymalizację rozmiaru: Automatyczne dostosowanie rozmiarów obrazów do różnych urządzeń, z wykorzystaniem nowoczesnych formatów takich jak WebP i AVIF.
  2. Stabilność wizualna: Automatyczne zapobieganie przesunięciom układu podczas ładowania obrazów.
  3. Szybsze ładowanie stron: Obrazy są ładowane tylko wtedy, gdy znajdą się w obszarze widzenia użytkownika, dzięki natywnemu leniwemu ładowaniu w przeglądarce, z opcjonalnymi miejscami zastępczymi.
  4. Elastyczność zasobów: Możliwość zmiany rozmiaru obrazów na żądanie, nawet dla obrazów przechowywanych na zdalnych serwerach.

Jak korzystać z Image w Next.js

Po zaimportowaniu Image z Next.js, można określić źródło obrazu (zarówno lokalne, jak i zdalne).

Lokalne obrazy: Importuj pliki obrazów (np. .jpg, .png, .webp). Next.js automatycznie określi szerokość i wysokość obrazu, co pomoże zapobiec przesunięciom układu podczas ładowania obrazu.

import Image from "next/image";
import userPicture from "./me.png";
 
export default function Page() {
	return <Image src={userPicture} alt="Picture of the author" />;
}

Zdalne obrazy: W przypadku zdalnych obrazów, należy ręcznie podać szerokość, wysokość i opcjonalnie właściwości rozmycia. Next.js nie ma dostępu do zdalnych plików podczas procesu budowania, dlatego wymagane są te dodatkowe informacje.

import Image from "next/image";
 
export default function Page() {
	return (
		<Image
			src="<https://images.ctfassets.net/userPicture.png>"
			alt="Picture of the author"
			width={500}
			height={500}
		/>
	);
}

Bezpieczeństwo

Aby bezpiecznie optymalizować obrazy, należy zdefiniować listę obsługiwanych wzorców URL w next.config.js, aby zapobiec nieautoryzowanemu wykorzystaniu. Na przykład, można zezwolić tylko na obrazy z określonej strony **images.ctfassets.net

/** @type {import('next').NextConfig} */ 
const nextConfig = {
	images: {
		remotePatterns: [{ protocol: "https", hostname: "images.ctfassets.net", pathname: "/**" }],
	},
};
module.exports = nextConfig;

Priorytetyzacja

Obrazy, które będą elementem LCP na stronie, powinny mieć ustawioną właściwość priority. Pozwala to Next.js na specjalne priorytetowe traktowanie obrazu podczas ładowania.

<Image src={image} alt="" priority />

Rozmiar obrazów

Aby uniknąć przesunięć układu związanych z obrazami, zawsze należy określać ich rozmiar. Można to zrobić na kilka sposobów:

  1. Automatycznie, przy użyciu statycznego importu.
  2. Poprzez dodanie właściwości width i height.
  3. Domyślnie, poprzez użycie właściwości fill, która sprawia, że obraz rozszerza się, aby wypełnić element nadrzędny.

Optymalizacja czcionek

W kontekście tworzenia stron internetowych, czcionki często odgrywają kluczową rolę nie tylko w estetyce, ale także w wydajności i prywatności strony. Biblioteka next/font od Next.js wprowadza nowatorskie rozwiązanie w zarządzaniu czcionkami, oferując automatyczną optymalizację zarówno standardowych, jak i niestandardowych czcionek. Co ważniejsze, eliminuje ona zewnętrzne żądania sieciowe, co znacząco przekłada się na lepszą ochronę prywatności i szybkość ładowania stron.

Kluczowe funkcje next/font

Automatyczne samo-hostowanie każdego pliku czcionki: Pozwala na optymalne ładowanie czcionek internetowych bez przesunięć układu, dzięki wykorzystaniu właściwości CSS size-adjust.

Łatwe wykorzystanie Google Fonts z uwzględnieniem wydajności i prywatności: Pliki CSS i czcionek są pobierane w czasie kompilacji i samo-hostowane razem z resztą statycznych zasobów. Nie są wysyłane żądania do Google przez przeglądarkę.

Wykorzystanie Google Fonts

Aby skorzystać z Google Fonts:Zaimportuj wybraną czcionkę z next/font/google jako funkcję. Zaleca się używanie czcionek zmiennych (variable fonts) dla najlepszej wydajności i elastyczności.

import { Inter } from "next/font/google";
const inter = Inter({ subsets: ["latin"], display: "swap" });
 
export default function Layout({ children }: { children: React.ReactNode }) {
	return (
		<html lang="en" className={inter.className}>
			      <body>{children}</body>    
		</html>
	);
}

Jeśli nie używać variable font musisz określić wagę:

import { Roboto } from "next/font/google";
const roboto = Roboto({ weight: "400", subsets: ["latin"], display: "swap" });
 
export default function Layout({ children }: { children: React.ReactNode }) {
	return (
		<html lang="en" className={roboto.className}>
			      <body>{children}</body>    
		</html>
	);
}

Możesz określić wiele rozmariów( weight), używając tablicy.

Lokalne czcionki

Aby korzystać z lokalnych czcionek:Importuj next/font/local i określ ścieżkę do lokalnego pliku czcionki. Przykład użycia lokalnej czcionki:

import localFont from "next/font/local";
const myFont = localFont({ src: "./my-font.woff2", display: "swap" });

Jeśli chcesz użyć wielu plików dla jednej rodziny czcionek, src może być tablicą.

import localFont from "next/font/local";
const openSans = localFont({
	src: [
		{ path: "./OpenSans-Regular.woff2", weight: "400", style: "normal" },
		{ path: "./OpenSans-Italic.woff2", weight: "400", style: "italic" },
		{ path: "./OpenSans-Bold.woff2", weight: "700", style: "normal" },
		{ path: "./OpenSans-BoldItalic.woff2", weight: "700", style: "italic" },
	],
});

Optymalizacja skryptów

W Next.js, istotną częścią optymalizacji stron internetowych jest efektywne zarządzanie skryptami, szczególnie tymi pochodzącymi od trzecich stron. Biblioteka next/scripts umożliwia ładowanie skryptów na różnych poziomach aplikacji, zapewniając jednocześnie, że skrypty są ładowane efektywnie i nie wpływają negatywnie na wydajność strony.

Skrypty w layout.tsx

Dla wszystkich stronAby załadować skrypt trzeciej strony dla wszystkich tras, importuj next/script i dołącz skrypt bezpośrednio w głównym układzie (root layout):

import Script from "next/script";
 
export default function RootLayout({ children }) {
	return (
		<html lang="en">
			      <body>{children}</body>
 
			<Script src="<https://example.com/script.js>" />
 
		</html>
	);
}
 

Ten skrypt zostanie załadowany i wykonany, gdy jakakolwiek trasa w aplikacji zostanie dostępna.

Dla konkretnej grupy stron, bądź pojedynczej strony Aby załadować skrypt trzeciej strony dla konkretnej trasy, importuj next/script i dołącz skrypt bezpośrednio w komponencie układu (layout):

import Script from "next/script";
 
export default function DashboardLayout({ children }) {
	return (
		<>
			<section>{children}</section>      
			<Script src="<https://example.com/script.js>" />
 
		</>
	);
}
 

Skrypt trzeciej strony jest pobierany, gdy użytkownik uzyskuje dostęp do trasy folderu (np. blog/page.js) lub dowolnej trasy zagnieżdżonej (np. blog/settings/page.js). Next.js zapewnia, że skrypt zostanie załadowany tylko raz, nawet gdy użytkownik nawiguje między wieloma trasami w tym samym układzie.

Strategie Ładowania

Możesz dostosować sposób ładowania skryptów za pomocą właściwości strategy:

  1. beforeInteractive: Ładuj skrypt przed jakimkolwiek kodem Next.js i przed hydracją strony.
  2. afterInteractive (domyślnie): Ładuj skrypt wcześnie, ale po pewnej hydracji strony.
  3. lazyOnload: Ładuj skrypt później, podczas bezczynności przeglądarki.
  4. worker (eksperymentalne): Ładuj skrypt w web workerze.

Skrypty, które używają strategii worker, są wykonywane w web workerze z Partytown, co może poprawić wydajność strony. Aby skorzystać z tej funkcji, należy włączyć flagę nextScriptWorkers w next.config.js.

Skrypty Wewnętrzne

Skrypty wewnętrzne, czyli te nie załadowane z zewnętrznego pliku, są również obsługiwane przez komponent Script. Mogą być napisane przez umieszczenie JavaScriptu w nawiasach klamrowych lub za pomocą właściwości dangerouslySetInnerHTML.

Zalecenia

Optymalne zarządzanie skryptami stron trzecich w aplikacjach Next.js jest kluczowe dla zachowania wysokiej wydajności i dobrej jakości użytkowania. Niewłaściwe lub nadmierne wykorzystanie skryptów może prowadzić do spowolnienia ładowania stron, zwiększenia czasu interakcji i obniżenia ogólnej satysfakcji użytkownika. Oto kilka kluczowych zaleceń, które pomogą Ci uniknąć tych problemów i efektywnie wdrożyć skrypty stron trzecich:

  1. Ogranicz użycie skryptów stron trzecich: Włączaj skrypty stron trzecich tylko tam, gdzie są absolutnie niezbędne. Unikaj dodawania zbędnych skryptów, które mogą nie wnosić wartości dodanej do Twojej aplikacji.
  2. Ładuj skrypty właściwie: Wykorzystaj strategie ładowania dostarczone przez Next.js, takie jak beforeInteractive, afterInteractive, i lazyOnload, aby optymalizować czas ładowania i wydajność skryptów. Wybierz strategię, która najlepiej pasuje do natury skryptu i wymagań strony.
  3. Używaj Web Workers dla Ccężkich skryptów: Dla skryptów, które wymagają intensywnych obliczeń lub mogą wpływać na wydajność głównego wątku, rozważ wykorzystanie strategii worker. Pamiętaj jednak, że jest to rozwiązanie eksperymentalne i wymaga dodatkowej konfiguracji.
  4. Monitoruj wydajność: Regularnie monitoruj wydajność strony, szczególnie po dodaniu nowych skryptów. Narzędzia takie jak Google PageSpeed Insights mogą być pomocne w ocenie wpływu skryptów na wydajność.
  5. Zoptymalizuj i minifikuj Skrypty: Gdzie to możliwe, używaj zminifikowanych wersji skryptów. Minifikacja redukuje rozmiar pliku, co może przyczynić się do szybszego ładowania.
  6. Zachowaj bezpieczeństwo: Upewnij się, że skrypty, które importujesz, pochodzą z zaufanych źródeł. Niebezpieczne lub złośliwe skrypty mogą narazić Twoją stronę i jej użytkowników na ryzyko.
  7. Testuj w różnych środowiskach: Testuj działanie skryptów w różnych przeglądarkach i urządzeniach, aby upewnić się, że zachowują one spójność i nie wpływają negatywnie na doświadczenia użytkowników na różnorodnych platformach.
  8. Dokładna dokumentacja: Dokumentuj wszelkie skrypty stron trzecich, które są wykorzystywane w aplikacji, wraz z informacjami o ich przeznaczeniu, sposobie działania i ewentualnych zależnościach. Ułatwi to zarządzanie i aktualizacje w przyszłości.

Przestrzeganie tych zaleceń pomoże w utrzymaniu zdrowego balansu między funkcjonalnością a wydajnością w aplikacjach Next.js, zapewniając jednocześnie pozytywne doświadczenia dla użytkowników.

SEO

Next.js oferuje zaawansowane API do zarządzania metadanymi aplikacji, co jest kluczowe dla poprawy SEO (Search Engine Optimization) i lepszej udostępnialności w sieci. Metadane, takie jak tagi meta i link w elemencie head HTML, są istotne dla wyszukiwarek i mediów społecznościowych, a Next.js ułatwia ich efektywne zarządzanie.

Dostępne są dwie metody implementacji metadanych w Next.js

Metadane konfiguracyjne: Możesz eksportować obiekt metadanych jako statyczny element lub użyć funkcji generateMetadata w celu dynamicznego generowania metadanych. Funkcję tę umieszczasz w pliku layout.js lub page.js.

Metadane plikowe: Ta metoda polega na dodawaniu statycznych lub dynamicznie tworzonych specjalnych plików do poszczególnych segmentów ścieżek w aplikacji.W obu przypadkach, Next.js automatycznie generuje odpowiednie elementy <head> dla stron. Możesz także tworzyć dynamiczne obrazy OG (Open Graph) przy użyciu konstruktora ImageResponse.

Statyczne Metadane

Aby zdefiniować statyczne metadane, eksportuj obiekt Metadata z pliku layout.js lub statycznego page.js.

import type { Metadata } from "next";
export const metadata: Metadata = { title: "...", description: "..." };
export default function Page() {}

Dynamiczne Metadane

Użyj funkcji generateMetadata do pobierania metadanych wymagających dynamicznych wartości.

import type { Metadata, ResolvingMetadata } from "next";
export async function generateMetadata({ params, searchParams }, parent): Promise<Metadata> {}
export default function Page({ params, searchParams }) {}

Uwagi

  1. Statyczne i dynamiczne metadane przez generateMetadata są obsługiwane tylko w komponentach serwerowych (Server Components).
  2. Żądania fetch są automatycznie memoizowane dla tych samych danych w różnych kontekstach.
  3. Next.js czeka na zakończenie pobierania danych w generateMetadata przed przesyłaniem UI do klienta.

Metadane na podstawie plików

Specjalne pliki dostępne dla metadanych to między innymi favicon.ico, apple-icon.jpg, icon.jpg, opengraph-image.jpg, twitter-image.jpg, robots.txt, sitemap.xml. Można je wykorzystać do statycznych metadanych lub generować.

JSON-LD

JSON-LD (JavaScript Object Notation for Linked Data) jest formatem danych strukturalnych, który odgrywa kluczową rolę w SEO (Search Engine Optimization). Używany jest do przekazywania informacji o strukturze i zawartości strony internetowej w formacie, który łatwo interpretują wyszukiwarki, takie jak Google. Pozwala to na bardziej efektywne indeksowanie i prezentowanie treści w wynikach wyszukiwania.Zastosowanie JSON-LD:

  1. Poprawa SEO: JSON-LD pozwala na precyzyjne przekazanie wyszukiwarkom informacji o zawartości strony, co może znacznie poprawić jej widoczność i ranking w wynikach wyszukiwania.
  2. Bogate fragmenty (Rich Snippets): Użycie JSON-LD umożliwia tworzenie "bogatych fragmentów", które wzbogacają wyświetlane wyniki wyszukiwania o dodatkowe informacje, takie jak oceny, ceny, dostępność produktów, itp.
  3. Strukturalne opisywania zawartości: Można opisywać różnorodne typy zawartości, takie jak artykuły, wydarzenia, produkty, osoby, organizacje, przepisy kulinarne i wiele innych.

**Implementacja JSON-LD w Next.js:**W Next.js, JSON-LD jest zazwyczaj implementowany poprzez umieszczenie odpowiednich skryptów JSON-LD w tagu <script> w komponencie reprezentującym strukturę strony (takim jak layout.js lub page.js). Przykładowo:

export default function ProductPage({ product }) {
	const jsonLd = {
		"@context": "<https://schema.org>",
		"@type": "Product",
		name: product.name,
		image: product.image,
		description: product.description,
	};
	return (
		<section>
 
			<script
				type="application/ld+json"
				dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
			/>
			      {}    
		</section>
	);
}

Ważne Aspekty JSON-LD:

  1. Typowanie Danych: JSON-LD pozwala na precyzyjne określenie typów danych (np. Produkt, Artykuł, Wydarzenie), co pomaga wyszukiwarkom w zrozumieniu kontekstu zawartości.
  2. Walidacja: Istnieją narzędzia do walidacji kodu JSON-LD, takie jak Google Rich Results Test, które pomagają sprawdzić, czy dane są poprawnie sformatowane i zrozumiałe dla wyszukiwarek.
  3. Kompatybilność i Elastyczność: JSON-LD jest kompatybilny z różnymi formatami danych i może być łatwo zintegrowany z różnymi technologiami webowymi, w tym z aplikacjami Next.js.

Lazy Loading

Leniwe ładowanie w Next.js jest techniką, która pomaga poprawić wydajność inicjalnego ładowania aplikacji poprzez zmniejszenie ilości JavaScriptu potrzebnego do renderowania trasy. Pozwala to na ładowania komponentów klienckich (Client Components) i importowanych bibliotek, tylko wtedy, gdy są faktycznie potrzebne. Przykładowo, można opóźnić ładowanie modala do momentu, gdy użytkownik kliknie, aby go otworzyć.

Metody implementacji Lazy Loading

Używanie dynamicznych importów z next/dynamic: next/dynamic to kompozyt React.lazy() i Suspense, który zachowuje się podobnie zarówno w katalogach aplikacji, jak i stron, umożliwiając stopniową migrację.

Przykłady:

  1. Importowanie komponentów klienckich:
import dynamic from 'next/dynamic'const ComponentA = dynamic(() => import('../components/A'))
  1. Wyłączenie SSR dla komponentu klienckiego:
const ComponentC = dynamic(() => import('../components/C'), { ssr: false })
  1. Importowanie komponentów serwerowych:
const ServerComponent = dynamic(() => import('../components/ServerComponent'))
  1. Używanie React.lazy() z Suspense: Alternatywną metodą jest stosowanie React.lazy() w połączeniu z Suspense.

Ładowanie Zewnętrznych Bibliotek:

import { useState } from "react";
const books = [
	"The Great Gatsby",
	"To Kill a Mockingbird",
	"1984",
	"Pride and Prejudice",
	"The Catcher in the Rye",
];
export default function BookSearchPage() {
	const [searchResults, setSearchResults] = useState([]);
	return (
		<div>
 
			<input
				type="text"
				placeholder="Search for a book"
				onChange={async (e) => {
					const searchQuery = e.currentTarget.value;
					if (searchQuery.length > 0) {
						const _ = (await import("lodash")).default;
						const results = _.filter(books, (book) =>
							_.includes(book.toLowerCase(), searchQuery.toLowerCase()),
						);
						setSearchResults(results);
					} else {
						setSearchResults([]);
					}
				}}
			/>
 
			<ul>
 
				{searchResults.map((book, index) => (
					<li key={index}>{book}</li>
				))}
 
			</ul>
 
		</div>
	);
}

Dodawanie własnego komponentu:

import dynamic from "next/dynamic";
const Loading = dynamic(() => import("../components/Loading"), {
	loading: () => <p>Loading...</p>,
});

Kluczowe aspekty

  1. Optymalizacja wydajności: Leniwe ładowanie zmniejsza ilość kodu JavaScript koniecznego do załadowania przy pierwszym wejściu na stronę, co przyspiesza czas ładowania.
  2. Załadowanie na żądanie: Komponenty i biblioteki są ładowane tylko wtedy, gdy są potrzebne, co jest szczególnie przydatne w przypadku elementów interaktywnych, takich jak dialogi czy modale.
  3. Wsparcie dla komponentów serwerowych i klienckich: Technika ta dotyczy głównie komponentów klienckich, ale można ją również stosować do komponentów serwerowych.
  4. Elastyczność w implementacji: Możliwość wyboru między next/dynamic a React.lazy() daje deweloperom elastyczność w stosowaniu leniwego ładowania zgodnie z potrzebami ich aplikacji.

Third Party Libraries

Biblioteka @next/third-parties w Next.js dostarcza zestaw komponentów i narzędzi, które ułatwiają i optymalizują ładowanie popularnych bibliotek stron trzecich w aplikacjach Next.js, poprawiając wydajność i doświadczenie deweloperów.Dostępne integracje w bibliotece @next/third-parties w Next.js obejmują:

  1. Google Tag Manager: Umożliwia integrację z Google Tag Manager w celu zarządzania tagami na stronie.
  2. Google Maps Embed: Zapewnia łatwe osadzanie map Google bezpośrednio na stronie.
  3. YouTube Embed: Umożliwia osadzanie filmów z YouTube na stronie, wykorzystując zoptymalizowaną metodę ładowania.

Podsumowanie

Podsumowując, w Next.js istotne jest efektywne zarządzanie obrazami, czcionkami, skryptami oraz optymalizacja SEO, lazy loading i integracja z zewnętrznymi bibliotekami. Użycie komponentu Image zapewnia automatyczną optymalizację obrazów, zmniejszając czas ładowania strony. Zarządzanie czcionkami, w tym samo-hostowanie, zwiększa wydajność i prywatność. Efektywne ładowanie skryptów, w tym zewnętrznych, przyczynia się do lepszej wydajności strony. Optymalizacja SEO i użycie JSON-LD są kluczowe dla lepszego rankingu w wyszukiwarkach. Lazy loading poprawia wydajność inicjalnego ładowania, a integracja z zewnętrznymi bibliotekami ułatwia pracę z popularnymi narzędziami.

Temat opanowany? Super! W takim razie zapraszam Cię do odkrywania kolejnego ważnego tematu w następnym wpisie - "Stylowanie w Next.js - Przewodnik dla początkujących", który z pewnością wzbogaci Twoją wiedzę i umiejętności w tworzeniu atrakcyjnych, responsywnych interfejsów użytkownika.

Często zadawane pytania

  1. Jak optymalizować obrazy w Next.js? Użyj komponentu Image do automatycznej optymalizacji obrazów. Dostosowuje on rozmiar obrazów do różnych urządzeń i obsługuje nowoczesne formaty, jak WebP, zapewniając szybsze ładowanie stron.
  2. Czy mogę używać niestandardowych czcionek w Next.js? Tak, z pomocą biblioteki next/font możesz łatwo integrować niestandardowe czcionki, zarówno lokalne, jak i z Google Fonts, zautomatyzowanym samo-hostowaniem i optymalizacją wydajności.
  3. Jak zarządzać skryptami stron trzecich w Next.js? Użyj next/script do efektywnego ładowania skryptów stron trzecich. Możesz kontrolować, kiedy i jak skrypty są ładowane, używając różnych strategii ładowania, takich jak beforeInteractive i lazyOnload.
  4. Jak poprawić SEO w Next.js? Skorzystaj z zaawansowanych funkcji Next.js do zarządzania metadanymi i tagami SEO. Możesz używać statycznych lub dynamicznych metadanych oraz implementować JSON-LD do ulepszenia strukturalnego opisu zawartości strony.
  5. Czym jest lazy loading w Next.js i jak go używać? Leniwe ładowanie (lazy loading) pozwala na wczytywanie komponentów i bibliotek tylko wtedy, gdy są potrzebne, co zwiększa wydajność początkowego ładowania. Można go zaimplementować za pomocą next/dynamic lub połączenia React.lazy() z Suspense.
  6. Jak integrować biblioteki stron trzecich w Next.js? Wykorzystaj @next/third-parties, który oferuje zestaw komponentów ułatwiających integrację popularnych bibliotek stron trzecich, jak Google Maps czy YouTube, poprawiając wydajność i doświadczenie użytkownika.
  7. Co zrobić, aby obrazy nie powodowały przesunięć układu w Next.js? Zawsze określaj rozmiary obrazów przy użyciu komponentu Image, korzystając z właściwości width i height lub używając opcji fill do elastycznego dopasowania obrazów do kontenera. Zapobiegnie to przesunięciom układu podczas ładowania obrazów.
Bartosz Lewandowski

Bartosz Lewandowski

Next.js/Shopify Developer

Newsletter

Obserwuj nas