Udostępnianie nowoczesnego kodu w nowoczesnych przeglądarkach w celu szybszego wczytywania stron

Tworzenie witryn, które działają dobrze we wszystkich popularnych przeglądarkach, to podstawowe założenie otwartego ekosystemu internetowego. Wiąże się to jednak z dodatkowymi pracami nad zapewnieniem, a Ty kod jest obsługiwany w każdej przeglądarce, na którą zamierzasz kierować reklamy. Jeśli jeśli chcesz używać nowych funkcji języka JavaScript, musisz przetranspilować te funkcji do zgodnych wstecznie formatów w przeglądarkach, które jeszcze nie obsługują .

Babel to najczęściej używane narzędzie do kompilacji kodu. zawierający nowszą składnię kodu, która jest stosowana w różnych przeglądarkach i środowiskach takich jak Node.js. W tym przewodniku przyjęto założenie, że korzystasz z Babel, musisz wykonać instrukcje konfiguracji, uwzględnić go w aplikacji, jeśli jeszcze nie zostało to zrobione. Wybierz webpack w Build Systems, jeśli używasz pakietu internetowego jako pakietu modułów w swojej aplikacji.

Aby transpilować za pomocą Babel tylko to, co jest potrzebne użytkownikom, muszą:

  1. Określ przeglądarki, na które chcesz kierować reklamy.
  2. Używaj interfejsu @babel/preset-env z odpowiednimi ustawieniami kierowania przeglądarki.
  3. Użyj operatora <script type="module">, aby przestać wysyłać transpilowany kod do przeglądarek, które go nie potrzebują.

Określ, na które przeglądarki chcesz kierować reklamy

Zanim zaczniesz modyfikować sposób transpilacji kodu aplikacji, określić, które przeglądarki uzyskują dostęp do aplikacji. Analiza przeglądarek używanych obecnie przez użytkowników, jak również tych, na które chcesz kierować reklamy, świadomej decyzji.

Użyj parametru @babel/preset-env

Transpilacja kodu zazwyczaj skutkuje plikiem o rozmiarze większym niż ze względu na ich pierwotną formę. Przez zminimalizowanie ilości przesyłanych treści może zmniejszyć rozmiar pakietów, by poprawić wydajność strony.

Zamiast dodawać konkretne wtyczki, które wybiórczo skompilują wybrany język używanych funkcji, Babel udostępnia szereg gotowych ustawień, razem. Użyj parametru @babel/preset-env. aby uwzględniać wyłącznie przekształcenia i elementy polyfill wymagane w przeglądarkach, w których chcesz je zastosować. kierowania reklam.

Uwzględnij @babel/preset-env w tablicy presets w Babel plik konfiguracji, .babelrc:

{
 "presets": [
   [
     "@babel/preset-env",
     {
       "targets": ">0.25%"
     }
   ]
 ]
}

W polu targets określ, które wersje przeglądarek chcesz uwzględnić dodając odpowiednie zapytanie w polu browsers. @babel/preset-env integruje się z listą przeglądarek, czyli konfiguracją open source współdzieloną przez różne narzędzi kierowania na przeglądarki. Pełna lista zgodnych zapytań znajduje się w sekcji browserslist. Inną możliwością jest użycie pliku .browserslistrc do utworzenia listy środowisk na które chcesz kierować reklamy.

Wartość ">0.25%" informuje Babel, aby uwzględniał tylko przekształcenia niezbędne do obsługi przeglądarek, które stanowią ponad 0,25% wszystkich użytkowników na świecie i ich wykorzystaniu. Dzięki temu pakiet nie będzie zawierał zbędnych transpilowanych danych dla przeglądarek używanych przez niewielki odsetek użytkowników.

W większości przypadków jest to lepsze rozwiązanie niż Konfiguracja:

  "targets": "last 2 versions"

