Poprawa wydajności Drupala 9 dzięki modułom, najlepszym praktykom kodowania i właściwej konfiguracji serwera

Opublikowany: 2020-08-11

Możesz mieć najpotężniejszy serwer z pamięcią w stosach, ale czy to wystarczy, aby zapewnić wysoką wydajność witryny? Dzięki Drupalowi skalowanie witryny w zgodzie z rozwojem firmy jest łatwe. Właściwie to jest to, w czym Drupal jest świetny. Jednak nagły wzrost liczby stron internetowych, funkcjonalności i treści może wpłynąć na jego wydajność. Drupal 9 jest już dostępny i jest przygotowany do podjęcia tego wyzwania jak zawodowiec! Pochodzi z dobroci Drupala 8 bez starego kodu, który czyni go szczuplejszym, czystszym i potężniejszym. Dowiedz się więcej o technikach poprawy wydajności Drupal 9, które absolutnie działają.

Wydajność strony internetowej to klucz do sukcesu w biznesie. Wolno ładujące się strony internetowe mogą być szkodliwe dla firm. Strona internetowa o lepszej wydajności pomaga w lepszym SEO, poprawia współczynnik konwersji odwiedzających i zapewnia lepsze wrażenia użytkownika odwiedzającym, co wspólnie pomaga w rozwoju firmy. Podczas gdy wolno ładujące się strony internetowe działają zupełnie odwrotnie i stają się przyczyną niepowodzenia biznesowego.

drupal-9-optymalizacja-wydajności


Na wydajność strony wpływa wiele rzeczy. Niektórzy z nich są:

• Twój dostawca usług (hosting, DNS itp.)
• Liczba żądań do serwera
• Problemy techniczne lub złe praktyki programistyczne
• Technika buforowania
• Niewłaściwa konfiguracja serwera
• Ciężkie pliki graficzne i wideo

Drupal 9 Core i niestandardowe moduły zwiększające wydajność

W Drupal 9 dostępnych jest wiele dodatkowych modułów, które mogą być pomocne w poprawie wydajności Twojej witryny. Przestrzegając pewnych praktyk kodowania i przy odpowiedniej konfiguracji serwera, możesz radykalnie poprawić wydajność witryny.

Moduły podstawowe

• Duża rura

Moduł Drupal Big Pipe przyspiesza pracę bez dodatkowej konfiguracji. Jest dostarczany z rdzeniem Drupal. Poprawia postrzeganą wydajność frontendu, korzystając z metadanych buforowania, a tym samym poprawiając potok renderowania.

• Wewnętrzna dynamiczna pamięć podręczna stron

Ten moduł Drupal 9 pomaga buforować zawartość dynamiczną. Jest pomocny zarówno dla anonimowych, jak i uwierzytelnionych użytkowników. Ten moduł nie jest dostępny w Drupal 7. Strony żądane przez użytkowników są przechowywane przy pierwszym żądaniu i mogą być ponownie użyte, gdy ta sama strona zostanie ponownie zażądana.


• Wewnętrzna pamięć podręczna stron

Moduł pamięci podręcznej strony wewnętrznej pomaga w buforowaniu danych dla anonimowych użytkowników. Ten moduł jest dostępny w rdzeniu i jest domyślnie włączony.

Ścieżka konfiguracji: admin/config/development/performance

Tutaj możesz wyczyścić pamięć podręczną, ustawić maksymalny wiek pamięci podręcznej przeglądarki i proxy oraz włączyć / wyłączyć ustawienia agregacji.

Moduł Advagg
Wewnętrzny moduł pamięci podręcznej stron

