Jak mogę poprawić wydajność mojej strony Drupal7? [Zamknięte]

10

Dla kogoś, kto jest nowy w Drupal, widzę, że na Drupal Caching dostępnych jest wiele zasobów, ale nie jestem pewien, którego z nich użyć.

Gokul NK
źródło
1
Możemy dyskutować, czy chcemy kanoniczne pytanie w tej sprawie w przypadku meta, ale nadal uważam, że jest ono zbyt ogólne. A ulepszenia wydajności mogą być bardzo zależne od kontekstu i nie można tego robić w próżni.
mpdonadio

Odpowiedzi:

26

Są to notatki z moich doświadczeń i mogą różnić się od doświadczeń innych. Używam głównie stosu LAMP i rozważałem to samo w swoich sugestiach.

Kciukowe zasady dotyczące buforowania, które generalnie przestrzegam.

  1. Przetwarzaj jednorazowo wiele razy.
  2. Korzystaj ze starych danych, jeśli to możliwe
  3. Rzadko usuwaj pamięć podręczną i utrzymuj ją bardzo konkretnie.
  4. Jeśli to możliwe, dokonuj zmian na najniższym poziomie stosu. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib i moduł niestandardowy.

Popraw wydajność strony Drupal (w kolejności rosnącej złożoności)

  1. Aktualizuj rdzeń, aktualizuj moduł i motywy. Tak, to ma znaczenie.

  2. Zainstaluj APC na swoim serwerze. (Przeniesiony na górę na podstawie sugestii Letharion)

  3. Buforowanie stron: admin / config / development / performance Różnica między minimalnym czasem życia bufora a wygasaniem stron buforowanych

  4. Buforowanie bloków https://drupal.org/project/blockcache_alter Opcje buforowania dla wszystkich bloków.
  5. Zbiorcze pliki javascript i css - Ulepszenia interfejsu użytkownika https://www.drupal.org/project/advagg
  6. Wyłącz niepotrzebne moduły. Każdy moduł zwiększa ilość kodu, który musi być dostępny do załadowania strony. Zwiększa także liczbę wyszukiwań. Możliwe jest użycie ogólnego modułu zamiast wielu modułów, które wykonują określone funkcje.
  7. Cache Views Views - Pamięć podręczna z uwzględnieniem zawartości dla wyświetleń https://www.drupal.org/project/views_content_cache
  8. Wyłącz rejestrowanie DB - użyj https://drupal.org/project/syslog_ng
  9. Zmniejsz liczbę błędów 404 - http://www.brokenlinkcheck.com/
  10. Szybkie odpowiedzi 404 - https://drupal.org/project/fast_404 - Spróbuj obsługiwać na poziomie serwera.
  11. Walidacje po stronie klienta - https://www.drupal.org/project/clientside_validation
  12. Kompresuj obraz - https://www.drupal.org/project/imageapi_optimize
  13. Leniwe ładowanie zdjęć - Nie ładuj niepotrzebnych obrazów - https://www.drupal.org/project/lazyloader
  14. Używaj arkuszy sprite - https://www.drupal.org/project/spritesheets

  15. Ustaw wartość minimalnego czasu życia pamięci podręcznej na wyższą liczbę i użyj modułów czyszczących pamięć podręczną, aby wyczyścić pamięci podręczne dla określonych stron - Ilekroć edytuję / aktualizuję węzeł, wszystkie pamięci podręczne stron dla anonimowego użytkownika są tracone

  16. Użyj modułu Devel do oglądania zapytań.
  17. Przepisz zapytania dotyczące wyświetleń / unikaj wyświetleń, jeśli jest to przesada.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Profilowanie i dostrajanie bazy danych - https://www.drupal.org/project/dbtuner
  21. Użyj Boost , nie Bootstrap DB, jeśli nie jest to wymagane. https://drupal.org/project/boost W przypadku większości małych i średnich witryn Zwiększenie jest wystarczająco dobre i może nie być potrzebne odwrotne proxy.
  22. Użyj CDN - https://www.drupal.org/project/cdn Jest łatwy w konfiguracji.
  23. Jeśli tabele pamięci podręcznej są ogromne, użyj Memcached - Jeśli możesz zainstalować memcached i ustawić dla niego pamięć RAM, nie jest to tak skomplikowane, jak się wydaje.
  24. Etagi - poprawnie skonfiguruj Etagi. https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Użyj odwrotnego serwera proxy - Lakier (przynajmniej dla zasobów). Bardzo pomaga, jeśli większość użytkowników jest anonimowa.
  26. Przesyłanie skompresowane - Włącz kompresję gzip
  27. Keep Alive - W miarę możliwości używaj połączeń trwałych.
  28. Progresywny JPEGS -
  29. CACHING IN CODE - Blog Eatona jest niesamowity. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Wdrożenie ocieplania pamięci podręcznej - https://www.drupal.org/project/cache_warmer - Ocieplenie pamięci podręcznej stron, zanim dotrze do nich użytkownik końcowy.
  31. Konfiguracja Master Slave DB - https://www.drupal.org/project/autoslave ułatwia konfigurację.
  32. Klastry baz danych - /programming/1163216/database-cluster-and-load-balancing
  33. Load Balancers - http://en.wikipedia.org/wiki/Load_balancing_(computing)
  34. Użyj heurystycznego ocieplania pamięci podręcznej - https://www.drupal.org/project/cache_graceful
  35. Buforowanie uwierzytelnionego użytkownika - https://www.drupal.org/project/authcache
