Przejdź do głównej zawartości

Wydajność

Replacer jest zaprojektowany tak, by był wystarczająco tani, aby działać na każdym requeście bez mierzalnego wpływu. Kilka rzeczy pomaga to utrzymać.

Definicje zmiennych są pobierane raz na request, z kluczem kanał sprzedaży + zakres. Kolejne skany treści w tym samym requeście korzystają z cache’owanych danych. Strona z 50 blokami CMS i 10 różnymi zmiennymi ładuje listę zmiennych tylko raz.

Zanim w ogóle zacznie się praca na ciągach, replacer:

  1. Sprawdza przełącznik pluginu dla bieżącego zakresu — jeśli wyłączony, wraca natychmiast.
  2. Skanuje treść w poszukiwaniu dosłownego znaku { — jeśli go nie ma, wraca natychmiast.
  3. Ładuje zmienne tylko wtedy, gdy jest przynajmniej jeden kandydujący placeholder.

Strony bez {...} praktycznie nic nie kosztują.

  • Długa treść z wieloma placeholderami. Każdy placeholder to lookup w hash-mapie — szybki, ale liniowy.
  • Zmienne zagnieżdżone. Każda referencja zagnieżdżona to kolejny lookup i replace. Trzymaj zagnieżdżenia płytkie (jeden poziom z założenia, patrz Zmienne zagnieżdżone).
  • Duże payloady CSS / JS per zmienna. Sama injekcja to stały koszt, ale ciężki blok CSS / JS trafia do HTML strony i przeglądarka za to płaci.
  • Używaj zakresów, aby lista zmiennych per zakres była krótka. Zmienna ograniczona do Category nie jest ładowana na żądaniach tylko CMS.
  • Ogranicz głębokość zagnieżdżenia — silnik i tak zatrzymuje się na jednym poziomie. Jeśli chcesz głębszego zagnieżdżenia, przebuduj zmienne.
  • Trzymaj CSS / JS małe. Kilka reguł i kilka linii kodu inicjalizującego to idealny stan.
  • Czyść cache po zmianach treści. Unieważnianie cache to najwolniejsza część cyklu — dodaj flush cache do redakcyjnego workflow.

Jeśli podejrzewasz, że plugin jest gorący na profilu:

  • Dodaj spany w Symfony Profiler / Blackfire wokół renderowania storefrontu strony przykładowej.
  • Porównaj z tą samą stroną, gdy podmiana w CMS jest wyłączona — różnica to wkład pluginu.
  • Reprodukuj w czystym środowisku przed optymalizacją; wiele „wolnych” przypadków to w rzeczywistości wolne renderowanie CMS, a nie podmiana.