Wniesione moduły

  • Zaawansowana agregacja CSS/JS

    Moduł Advagg jest dostarczany z wieloma innymi podmodułami, takimi jak -
  • AdvAgg Cdn: Pomaga ładować zasoby (CSS/JS) z publicznego CDN
  • AdvAgg CSS/JS Validator: Weryfikuje plik CSS i JS
  • AdvAgg External Minifier: minimalizuje JavaScript i/lub CSS za pomocą minifikatora wiersza poleceń.
  • AdvAgg Minify CSS: pomaga w minifikacji plików css za pomocą minifikatora stron trzecich
  • AdvAgg Minify JS : Pomaga w minifikacji plików js z mi innych firm
  • Modyfikator AdvAgg : Umożliwia zmianę tablicy CSS i JS. (Może mieć problem ze zgodnością)
  • AdvAgg Wzmacniacz kompatybilności starego Internet Explorera

Ścieżka konfiguracji: /admin/config/development/performance/advagg

Ten moduł obsługuje również techniki kompresji plików, takie jak gzip i brotli . Moduł ten pomaga w zmniejszeniu liczby żądań http, co znacznie poprawia wydajność witryny.

  • Blazy

Moduł Drupal 9 Blazy zapewnia leniwe ładowanie obrazów, aby zaoszczędzić przepustowość i uniknąć wyższych współczynników odrzuceń. Lazy loading to technika, która ładuje obrazy tylko w widocznym dla użytkownika obszarze. Ta technika wieloserwisowa oszczędza czas i dane.

Ścieżka konfiguracji: /admin/config/media/blazy

Tutaj możesz włączyć/wyłączyć Blazy, skonfigurować efekt zastępczy, a także ustawić przesunięcie, które określa, jak wcześnie obraz będzie widoczny dla użytkownika.

Blazy moduł

Blazy moduł
  • CDN

Moduł Drupal 9 CDN pomaga w łatwej integracji CDN z serwisami Drupal. Pomaga obsługiwać zawartość statyczną z serwera CDN w celu zwiększenia szybkości dostarczania treści. Poza tym ten moduł jest również łatwy w konfiguracji.

Ścieżka konfiguracji: /admin/config/services/cdn

Moduł CDN
Ustawienia modułu CDN

Tutaj możesz włączyć/wyłączyć CDN, podać adres URL mapowania i zaznaczyć/odznaczyć zawsze buforowanie plików.

Poprawa wydajności dzięki najlepszym praktykom kodowania

  • Używanie isset() zamiast array_key_exist()

Metoda isset() jest znacznie szybsza niż array_key_exist() . Główna różnica między isset a array_key_exist polega na tym, że array_key_exists z pewnością powie ci, czy klucz istnieje w tablicy. Natomiast isset zwróci true tylko wtedy, gdy klucz/zmienna istnieje i nie ma wartości NULL. Aby uzyskać więcej informacji na ten temat, sprawdź tutaj w celu porównania testów.

  • Korzystanie z entityQuery()

entityQuery() zależy od kontrolera pamięci masowej, który obsługuje tworzenie i wykonywanie zapytania dla odpowiedniej pamięci encji. Ma to tę zaletę, że każde zapytanie uruchamiane za pomocą obiektu entityQuery() jest niezależne od pamięci. Tak więc, jeśli piszesz dodany moduł lub pracujesz na stronie internetowej, w której w przyszłości może być konieczne przeniesienie do alternatywnego magazynu encji, wszystkie Twoje zapytania będą w przejrzysty sposób korzystać z nowego zaplecza magazynu bez konieczności wprowadzania jakichkolwiek zmian. entityQuery() może być używane niezależnie od tego, czy piszesz zapytania ręcznie w niestandardowym kodzie, czy za pośrednictwem backendu entityQuery() Views.

  • Używanie metody loadMultiple() zamiast pętli

Jeśli masz 10 nidów (identyfikatory węzłów) i przeglądasz je w pętli, aby załadować każdy węzeł, wykonujesz 10 zapytań do bazy danych. Podczas używania loadMultiple() jest to zredukowane do jednego zapytania do bazy danych.

  • Buforowanie

