Έχετε φτιάξει και ρυθμίσει το Drupal site σας όπως επιθυμείτε, έχετε ολοκληρώσει τη SEO στρατηγική σας και οι επισκέπτες αρχίζουν να συρρέουν από τα πέρατα της γής για να δουν το περιεχόμενό σας ή να αγοράσουν τα προϊόντα σας. Ξαφνικά τα requests/second φτάνουν στο Θεό, το site σας αρχίζει να είναι αργό και σε κάποια φάση πέφτει λόγω heavy traffic και χωρίς να το καταλάβετε περνάτε όλη μέρα στο τηλέφωνο βρίζοντας την εταιρία που σας φιλοξενεί το site για τον αργό Server που σας έδωσε, ή ακόμη χειρότερα, για τον υπερφουσκωμένο λογαριασμό του bandwidth που καταναλώσατε.
Δεν έχουμε βρεθεί όλοι σε αυτήν την κατάσταση, αλλά όταν έχουμε στα χέρια μας ένα site που για κάποιους λόγους σηκώνει heavy traffic (π.χ. slashdot effect –http://en.wikipedia.org/wiki/Slashdot_effect), πρέπει να είμαστε προετοιμασμένοι κατά το δυνατό, τουλάχιστον σε ότι αφορά το caching του Drupal site μας.
Τι είναι το caching;
Με μια φράση, caching στον προγραμματισμό είναι ένα σύνολο τεχνικών που σκοπό έχουν να αποθηκεύσουν δεδομένα από μια αργή μνήμη (π.χ. σκληρό δίσκο) σε μια πιο γρήγορη (π.χ. μνήμη RAM) έτσι ώστε όταν αυτά χρειαστεί να προσπελαστούν πάλι στο άμεσο μέλλον, η διαδικασία αυτή να γίνει το ταχύτερο δυνατό. Για να διαβάζετε αυτό το άρθρο πιθανότατα γνωρίζετε τις έννοιες, οπότε δε χρειάζεται να επεκταθούμε περισσότερο. Δείτε όμως εδώ για περισσότερες λεπτομέρειες:http://en.wikipedia.org/wiki/Cache_(computing)
Γιατί χρειάζεται το caching σε ένα CMS όπως το Drupal;
Ο λόγος είναι πως οι σελίδες ενός CMS που βλέπει ο τελικός χρήστης ως HTML, έχουν παραχθεί μέσα από μια πολύπλοκη διαδικασία αναζήτησης δεδομένων από database tables και μετάφρασης κώδικα (πχ από PHP -> HTML, ή εκτέλεση κώδικα JavaScript). Χωρίς caching, αυτές οι σελίδες υπολογίζονται ξανά και ξανά όταν ζητούνται από τον κάθε χρήστη με αποτέλεσμα ο server να καταναλώνει πολύ CPU time και μνήμη υπολογίζοντας όλα αυτά τα δεδομένα. Ο βασικός στόχος του caching σε ένα CMS όπως το Drupal, είναι οι σελίδες που βλέπει ο χρήστης να είναι προ-υπολογισμένες HTML σελίδες, οπότε και παρακάμπτεται η παραπάνω χρονοβόρα διαδικασία.
Πως το κάνει το Drupal;
Οι ρυθμίσεις για caching στο Drupal είναι εδώ:
Administration » Configuration » Development » Performance
Όταν το site σας είναι έτοιμο για να το δεί ο υπόλοιπος κόσμος (δηλαδή έχετε τελειώσει το development), θα πρέπει να ενεργοποιήσετε τα checkboxes “Cache pages for anonymous users”, “Cache blocks”, Aggregate and compress CSS files”, “Aggregate javaScript files”. Με αυτές τις επιλογές ενεργοποιημένες, το Drupal θα cach-άρει σελίδες και blocks και θα προβεί στην ένωση και συμπίεση αρχείων CSS και JavaScript για μεγαλύτερη απόδοση.
Επίσης θέστε τις επιλογές “Minimum cache lifetime” και “Expiration of cached pages” στα 3 ή 5 λεπτά – όχι περισσότερο, επιτρέποντας έτσι στην cache να ανανεώνεται αυτόματα ανά τακτά χρονικά διαστήματα, κρατώντας το περιεχόμενό σας φρέσκο.
Τι άλλες τεχνικές υποστηρίζει το Drupal;
Χωρίς να αναπτύξουμε τις τεχνικές, τις αναφέρουμε εδώ:
-
Εξωτερικές τεχνικές caching αν βρίσκεστε σε Shared Server (κάτι που ισχύει για τους περισσότερους)
- Boost module http://drupal.org/project/boost, οδηγίες εδώ: http://drupal.org/node/1434362
- Συμπληρώστε με το Authcache module http://drupal.org/project/authcache (για ανώνυμους και εγγεγραμένους χρήστες στο site σας)
- ή με το module Advanced cache http://drupal.org/project/advcache (για εγγεγραμένους χρήστες στο site σας)
-
Εξωτερικές τεχνικές caching αν βρίσκεστε σε Dedicated Server
- Boost και Authcache module όπως και παραπάνω
- Αν χρησιμοποιείτε Drupal 6 δείτε το Cacherouter module (http://drupal.org/project/cacherouter)
- Varnish HTTP acceleration (http://drupal.org/project/varnish)
- Memcache module (http://drupal.org/project/memcache)
-
Άλλοι τρόποι για αύξηση απόδοσης
- APC: Caching για ενδιάμεσο κώδικα PHP (http://drupal.org/project/apc)
- CDN: Ένας αξιόπιστος τρόπος για την γρηγορότερη προσπέλαση αρχείων (συνήθως javascript, αλλά μπορεί να λειτουργήσει με όλους τους τύπους αρχείων) που επιτρέπει σε αρχεία του site σας να βρίσκονται σε άλλους servers – γρηγορότερους και γεωγραφικά κοντύτερα στον κάθε χρήστη που προσπελαύνει το site σας (http://drupal.org/project/cdn)