Gokul NK
źródło
2
Doskonała odpowiedź, ale jedna rzecz, która mocno mnie wyróżnia, to to, że nie masz APC na szczycie. APC jest banalnie łatwy do zainstalowania, nie ma wad, a zyski mogą być naprawdę duże. Myślę, że powinien iść na górę. (Może z komentarzem, że nie jest potrzebny po PHP 5.5, ponieważ optymalizacja została w końcu zintegrowana)
Letharion
1
Może wspomnieć coś o najprostszych korzyściach z buforowania? Jeśli Twoja witryna wymaga głównie treści statycznych (strony są takie same dla wszystkich użytkowników, więc nie logujesz się), wówczas Varnish lub Boost zapewnia największe korzyści.
Dominic Woodman,
5

Warstwa bazy danych jest ważna. Omawiam niektóre jego części i podstawy w tej prezentacji http://goo.gl/30yi39

mikeytown2
źródło
Niesamowita prezentacja MikeyTown. Jesteś wydajność pro :)
Gokul NK
3

Jako uzupełnienie odpowiedzi Gokula oto sposób, w jaki pomyślałem o tym, co chcesz buforować w Drupal (nie uporządkowane według złożoności):

Buforowanie oznacza przyspieszenie powtarzanych czynności.

Wielkie powtarzające się działania związane z witryną Drupal to:

  • Dzwonienie na stronę internetową
  • Uruchamianie kodu PHP w celu zbudowania strony internetowej
  • Elementy PHP wywołujące z bazy danych

Buforowanie całej strony

Największe korzyści z buforowania można uzyskać dzięki znalezieniu sposobu buforowania całej strony bez uruchamiania kodu PHP lub wywoływania bazy danych.

Możesz to zrobić za pomocą Varnish lub Boost . Gdy użytkownik wywołuje stronę, zwraca jej kopię bez wykonywania obliczeń.

Nie zadziała to jednak, jeśli części strony będą musiały być inne (tj. Użytkownicy zalogują się, a ich nazwa pojawi się u góry).

Aby to zadziałało, musisz zajrzeć do Authcache.

Buforowanie PHP

Możesz buforować PHP za pomocą APC lub jeśli masz wersję 5.5 lub nowszą, wbudowana jest inna pamięć podręczna.

Odbywa się to po stronie serwera i oznacza, że ​​fragmenty kodu PHP zostaną zapamiętane. Buforujesz PHP dla Drupala, ale technicznie nie wchodzisz w interakcje z Drupalem.

Buforowanie bazy danych

Połączenia w celu pobrania informacji z bazy danych są drogie.

Najczęstszym mechanizmem buforowania bazy danych jest pamięć podręczna .

To buforuje obiekty bazy danych w pamięci RAM, więc zamiast wywoływać obiekt bazy danych na dysku twardym, po prostu wyciągasz go z pamięci RAM, która jest znacznie szybsza.

Dominic Woodman
źródło
1
Redis to również świetny sklep z pamięcią podręczną, przynajmniej z mojego doświadczenia porównywalny z memcache (chociaż memcache prawdopodobnie wygrywa z klastrowaniem)
Clive