Korzystając z Cache API w Drupal 9 możesz buforować renderer, tablicę odpowiedzi lub obiekt. W Drupal 9 dostępne są trzy metadane buforowania renderowalności.

  1. Tagi pamięci podręcznej

    Tagi Cache służą do buforowania danych, gdy zależy to od encji lub konfiguracji Drupala. Składnia do tego to cache-item:identifier np. węzeł:5, użytkownik:3.
  2. Kontekst pamięci podręcznej

    Składnia:
    • okresy oddzielają rodziców od dzieci
    • wielokrotnie nazwany kontekst pamięci podręcznej wskazuje, że można określić parametr; w użyciu: dodaj dwukropek
    Przykład: użytkownik.role, użytkownik.role:anonimowy itp.
  3. Maksymalny wiek pamięci podręcznej

Cache max-age służy do buforowania danych wrażliwych na czas.

  • Pracownik kolejki / Batch

Aby przetworzyć duże ilości danych bez przekroczenia limitu czasu php, można użyć przetwarzania wsadowego lub kolejki. Pozycje w kolejce pracownik uruchamia się tylko wtedy, gdy cron działa i działa przez krótki czas. Istnieją dwa rodzaje pracowników kolejki: niezawodni i zawodni. Niezawodny pracownik kolejki zapewnia, że ​​element w kolejce zostanie uruchomiony co najmniej raz, podczas gdy nierzetelna kolejka może pominąć elementy z powodu awarii pamięci lub innej przerwy. Przetwarzanie wsadowe przetwarza elementy, aż wszystkie elementy skończą się w partii, uwarunkowane tak, aby podczas przetwarzania nie wystąpił błąd bez oczekiwania na uruchomienie cron.

Poprawa wydajności dzięki lepszej konfiguracji serwera

  • Używanie Nginx zamiast Apache

Nginx i Apache są szeroko stosowanymi serwerami WWW. Nginx ma przewagę nad Apache w teście wydajności. Jest również szybszy i bardziej wydajny niż Apache. Nginx działa 2,5 razy szybciej niż Apache zgodnie z testem porównawczym obejmującym do 1000 jednoczesnych połączeń.

  • HTTP/2.0 przez HTTP/1.1

HTTP/2.0 obsługuje multipleksowanie, czyli w przeciwieństwie do HTTP/1.1, który blokuje inne zasoby. Jeśli nie można załadować jednego zasobu, protokół HTTP/2.0 używa połączenia TCP do wysyłania wielu strumieni danych jednocześnie. HTTP/2.0 wykorzystuje zaawansowane techniki kompresji nagłówków niż HTTP/1.1

 Konfiguracja Nginx dla HTTP/2.0
serwer {
    słuchaj 443 ssl http2; //Ustawienia http2
    ssl_certificate serwer.crt;
    ssl_certificate_key serwer.key;
}
  • Udostępnianie skompresowanych treści

 Kompresowanie odpowiedzi często znacznie zmniejsza rozmiar przesyłanych danych. Jednak ponieważ kompresja ma miejsce w czasie wykonywania, może to również spowodować znaczne obciążenie przetwarzania, co może negatywnie wpłynąć na wydajność. 
Konfiguracja Nginx do obsługi skompresowanej zawartości:
serwer {
    gzip włączony;
    gzip_static włączony;    
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxy dowolna;
    gzip_włącz;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_wersja 1.1;    
    ...
}
  • MariaDB zamiast MySQL

mariaDB ma lepszą szybkość w porównaniu do MySQL. Zapewnia szybsze buforowanie i indeksowanie niż MySQL. W tym przypadku jest prawie o 24% szybszy niż MySQL. Istnieją inne kluczowe wskaźniki, w których mariaDB jest lepsza niż MySQL. Dlatego MariaDb jest preferowana w stosunku do MySQL pod względem wydajności.

  • CDN

CDN oznacza sieć dostarczania treści. Jest to klaster serwerów rozsianych po całym świecie (czyli punkty obecności lub punkty PoP), które współpracują ze sobą, aby szybciej dostarczać treści. CDN przechowuje buforowaną wersję zawartości witryny i dostarcza zawartość z najbliższego dostępnego serwera. Niektórzy z popularnych dostawców CDN to Cloudflare, Amazon cloudfront, Google Cloud CDN itp.