← Wszystkie wpisy

Poradniki

„Wykonaj JS tylko raz” — skrypty bez efektów ubocznych na SPA

Na stronach typu aplikacja jednostronicowa (SPA) JustZix ponownie uruchamia JavaScript zestawu po każdej zmianie adresu — żeby obrobić świeżo wyrenderowany widok. Dla większości skryptów to dobrze. Ale dla skryptów z efektami globalnymi prowadzi to do kumulacji. Nowa opcja „Wykonaj JS tylko raz” rozwiązuje ten problem.

Problem: skrypt uruchamiany w kółko

SPA zmienia treść bez przeładowania dokumentu. JustZix wykrywa taką nawigację i odpala JS zestawu od nowa, żeby reguła zadziałała na nowym widoku. Jeśli jednak skrypt dodaje listener zdarzeń, zakłada interwał (setInterval) albo „opakowuje” funkcję strony (na przykład window.fetch czy dataLayer.push), każde re-uruchomienie dokłada kolejną kopię. Po kilku przejściach masz pięć identycznych listenerów, pięć równoległych interwałów i pięciokrotnie zawiniętą funkcję.

Rozwiązanie: checkbox „Wykonaj JS tylko raz”

W zakładce JavaScript edytora zestawu jest teraz pole „Wykonaj JS tylko raz” (domyślnie wyłączone — nic się nie zmienia w istniejących zestawach). Zaznaczone — JS zestawu wykona się jeden raz na żywot dokumentu. Nawigacja SPA, zmiana #hash i przycisk Wstecz już go nie uruchomią ponownie. Pełne przeładowanie strony zawsze daje świeży start.

Kiedy zaznaczyć

Włącz „Wykonaj JS tylko raz” dla skryptów, które:

Kiedy zostawić wyłączone

Zostaw opcję wyłączoną dla skryptów, które mają reagować na każdy podwidok SPA — na przykład takich, które za każdym razem szukają świeżo wyrenderowanych elementów i coś z nimi robią. Jeśli Twój skrypt jest idempotentny (bezpieczny przy wielokrotnym uruchomieniu), również nie musisz nic zmieniać.

Dobra praktyka: idempotentny kod

Niezależnie od tej opcji warto pisać skrypty odporne na ponowne uruchomienie. Prosty wzorzec to strażnik, który przerywa skrypt, jeśli już raz się wykonał:

// Strażnik: wykonaj logikę tylko raz na dokument
if (!window.__jzMojSkrypt) {
  window.__jzMojSkrypt = true;
  document.addEventListener('keydown', onKey);
}

Opcja „Wykonaj JS tylko raz” i strażnik w kodzie to dwie warstwy tej samej ochrony — możesz korzystać z obu naraz.

Zainstaluj JustZix i pisz skrypty, które działają na SPA bez kumulacji efektów ubocznych.

Oceń ten wpis

Brak ocen — oceń jako pierwszy.

Wypróbuj samodzielnie

Zainstaluj JustZix i wklej dowolny snippet z tego artykułu. Dwie minuty od zera do działającej reguły na wszystkich Twoich urządzeniach.

Pobierz JustZix

Funkcje · Jak to działa · Przykłady · Zastosowania