React Snap vs Snapshot

Logo React

W tym wpisie przedstawię moje doświadczenia z wtyczkami do Reacta o nazwach Snap oraz SnapShot.

Cel użycia wtyczek

Moim celem było dodanie dla strony na domenie wyremski.pl (jest ona postawiona na Reakcie) statycznych plików .html z kodem podstron, aby wyszukiwarki internetowe mogły je łatwiej przeanalizować i aby przyśpieszyć ładowanie podstron u użytkowników.

Do realizacji tego celu jest wiele wtyczek, ja skupiłem się na dwóch: Snap oraz Snapshot, z których tylko jedna spełniła moje oczekiwania.

Ich instalacja jest stosunkowo prosta. Oczywiście nie należy w jednym projekcie instalować obydwóch wtyczek naraz.

Instalacja React Snap

Dla React Snap należy wywołać polecenie w konsoli:

yarn add --dev react-snap

W pliku package.json dodać:

"scripts": {   "postbuild": "react-snap" }

I następnie zmienić w pliku src/index.js

import { hydrate, render } from "react-dom";
const rootElement = document.getElementById("root");
if (rootElement.hasChildNodes()) {
  hydrate(, rootElement);
 } else {
 render(, rootElement);
}

I to wszystko!

Instalacja React Snapshot

A teraz instalacja React Snapshot

npm i -D react-snapshot

Następnie w pliku package.json zmieniamy w „scripts”

"build": "react-scripts build && react-snapshot"

Oraz w pliku src/index.js zmieniamy:

import { render } from 'react-snapshot';
render(
 <App/> ,
 document.getElementById('root')
);

I to wszystko!

Po wywołaniu polecenia yarn build obydwie wtyczki wygenerują nam statyczne pliki .html dla podstron.

Różnice między wtyczkami

Snapshot generuje dla ścieżki, np. /kontakt plik kontakt.html, dla /en/contact plik /en/contact.html
Przez to w htaccess należy dodać przekierowania, aby przeglądarka otworzyła plik z rozszerzeniem .html
Natomiast Snap tworzy katalogi i w nich umieszcza pliki .index.html czyli np. dla ścieżki /kontakt wygeneruje /kontakt/index.html a dla /en/contact wygeneruje /en/contact/index.html
Dzięki czemu nie musimy nić dodawać w .htaccess

Część linków do podstron w moim serwisie jest ładowane z pliku JSON przez AJAX-a – mowa tutaj o spisie skryptów: wyremski.pl/skrypty
Niestety obydwie wtyczki ich nie widzą i należy dodać w ustawieniach listę ścieżek do nich.

Na podstronach skryptów zawartość danej strony jest ładowana przez AJAX-a i Snap bez problemu wygenerował pliki .html z ich zawartością, niestety Snapshot wygenerował te pliki bez treści pobranej przez AJAX-a przez co były praktycznie bezużyteczne.

Snap automatycznie wygenerował plik 404.html, w Snapshot musimy dodać do listy linków /404

Podsumowanie

W związku z powyższymi stwierdziłem że Snap jest po prostu lepszy od Snapshot i pozostał on w moim projekcie. A jakie wy macie doświadczenia? Podzielcie się w komentarzach!

Kod mojego portfolio znajduje się na githubie: https://github.com/kamilwyremski/wyremski.pl-2019