Előfordul, hogy a Drupal alapú weboldalak - főleg fejlesztői gépen - kegyetlenül lassúak (10-30 sec) betöltődési idővel. Hogyan lehet gyorsítani a Drupal 8 / 9-et?
Mi az elfogadható?
Egy weboldal betöltődési sebessége elfogadható, ha legfeljebb 3-5 másodperc alatt töltődik be a hívástól függően. Ennél nagyobb betöltődési sebesség már SEO szempontból és a felhazsnálói élmény szempontjából sem megfelelő.
Mitől függ az oldal sebessége?
A sebesség növelése összetett dolog. Függ az alábbiaktól:
- Az a hardver, amin futtatjuk
- Az operációs rendszer, amin fut a szerver
- A PHP verziótól
- A Drupal beállításaitól
- A sminktől, ami a Drupal oldalon fut
- Az adatbázis típusától
- A Drupal beállításaitól
- És a felhasználó által használt eszköz
- Mobil telefon vagy asztali PC
- Mekkora a fogadó oldalon a sávszélesség
A fenti paraméterek közül csak azzal érdemes foglalkozni, amelyre van behatásunk, tehát a szerver
A hardver
A szerverek nyer teljesítményét - függetlenül attól, hogy milyen operációs rendszer és egyéb kiszolgáló szoftver fut rajtuk - olyan dolgok határozzák meg, amelyekra gyakran nincsen ráhatásunk. ennek megfelelően, ha mégis van, akkor az alábbiakat vegyük figyelembe:
- Memórai mérete és sebessége - legyen minnél több, de legalább annyi, hogy maximális terhelésnél is maradjon még fizikai memória. Otthoni fejlesztői gépen 16-32 GB RAM a minimum, éles szerveren amennyi belefér.
- A processzor sebessége, a magok száma - 4-16 Core. A fejlesztői gépen lehet olyan, amely terhelés hiányában lelassít, de az éles rendszereken ne spóroljunk ilyesmivel.
- Hálózati kapcsolat sebessége - 1 Gbit/sec. A fejlesztői gép általában localhoston működik. Ilyenkor ez nem releváns.
- Használj a webszerver az adatbázis szerver és a weboldalak tárolására SSD háttértárat. Az SSD-k olvasási sebessége majdnem a RAM olvasási sebességével egyezik meg. Az adatbázis fájlokat is tárolhatod SSD-n, mert az írási sebesség is nagyobb, mint a HDD-k esetén, de az SSD "romlik" a technológiából következően, ezért az SSd-kre nem illik írni. Az adatbázis legyen másk HDD-n és az adatbázisszerverben legyen elég nagy cache.
Operációs rendszer
Olyan operációs rendszert érdemes használni, amelyet kifejezetten szerver célokra fejlesztettek. Általában a Linux disztribúciók gyorsabban futnak szerverként, mint a Windowsok a grafikus felület hiánya és a belső felépítésnek köszönhetően, de Windows szerverekkel is lehet elérni elég jó válaszidőket.
Adatbázis szerver
A Drupalhoz leggyakrabban MySQL-t szokás használni, amelyben az InnoDB motor az alapértelmezett. Ez a motor tranzakció biztos, ami azt jelenti, hogy minden írás előtt az írandó rekordról készít egy backupot a szerver, majd utána írja be az adatokat az adatbázisba. Mivel egy adatbázisban táblánként lehet állítani, hogy milyen motor alatt fusson, ezért azokat a táblákat, amelyek gyakran változnak, de nem létszükséglet a tartalmuk nyugodtan állítsd át MyIsam táblára.
A cache típusú táblákat lehet átállítani MyIsam táblákra.
Az adatbázis szervernek állíts be legalább 32 MB cache-t.
PHP sebesség
- Használjunk PHP 7.4-et vagy PHP 8.x-et PHP 5.6 helyett.
- Összességében a PHP 7.4 rendszer majdnem 1,5x gyorsabban fut az PHP 5.6-nál. Egyes benchmark eredmények a PHP 8.0 verziónál további 18% sebességnövekedést tapasztalnak. A sebesség növekedése annál jobb, minél összetettebb a kód, amit futtat a rendszer. Lásd:
- a PHP-ban a 7.0 óta alapértelmezetten elindul az Opcache modul, amely memóriában cacheli a PHP kódot, ezáltal a háttértárról nem kell betölteni azt. Bekapcsolva kell hagyni.
- A PHP 7-ben használható új beállítás a zend.assertions. Értéke legyen -1: https://www.toptal.com/php/php-7-performance-features
WEBszerver
Használjunk NGINX szervert Apache helyett
Ha Apache-ot használunk, akkor
- Reverse proxy megoldás, például Varnish cache.
- A css, js és egyéb fájlok böngészőoldali cache-elésének elősegítéséhez az Apache mod_expires moduljának a bekapcsolásával és a .htaccess megfelelő konfigurálásával.
- A kimenő tartalom tömörítésével szerver oldalon az Apache mod_deflate használatával.
- Az adatbáziskezelő módosítása NoSQL típusúra. Ilyen például a MongoDB. Ennek használatához szükséges a Mongo DB Drupal modul. A cache tartalmát teszi MongoDB adatbázisba. A MongoDB az adatbázist memóriában tartja, ezzel gyorsítja a kiszolgálást. Nem ajánlatos együtt használni a File cache vagy az Alternative Database Cache modullal.
Drupal 8
- Kikapcsolt Drupal 8 cache: 34 sec betöltődés!
- Kapcsold be a Drupal 8 cache rendszerét:admin/config/development/performance
- Bekapcsoltam a js és css tömörítést: 33,8sec, második letöltés: 2.05 sec. Ez összetömöríti az oldalon lévő js és css fájlokat egy-egy nagyobb fájlba.
Magyarázat: A böngészők hagyományosan csak 20 párhuzamos fájlletöltést engednek meg, ezért ha sok CSS és JS fájl van, akkor azokat akkor kezdik letölteni, ha már felszabadult egy szál. - Bekapcsolom: Internal Page Cache, Internal Dynamic Page Cache modulokat: Második letöltés 2.06 sec. A fenti két modul a különböző tíípusú tartalmakat adatbnázisba cacheli, tehát a Drupalnak nem kell azt előálíltania újra. A cache megtartásának idejétől függően a tartalom gyorsan jön le.
- Bekapcsoltam a js és css tömörítést: 33,8sec, második letöltés: 2.05 sec. Ez összetömöríti az oldalon lévő js és css fájlokat egy-egy nagyobb fájlba.
- Kapcsolj ki minden olyan modult, amit nem használsz. Minden bekapcsolt modul egy kis overhead-et jelent a futtatandó kódba még akkor is, ha nem szükséges.
- Kapcsold ki a Statistics modult. Magyarázat: Ez a modul folyamatosan adatbázisba menti a lekérdezések adatait. Éles szerveren nem feltétlenül van rá szükség ha Google Analytics-ot használsz.
- Kapcsoljuk ki az Update Manager modult. Magyarázat: Ez a frissítéseket ellenőrzi, tehát az oldal meghívásakor kinéz a Drupal szerverére és megnézi, hogy van-e frissítés. Ezt kézzel is meg lehet oldani.
- A page-not-found hibák esetén a Fast 404 modul gyorsítja a rendszert.
- Kapcsold be a BIgPipe modul-t. Magyarázat: akapesetben a szerver csak akkor küldi ki a HTML tartalmat, amikor teljesen elkészült vele és addig a böngésző vár. Ha lejött a HTML tartalom, a böngésző létrehozza a DOM-ot a memóriában, majd lehúzza a képeket, CSS és JS fájlokat. A CSS fájlokkal létrehozza a kinézetet és a végén futtatja a JS fájlokat. Ez a technika a weboldalakat részekre bontja (HTML markup) és a részeket külön küldi el a böngészőnek. Ezzel már a böngésző tud dolgozni. Lehőzza a CSS fájlokat és létrehozza a DOM-ot. A böngésző kevesebbet vár.
- Image Lazyloader - Magyarázat: A technológia azokat a képeket tölti le, amelyek az ablakban láthatóvá válnak. Ilyen módon a felhasználónak nem kell megvárnia azt, hogy minden kép letöltődjön.
- Ne használj PHP filter modult. Biztonsági problémákat okozhat. Inkább írj saját modult..
Külső szolgáltatások használata
- CDN - Sok olyan külső lib van, amely felhőben található. A letöltése gyorsabb egy CDN szerverről. Magyarázat: Ha egy erőforrást (library, javascript kód) nem a saját szerveredről töltöd le, hanem egy gyors felhőből, akkor gyorsabb lesz CDN-ből.
Az oldal sebességét tesztelő eszközök
- Performance Logging and Monitoring modul
- A Performance and Scalability Checklist modul segítségével a rendszer optimalizálását ellenőrizhetjük
- A Devel modul segítségével elemezhetjük a lassú lekérdezéseket
- Akár a Zend Studio profiler, akár az XHProf PHP Profiler használható az oldal lefutásának elemzésére
- YSlow használata a Firefoxban és/vagy Chromeban. Javaslatokat fogalmaz meg az oldal sebességének javítására ésteszteli az oldal sebességét.
A weboldal fejlesztőjének lehetőségei
További lehetőségek weboldalak sebességének gyorsítására
- Egyszerűbb design a weboldalnak (kevés kép, kevés kód, kevés javascript és css)
- A jpg, png képek méretének csökkentése akkorára, hogy a böngészőnek ne kelljen átméretezni.
- A jpg képek tömörítése ne a 80%-os legyen, hanem alacsonyabb, ezááltal kisebb képek legyenek.
- Kevesebb külső js kódot - meghívni, pl Google Analytics kódot a szerverre telepíteni
- Ne használj iframe-eket.
- A javascript kódokat az oldal végére téve a felhasználó számára megjelenik az oldal a böngészőben, amikor a js kódok még csak töltődnek.
- A css fájlok a HTML oldal elején legyenek. Ezt a Drupal is így csinálja.
Néhány angol nyelvű oldal, ahol ezzel a témáával foglalkoznak
- http://colans.net/blog/drupal-7-performance-optimization-options-and-checklist
- http://chapterthree.com/blog/four-easy-fix-mistakes-will-kill-site-performance
- http://drupal.stackexchange.com/questions/724/why-is-drupal-7-so-slow
- https://drupal.org/node/2136161
- http://stackoverflow.com/questions/11828749/drupal-7-is-too-slow-on-first-load
- http://kegel.com/drupal/slow.html
- http://mydrupal.com/how-to-speed-up-optimize-drupal-7
- http://friendlymachine.net/posts/2011/5-ways-to-improve-performance-in-drupal
- http://www.creativebloq.com/web-design/drupal-performance-tips-9122837