Wartość "last 2 versions" transpiluje Twój kod dla funkcji ostatnie 2 wersje każdej przeglądarki, Oznacza to, że obsługiwane są już wycofane przeglądarki, takie jak Internet Explorer. Może to niepotrzebnie zwiększyć rozmiar pakietu, jeśli nie oczekujesz tych zmian. przeglądarki, w których chcesz uzyskać dostęp do aplikacji.

Należy wybrać odpowiednią kombinację zapytań, aby tylko kierować reklamy na przeglądarki, które odpowiadają Twoim potrzebom.

Włącz nowoczesne poprawki błędów

@babel/preset-env grupuje wiele funkcji składni JavaScript w kolekcje oraz włącza/wyłącza się na podstawie określonych docelowych przeglądarek. Chociaż to się sprawdza, cała kolekcja funkcje składni ulegają zmianom, gdy w docelowej przeglądarce występuje błąd dotyczący tylko jednej funkcji. Często skutkuje to większą ilością przekształconego kodu, niż jest to konieczne.

Początkowo powstały jako osobne gotowe ustawienia. opcja poprawek błędów w projekcie @babel/preset-env rozwiązuje ten problem, konwertując nowoczesną składnię, która działa nieprawidłowo w niektórych przeglądarkach, na format najbliższy która nie działa w tych przeglądarkach. Efektem jest niemal identyczny nowoczesny kod wprowadzając niewielkie poprawki składni, które gwarantują zgodność we wszystkich przeglądarkach docelowych. Aby użyć upewnij się, że masz zainstalowaną wersję @babel/preset-env 7.10 lub nowszą, a następnie Usługę bugfixes na użytkownika true:

{
 "presets": [
   [
     "@babel/preset-env",
     {
       "bugfixes": true
     }
   ]
 ]
}

W Babel 8 opcja bugfixes jest domyślnie włączona.

Użyj konta <script type="module">

Moduły JavaScript, czyli moduły ES, są stosunkowo nową funkcją obsługiwaną wszystkich popularnych przeglądarek. Możesz użyć modułów do tworzenia skryptów, które można importować i eksportować z innych modułów, ale możesz użyj ich też w połączeniu z zasadą @babel/preset-env, by kierować reklamy tylko na przeglądarki, które obsługują .

Zamiast pytać o konkretne wersje przeglądarek lub udział w rynku, rozważ określając "esmodules" : true w polu targets pliku .babelrc.

{
   "presets":[
      [
         "@babel/preset-env",
         {
            "targets":{
               "esmodules": true
            }
         }
      ]
   ]
}

Wiele nowszych funkcji ECMAScript skompilowanych z użyciem Babel jest już obsługiwanych w środowiskach obsługujących moduły JavaScriptu. Wykonując tę czynność, uprościć proces i upewnić się, że używany jest tylko kod po transpilacji. w przeglądarkach, które jej potrzebują.

Przeglądarki obsługujące moduły ignorują skrypty z atrybutem nomodule. Natomiast przeglądarki, które nie obsługują modułów, ignorują elementy skryptu z tagami type="module" Oznacza to, że możesz dołączyć moduł oraz skompilowaną kreację zastępczą.

Optymalnym rozwiązaniem są te dwa skrypty wersji aplikacji:

  <script type="module" src="main.mjs"></script>
  <script nomodule src="compiled.js" defer></script>

Przeglądarki, które obsługują moduły, pobierają i uruchamiają tag main.mjs, ignorując compiled.js. Przeglądarki, które nie obsługują modułów, działają odwrotnie.

Jeśli używasz pakietu internetowego, możesz ustawić w konfiguracjach różne wartości docelowe dla dwóch oddzielne wersje Twojej aplikacji:

  • Wersja przeznaczona tylko dla przeglądarek obsługujących moduły.
  • Wersja zawierająca skompilowany skrypt, który działa w każdej starszej wersji przeglądarki. W takim przypadku plik jest większy, ponieważ transpilacja musi obsługiwać większą liczbę przeglądarek.
.

Z podziękowaniem Connorem Clarka i Jasonowi Millerowi za ich opinie.