Skip to Content

Κρυφή μνήμη σελίδων για Odoo: κατάστημα και ιστολόγιο από RAM ή αρχείο – γρήγορα για επισκέπτες, μηχανές αναζήτησης και ΤΝ

Το άρθρωμα ανοικτού λογισμικού website_page_cache παραδίδει δημόσιες σελίδες Odoo σχεδόν στατικά, παραμένει επίκαιρο σε αλλαγές και μεταφράσεις και δείχνει στον πίνακα ελέγχου αν και πόση RAM χρειάζεται
10 Νοεμβρίου 2026 από
Κρυφή μνήμη σελίδων για Odoo: κατάστημα και ιστολόγιο από RAM ή αρχείο – γρήγορα για επισκέπτες, μηχανές αναζήτησης και ΤΝ

10 Νοεμβρίου 2026  |  Ίδια ανάπτυξη  |  Odoo, απόδοση και μηχανές αναζήτησης

Κρυφή μνήμη σελίδων για ιστότοπους Odoo: δημόσιες σελίδες καταστήματος και ιστολογίου από αρχείο ή RAM αντί για νέα απόδοση σε κάθε κλήση

Ένας ιστότοπος Odoo δημιουργεί κάθε σελίδα από την αρχή σε κάθε κλήση: ερωτήματα βάσης δεδομένων, πρότυπα, μεταφράσεις, τιμές. Για έναν μεμονωμένο επισκέπτη αυτό περνά απαρατήρητο. Όταν όμως μηχανές αναζήτησης και ευρετηριαστές τεχνητής νοημοσύνης ζητούν εκατοντάδες ή χιλιάδες σελίδες σε πολλές γλώσσες, προκύπτει διαρκές φορτίο και περιμένουν μαζί και οι πραγματικοί πελάτες. Γι' αυτό αναπτύξαμε το άρθρωμα Odoo 19 website_page_cache και το δημοσιεύσαμε στο GitHub ως ανοικτό λογισμικό (LGPL-3): οι σελίδες καταστήματος και ιστολογίου που ζητούνται ανώνυμα εξυπηρετούνται σχεδόν στατικά από μια κρυφή μνήμη, είτε από αρχεία είτε από την κύρια μνήμη (RAM), και κάθε αλλαγή – ακόμη και σε μια μετάφραση – αφαιρεί αυτόματα από την κρυφή μνήμη τις σελίδες που επηρεάζονται.

Σημαντικό για όσους θέλουν να τους βρίσκουν: το άρθρωμα δεν αποκλείει καμία μηχανή αναζήτησης και κανένα ρομπότ ανίχνευσης τεχνητής νοημοσύνης. Όλοι οι ευρετηριαστές λαμβάνουν το ίδιο περιεχόμενο με κάθε επισκέπτη, απλώς ταχύτερα. Το άρθρο αυτό εξηγεί πώς λειτουργεί η κρυφή μνήμη, πώς μοιάζει ο πίνακας ελέγχου (με στιγμιότυπα οθόνης), πώς διαπιστώνετε αν οι σελίδες σας χωρούν στην κύρια μνήμη και πόση επιπλέον RAM θα χρειαζόταν, ποιοι κανόνες ασφαλείας ισχύουν και πώς εγκαθιστάτε το άρθρωμα.

Συνοπτικά

ΘέμαΤι ισχύει
Άρθρωμαwebsite_page_cache για Odoo 19, άδεια LGPL-3, δημόσιο στο GitHub
Τι αποθηκεύεται στην κρυφή μνήμη;Δημόσιες σελίδες καταστήματος και ιστολογίου (λίστες, κατηγορίες, προϊόντα, άρθρα) σε κάθε γλώσσα κάθε ιστότοπου
Για ποιον;Μόνο για ανώνυμους επισκέπτες, μόνο κλήσεις GET χωρίς παραμέτρους αναζήτησης, μόνο κατάσταση 200 με HTML
Τόπος αποθήκευσηςΑρχεία στον δίσκο ή RAM (tmpfs, κοινή για όλες τις διεργασίες εργασίας)· αυτόματα ανάλογα με τις ανάγκες χώρου
ΕπικαιρότηταΚάθε αλλαγή (και μεταφράσεις, εισαγωγές, σενάρια) δημιουργεί μέσω σκανδαλιστών βάσης δεδομένων μια εγγραφή ημερολογίου και ακυρώνει τις σελίδες που επηρεάζονται
Πίνακας ελέγχουΡυθμίσεις, κατάσταση, στατιστικά (επιτυχίες, αποτυχίες, εξοικονομημένος χρόνος διακομιστή) και ο έλεγχος „Χωρά στην κύρια μνήμη;“ μαζί με την „πρόσθετη απαιτούμενη RAM“
Μηχανές αναζήτησης και ΤΝΤίποτα δεν αποκλείεται ή περιορίζεται· όλοι λαμβάνουν τις ίδιες σελίδες, απλώς ταχύτερα
Χειρόφρενο έκτακτης ανάγκηςΈνας διακόπτης (enabled = 0) απενεργοποιεί την κρυφή μνήμη σε όλες τις διεργασίες εργασίας εντός 30 δευτερολέπτων

Το πρόβλημα: φορτίο ρομπότ ανίχνευσης σε ιστότοπους Odoo

Το Odoo είναι ένα πλήρες σύστημα ERP και ο ιστότοπος είναι ένα από τα πολλά αρθρώματά του. Κάθε σελίδα που ζητά ένας επισκέπτης ή ένα ρομπότ διανύει την ίδια διαδρομή: επεξεργασία του αιτήματος, ερώτημα στη βάση δεδομένων, φόρτωση δεδομένων προϊόντων και τιμών, απόδοση του προτύπου QWeb, εισαγωγή των μεταφράσεων και παράδοση του αποτελέσματος. Αυτό διαρκεί, ανάλογα με τη σελίδα, μερικές εκατοντάδες χιλιοστά του δευτερολέπτου και δεσμεύει στο διάστημα αυτό μία από τις λίγες διεργασίες εργασίας.

Για τις μηχανές αναζήτησης και τους ευρετηριαστές ΤΝ αυτό είναι διαρκές ζήτημα:

  • Πολλές γλώσσες, πολλές διευθύνσεις: Μια σελίδα που υπάρχει σε 46 γλώσσες είναι για ένα ρομπότ ανίχνευσης 46 διαφορετικές διευθύνσεις.
  • Κάθε διεύθυνση ζητείται ξεχωριστά, συχνά από πολλούς κατανεμημένους αποστολείς ταυτόχρονα. Μια κλασική κρυφή μνήμη προγράμματος περιήγησης δεν βοηθά εδώ, επειδή κάθε κλήση αφορά νέα διεύθυνση.
  • Λίγες διεργασίες εργασίας: Μια υπηρεσία Odoo τρέχει συνήθως με λίγες διεργασίες. Αν αυτές είναι απασχολημένες με αιτήματα ρομπότ, οι πραγματικοί επισκέπτες περιμένουν στην ουρά.
  • Ίδιο περιεχόμενο, ξανά και ξανά: Ένα άρθρο ιστολογίου αλλάζει σπάνια, αλλά συναρμολογείται επίπονα από την αρχή σε κάθε κλήση.

Η προφανής διέξοδος – ο αποκλεισμός των ρομπότ ανίχνευσης – δεν αποτελεί επιλογή για μια επιχείρηση που θέλει να βρίσκεται. Η προβολή στις μηχανές αναζήτησης και στις απαντήσεις της ΤΝ έχει αξία. Καλύτερο είναι να παραδίδονται οι σελίδες τόσο γρήγορα, ώστε το φορτίο να μετρά ελάχιστα. Ακριβώς αυτό κάνει η κρυφή μνήμη σελίδων.

Πώς λειτουργεί η κρυφή μνήμη σελίδων

Το άρθρωμα συνδέεται στην είσοδο αιτημάτων του Odoo (ir.http). Σε κάθε κλήση σελίδας αποφασίζει μέσα σε κλάσματα του χιλιοστού του δευτερολέπτου αν η σελίδα επιτρέπεται να προέλθει από την κρυφή μνήμη, και στη συνέχεια την παραδίδει χωρίς βάση δεδομένων, χωρίς πρότυπο και χωρίς απόδοση.

Διάγραμμα ροής: αίτημα, έλεγχος, κλειδί κρυφής μνήμης, επιτυχία ή αποτυχία, αποθήκευση και παράδοση

  1. Έλεγχος: Μόνο μια ανώνυμη κλήση GET χωρίς παραμέτρους αναζήτησης σε επιτρεπόμενη διαδρομή (κατάστημα, κατηγορίες, προϊόντα, ιστολόγιο) έρχεται υπόψη. Όλα τα άλλα περνούν όπως πάντα από το Odoo.
  2. Κλειδί κρυφής μνήμης: Αποτελείται από τον ιστότοπο, την κλάση του κεντρικού υπολογιστή, τη γλώσσα, τη διαδρομή, τον τιμοκατάλογο, τη φορολογική θέση και την κατάσταση συγκατάθεσης για cookies. Επισκέπτες που θα έβλεπαν κάτι διαφορετικό δεν μοιράζονται ποτέ μια εγγραφή. Ο κεντρικός υπολογιστής κανονικοποιείται: το Odoo γράφει τις απόλυτες διευθύνσεις πάντα από τον τομέα του ιστότοπου και όχι από το αίτημα· η διεύθυνση του αιτήματος καθορίζει μόνο αν η σελίδα θεωρείται κύρια διεύθυνση (παραπομπές γλώσσας) και αν πρέπει να ευρετηριαστεί. Όλα τα ξένα ονόματα κεντρικών υπολογιστών μοιράζονται έτσι μία εγγραφή μαζί με την ένδειξη noindex, αντί να δεσμεύει το καθένα δικό του αντίγραφο.
  3. Επιτυχία: Αν υπάρχει τρέχουσα εγγραφή, παραδίδεται. Το διακριτικό CSRF της σελίδας ορίζεται εδώ εκ νέου σε κάθε αίτημα. Οι κλήσεις άρθρων ιστολογίου συνεχίζουν να καταμετρώνται.
  4. Αποτυχία: Αν λείπει η εγγραφή ή είναι παρωχημένη, το Odoo αποδίδει τη σελίδα όπως συνήθως. Αν το αποτέλεσμα μπορεί να αποθηκευτεί στην κρυφή μνήμη (κατάσταση 200, HTML, χωρίς cookie, χωρίς αναγνωριστικό συνεδρίας στο κείμενο), αποθηκεύεται· η επόμενη κλήση είναι επιτυχία.
  5. Ορατό στην κεφαλίδα: Κάθε απάντηση φέρει την κεφαλίδα X-Page-Cache: HIT ή MISS. Έτσι μπορεί να ελεγχθεί με οποιοδήποτε εργαλείο τι συνέβη.

Πόσο ταχύτερα;

Στο δοκιμαστικό μας σύστημα (αντίγραφο των ιστότοπών μας, μερικές εκατοντάδες σελίδες) ο μέσος χρόνος απόδοσης μιας σελίδας ήταν περίπου 490 χιλιοστά του δευτερολέπτου, ενώ η παράδοση από την κρυφή μνήμη περίπου 23 χιλιοστά του δευτερολέπτου: περίπου είκοσι φορές ταχύτερα. Όσο πιο σύνθετη είναι μια σελίδα, τόσο μεγαλύτερο το όφελος. Ο πίνακας ελέγχου υπολογίζει επιπλέον από τις δύο τιμές τον εκτιμώμενο εξοικονομημένο χρόνο διακομιστή.

Αρχείο ή RAM: επιλογή τόπου αποθήκευσης

Η κρυφή μνήμη γνωρίζει δύο τόπους αποθήκευσης. Και οι δύο είναι κοινά ορατοί σε όλες τις διεργασίες εργασίας του Odoo, επομένως κάθε σελίδα υπάρχει μόνο μία φορά, όχι μία φορά ανά διεργασία.

Αντιπαραβολή κρυφής μνήμης αρχείων και κρυφής μνήμης RAM και ο κανόνας απόφασης του αυτοματισμού

ΡύθμισηΠού βρίσκονται οι σελίδες;Ιδιότητες
ΑρχείαΚατάλογος στον φάκελο δεδομένων του Odoo, ανά βάση δεδομένωνεπιβιώνει των επανεκκινήσεων· το λειτουργικό σύστημα διατηρεί ούτως ή άλλως στη μνήμη τις συχνά χρησιμοποιούμενες σελίδες
Κύρια μνήμηtmpfs στο /dev/shmταχύτατη παράδοση· χάνεται κατά την επανεκκίνηση του διακομιστή και απλώς ξαναχτίζεται
ΑυτόματαRAM, εφόσον χωρούν όλα· διαφορετικά αρχείαΜια εργασία συντήρησης (κάθε 10 λεπτά) αποφασίζει με βάση την εκτίμηση· παραμένει στη RAM στις περιπτώσεις „χωρά“ και „οριακά“, ώστε η επιλογή να μην αλλάζει συνεχώς

Για τις περισσότερες εγκαταστάσεις η σωστή επιλογή είναι Αυτόματα: αποκτάτε ταχύτητα RAM όταν υπάρχει χώρος και διαφορετικά επιστρέφετε χωρίς παρέμβαση στα αρχεία.

Χωρά ο ιστότοπος στην κύρια μνήμη; Και πόση RAM λείπει;

Το αν είναι εφικτή μια κρυφή μνήμη RAM εξαρτάται από τρία πράγματα: τον αριθμό των σελίδων, το μέσο μέγεθός τους και τη διαθέσιμη μνήμη. Ο πίνακας ελέγχου τα υπολογίζει για εσάς:

  • Αριθμός σελίδων: Για κάθε ιστότοπο μετρά τα δημοσιευμένα προϊόντα, τις σελίδες λίστας του καταστήματος, τις κατηγορίες, τα άρθρα ιστολογίου και τις λίστες ιστολογίου και πολλαπλασιάζει με τον αριθμό των γλωσσών.
  • Μέγεθος σελίδας: Μόλις υπάρξουν σελίδες στην κρυφή μνήμη, μετράται ο πραγματικός μέσος όρος· έως τότε ισχύει μια εκτιμώμενη τιμή.
  • Χώρος για την κρυφή μνήμη: η μικρότερη τιμή ανάμεσα στον ρυθμισμένο προϋπολογισμό RAM, το μέγεθος του tmpfs και το μισό της διαθέσιμης κύριας μνήμης. Ο διακομιστής δεν πρέπει ποτέ να περιέλθει σε στέρηση μνήμης εξαιτίας της κρυφής μνήμης.
  • Κρίση: „χωρά με απόθεμα“, „οριακά“, „πολύ μεγάλο“ ή „κρυφή μνήμη RAM μη διαθέσιμη“. Το „Χωρά“ ισχύει όταν η ανάγκη φτάνει το πολύ το 80 τοις εκατό του διαθέσιμου χώρου.

Ενότητα του πίνακα ελέγχου Χωρά στην κύρια μνήμη; με αριθμό σελίδων ανά ιστότοπο, ανάγκη χώρου και την ένδειξη για την πρόσθετη απαιτούμενη RAM

Νέο: Πόση πρόσθετη RAM θα χρειαζόταν;

Όταν η κρυφή μνήμη δεν χωρά, θέλει κανείς να ξέρει τι πρέπει να αλλάξει. Ο πίνακας ελέγχου αναφέρει γι' αυτό κάτω από την κρίση μια συγκεκριμένη γραμμή: „Πρόσθετη RAM για κρυφή μνήμη RAM: περίπου … περισσότερη κύρια μνήμη σε αυτόν τον διακομιστή“ – ή „καμία“, αν ο χώρος επαρκεί ήδη. Αν αντί για τον διακομιστή είναι μικρή μόνο μια ρύθμιση, αναγράφεται από κάτω ποια: ο προϋπολογισμός RAM του αρθρώματος ή το μέγεθος του tmpfs (/dev/shm).

Πίνακας ελέγχου με υπερβολικά μικρό προϋπολογισμό RAM: κρίση Όχι και η προτροπή να αυξηθεί ο προϋπολογισμός RAM τουλάχιστον στην απαιτούμενη τιμή

Ο υπολογισμός πίσω από αυτό είναι απλός και εύκολος στην παρακολούθηση:

Παράδειγμα υπολογισμού: 12.000 σελίδες επί 25 KB δίνουν ανάγκη περίπου 300 MB, με απόθεμα περίπου 375 MB, γι' αυτό τουλάχιστον 750 MB ελεύθερης μνήμης

  1. Ανάγκη = σελίδες × μέσο μέγεθος σελίδας.
  2. Με απόθεμα = ανάγκη διαιρεμένη με 0,8. Η τιμή αυτή πρέπει να χωρά στον προϋπολογισμό RAM και στο tmpfs, ώστε η κρίση να είναι „χωρά“.
  3. Ελεύθερη μνήμη: Επειδή η κρυφή μνήμη επιτρέπεται να χρησιμοποιεί το πολύ το μισό της διαθέσιμης κύριας μνήμης, ο διακομιστής χρειάζεται τουλάχιστον το διπλάσιο της τιμής του βήματος 2 ως ελεύθερη διαθέσιμη μνήμη. Αν λείπει κάτι, η διαφορά είναι η πρόσθετη απαιτούμενη RAM.

Το παράδειγμα της εικόνας (12.000 σελίδες των 25 KB η καθεμία) είναι βοήθημα υπολογισμού και όχι μέτρηση των σελίδων μας. Για μικρούς ιστότοπους αρκούν λίγες δεκάδες megabyte· τα δεδομένα του παραδείγματος στα στιγμιότυπα οθόνης αρκέστηκαν σε περίπου 13 MB.

Σημαντικό για την αξιολόγηση: η εκτίμηση δεν μετρά πρόσθετες εκδοχές ανά τιμοκατάλογο ή χώρα. Όποιος χρησιμοποιεί πολλές από αυτές προγραμματίζει κάποιο απόθεμα. Και: ένας υπερβολικά μικρός προϋπολογισμός RAM είναι ο συχνότερος λόγος για τον οποίο ο αυτοματισμός μένει στα αρχεία – όχι η έλλειψη κύριας μνήμης. Ο πίνακας ελέγχου εμφανίζει σε αυτή την περίπτωση ακριβώς αυτή τη γραμμή.

Αλλαγές και μεταφράσεις καθαρίζουν την κρυφή μνήμη

Μια κρυφή μνήμη είναι χρήσιμη μόνο αν δεν παραδίδει ποτέ παρωχημένες σελίδες. Ένα απλό χρονικό όριο („απόρριψη κάθε δώδεκα ώρες“) θα ήταν υπερβολικά χονδροειδές: μια αλλαγμένη τιμή ή ένα διορθωμένο τυπογραφικό λάθος θα έπρεπε να περιμένει έως και δώδεκα ώρες. Γι' αυτό το άρθρωμα λειτουργεί με βάση το περιεχόμενο.

Ροή της ακύρωσης: αλλαγή, σκανδαλιστής βάσης δεδομένων, ημερολόγιο αλλαγών, συμφωνία, σελίδα που απορρίπτεται, νέα απόδοση στην επόμενη κλήση

  1. Σκανδαλιστές βάσης δεδομένων: Σε όλους τους πίνακες που μπορούν να επηρεάσουν μια σελίδα (προϊόντα, παραλλαγές, εικόνες, απόθεμα, χαρακτηριστικά, κατηγορίες, τιμές, φόροι, τιμοκατάλογοι, άρθρα και ετικέτες ιστολογίου, δεδομένα συνεργατών και εταιρειών, προβολές, assets, μενού, γλώσσες, ρυθμίσεις ιστότοπου) υπάρχουν σκανδαλιστές PostgreSQL. Καταχωρίζουν κάθε αλλαγή σε ένα ημερολόγιο αλλαγών.
  2. Εξαρτήσεις και κατάσταση της βάσης δεδομένων: Κάθε σελίδα στην κρυφή μνήμη θυμάται ποιες εγγραφές εμφανίζει και την κατάσταση της βάσης δεδομένων με την οποία δημιουργήθηκε.
  3. Συμφωνία: Αν υπάρχει εγγραφή ημερολογίου που δημιουργήθηκε μετά από αυτή την κατάσταση και αφορά μία από αυτές τις εγγραφές, η σελίδα είναι παρωχημένη.
  4. Νέα αποθήκευση: Στην επόμενη κλήση η παρωχημένη σελίδα απορρίπτεται, αποδίδεται εκ νέου και αποθηκεύεται ξανά.

Καλύπτονται και οι μεταφράσεις

Το Odoo 19 αποθηκεύει τα μεταφρασμένα κείμενα στην ίδια εγγραφή με το πρωτότυπο κείμενο (ως πεδίο JSON). Μια αλλαγμένη μετάφραση είναι επομένως για τη βάση δεδομένων μια εντελώς συνηθισμένη αλλαγή γραμμής – και ο σκανδαλιστής τη βλέπει. Αυτό ισχύει εξίσου για την επεξεργασία μέσω της διεπαφής, για εισαγωγές, για διεπαφές προγραμματισμού και για σενάρια που γράφουν απευθείας στη βάση δεδομένων. Μια αυτόματη μετάφραση σε 46 γλώσσες ακυρώνει λοιπόν ακριβώς τις σελίδες των οποίων το κείμενο άλλαξε, και όχι περισσότερες.

  • Στοχευμένα και όχι γενικά: Ένα αλλαγμένο προϊόν ακυρώνει τις σελίδες του, τις λίστες στις οποίες περιλαμβάνεται και τη σχετική κατηγορία. Τα υπόλοιπα μένουν στην κρυφή μνήμη.
  • Οι καθολικές αλλαγές (πρότυπα, assets, γλώσσες, μενού, φόροι, νομίσματα) ακυρώνουν τα πάντα ταυτόχρονα, επειδή μπορούν να επηρεάσουν κάθε σελίδα.
  • Οι μετρητές μένουν εκτός: Ο μετρητής προβολών των άρθρων ιστολογίου αλλάζει σε κάθε επίσκεψη· σκόπιμα δεν προκαλεί ακύρωση, διαφορετικά η κρυφή μνήμη θα ήταν άχρηστη για δημοφιλή άρθρα.
  • Δίχτυ ασφαλείας: Επιπλέον υπάρχει μέγιστη ηλικία ανά σελίδα (προεπιλογή 12 ώρες).
  • Κανένα σφάλμα εγγραφής εξαιτίας της κρυφής μνήμης: Ένα σφάλμα μέσα σε σκανδαλιστή καταγράφεται ως προειδοποίηση και δεν αφήνει να αποτύχει η ίδια η αποθήκευση.

Πίνακας ελέγχου και στατιστικά

Ό,τι χρειάζεστε για τη λειτουργία βρίσκεται σε ένα σημείο: στο Odoo στο Ιστότοπος → Αναφορές → Κρυφή μνήμη σελίδων. Η ενότητα Επισκόπηση είναι ο πίνακας ελέγχου (με τις ρυθμίσεις), η ενότητα Ιστορικό δείχνει τους αριθμούς ανά ημέρα και ιστότοπο.

Πίνακας ελέγχου της κρυφής μνήμης σελίδων στο Odoo: ρυθμίσεις, κατάσταση, στατιστικά και ο έλεγχος Χωρά στην κύρια μνήμη

Στιγμιότυπο οθόνης από δοκιμαστικό σύστημα με αντίγραφα των ιστότοπών μας· τα ονόματα των ιστότοπων έχουν αντικατασταθεί από σύμβολα κράτησης θέσης.

Ρυθμίσεις

ΡύθμισηΣημασία
ΕνεργόΚύριος διακόπτης. Όταν είναι απενεργοποιημένος, το Odoo παραδίδει ξανά κάθε σελίδα όπως πριν, σε όλες τις διεργασίες το αργότερο έπειτα από 30 δευτερόλεπτα.
Τόπος αποθήκευσηςΑυτόματα, αρχεία ή κύρια μνήμη
Μέγιστη ηλικία (ώρες)Δίχτυ ασφαλείας· οι σελίδες ανανεώνονται ανεξάρτητα από αλλαγές μετά από αυτό το διάστημα
Προϋπολογισμός RAM (MB)Τόση κύρια μνήμη το πολύ μπορεί να δεσμεύσει η κρυφή μνήμη RAM· ταυτόχρονα το όριο για την κρίση „χωρά“
Όριο δίσκου (MB)Μέγιστο μέγεθος της κρυφής μνήμης αρχείων· οι παλαιότερες εγγραφές αφαιρούνται πρώτες

Κατάσταση και στατιστικά

Η κατάσταση δείχνει τον ενεργό τόπο αποθήκευσης μαζί με το όριο, τον αριθμό και το μέγεθος των σελίδων στην κρυφή μνήμη και την παρακολούθηση αλλαγών: πόσες αλλαγές καταγράφηκαν τις τελευταίες 24 ώρες και πόσοι πίνακες παρακολουθούνται. Αν λείπει κάποια παρακολούθηση, ο πίνακας ελέγχου προειδοποιεί ευδιάκριτα, γιατί τότε δεν πρέπει να εμπιστεύεστε την κρυφή μνήμη. Τα κουμπιά στο επάνω μέρος επιτρέπουν να εκτελέσετε αμέσως τη συντήρηση, να αδειάσετε την κρυφή μνήμη ή να ελέγξετε τους σκανδαλιστές και, αν χρειαστεί, να τους δημιουργήσετε ξανά.

Τα στατιστικά (Σήμερα, 7 ημέρες, 30 ημέρες) περιλαμβάνουν:

  • Από την κρυφή μνήμη και Αποδόθηκαν: επιτυχίες και αποτυχίες, και από αυτές το ποσοστό επιτυχίας
  • Αφαιρέθηκαν (αλλαγή/λήξη): πόσες σελίδες απορρίφθηκαν λόγω αλλαγής ή λήξης
  • Χρόνος απόδοσης και χρόνος κρυφής μνήμης: ο μέσος όρος ανά σελίδα σε σύγκριση
  • Εκτιμώμενος εξοικονομημένος χρόνος διακομιστή και όγκος δεδομένων από την κρυφή μνήμη

Τους αριθμούς τους συλλέγει κάθε διεργασία εργασίας ξεχωριστά και τους γράφει μία φορά το λεπτό· γραμμές παλαιότερες από 90 ημέρες καθαρίζει η εργασία συντήρησης.

Ιστορικό ως διάγραμμα, pivot και λίστα

Στο Ιστορικό διατίθενται οι ημερήσιες τιμές ανά ιστότοπο – ως διάγραμμα, ως συγκεντρωτικός πίνακας (pivot) ή ως λίστα. Έτσι βλέπετε αν το ποσοστό επιτυχίας αυξάνεται ξανά μετά από επανεκκίνηση ή μεγάλη αλλαγή και ποιος ιστότοπος λαμβάνει τη μεγαλύτερη επισκεψιμότητα από την κρυφή μνήμη.

Ιστορικό της κρυφής μνήμης σελίδων ως συγκεντρωτικός πίνακας με επιτυχίες, αποτυχίες και σελίδες που απορρίφθηκαν ανά ιστότοπο

Ασφάλεια: τι δεν προέρχεται ποτέ από την κρυφή μνήμη

Μια κρυφή μνήμη σελίδων δεν επιτρέπεται ποτέ να οδηγεί στο να βλέπει κάποιος το περιεχόμενο ενός άλλου. Γι' αυτό το άρθρωμα ακολουθεί την αρχή: Σε περίπτωση αμφιβολίας, όχι κρυφή μνήμη.

  • Μόνο ανώνυμοι επισκέπτες: Όποιος έχει συνδεθεί, έχει καλάθι αγορών ή φέρει άλλη κατάσταση συνεδρίας, λαμβάνει πάντα τη σελίδα που αποδίδεται κανονικά.
  • Μόνο GET χωρίς παραμέτρους αναζήτησης: Αναζητήσεις, φίλτρα, ταξινομήσεις, φόρμες, καλάθι και ταμείο μένουν ανέγγιχτα.
  • Μόνο κατάσταση 200 και HTML: Σελίδες σφάλματος, ανακατευθύνσεις και αρχεία δεν αποθηκεύονται.
  • Κανένα αναγνωριστικό συνεδρίας στην κρυφή μνήμη: Μια σελίδα που περιέχει αναγνωριστικό συνεδρίας ή ορίζει cookie δεν αποθηκεύεται (και καταγράφεται ως προειδοποίηση).
  • Διακριτικό CSRF ανά αίτημα: Το διακριτικό στη σελίδα της κρυφής μνήμης είναι σύμβολο κράτησης θέσης και εισάγεται εκ νέου σε κάθε παράδοση.
  • Λεπτομερές κλειδί: Ο ιστότοπος, η γλώσσα, ο τιμοκατάλογος, η φορολογική θέση και η συγκατάθεση για cookies ανήκουν στο κλειδί της κρυφής μνήμης· όποιος βλέπει κάτι διαφορετικό λαμβάνει άλλη εγγραφή.
  • Πολλές βάσεις δεδομένων: Κάθε βάση δεδομένων έχει δικές της εγγραφές, δικό της ημερολόγιο και δικά της στατιστικά.
  • Καμία διαρροή δεδομένων: Η κρυφή μνήμη βρίσκεται τοπικά στον διακομιστή (αρχείο ή RAM). Δεν διαβιβάζονται δεδομένα σε τρίτους.

Μηχανές αναζήτησης και ευρετηριαστές ΤΝ: τίποτα δεν αποκλείεται

Ορισμένοι διαχειριστές αντιδρούν στο φορτίο ρομπότ ανίχνευσης με αποκλεισμούς. Αυτό προστατεύει τον διακομιστή, κοστίζει όμως σε προβολή. Το άρθρωμα επιλέγει τον αντίθετο δρόμο:

  • Ίδιο περιεχόμενο για όλους: Μηχανές αναζήτησης, ευρετηριαστές ΤΝ και επισκέπτες λαμβάνουν την ίδια σελίδα. Δεν υπάρχει ξεχωριστή „έκδοση για ρομπότ ανίχνευσης“ ούτε αναγνώριση βάσει αναγνωριστικού προγράμματος περιήγησης.
  • Οι ταχύτερες απαντήσεις βοηθούν την ευρετηρίαση: Μια σελίδα που απαντά σε 20 αντί για 500 χιλιοστά του δευτερολέπτου επιβαρύνει λιγότερο τον προϋπολογισμό ανίχνευσης (crawl budget) και τα ρομπότ ανίχνευσης μπορούν να καταγράψουν περισσότερες σελίδες στον ίδιο χρόνο.
  • Επίκαιρο περιεχόμενο: Επειδή οι αλλαγές ακυρώνουν αμέσως τις σελίδες, τα ρομπότ ανίχνευσης δεν βλέπουν ποτέ παρωχημένη εκδοχή – σημαντικό, αν διατηρείτε περιεχόμενο για αναζήτηση και απαντήσεις ΤΝ.
  • Τα δομημένα δεδομένα διατηρούνται: Το JSON-LD, οι πληροφορίες meta και οι παραπομπές hreflang αποτελούν μέρος της σελίδας στην κρυφή μνήμη· οι χάρτες ιστότοπου (sitemaps) και τα αρχεία δεν αγγίζονται από την κρυφή μνήμη.

Αν θέλετε επιπλέον να περιορίσετε το φορτίο, αυτή είναι ξεχωριστή απόφαση που μπορείτε να πάρετε συνειδητά – το άρθρωμα δεν σας την επιβάλλει.

Ελαχιστοποίηση HTML και συμπιεσμένη παράδοση

Η κρυφή μνήμη εξοικονομεί όχι μόνο υπολογιστικό χρόνο, αλλά και όγκο δεδομένων. Το άρθρωμα ελαχιστοποιεί το HTML πριν αποθηκευτεί και το παραδίδει συμπιεσμένο, όταν το προσφέρει το πρόγραμμα περιήγησης ή το ρομπότ ανίχνευσης:

  • Ελαχιστοποίηση (παράμετρος website_page_cache.minify): Τα σχόλια HTML παραλείπονται, ο κενός χώρος συγχωνεύεται. Αφαιρείται πλήρως μόνο εκεί όπου το πρόγραμμα περιήγησης τον αγνοεί ούτως ή άλλως, π.χ. ανάμεσα σε στοιχεία μπλοκ. Τα κενά ανάμεσα σε ενσωματωμένα στοιχεία (inline) διατηρούνται, τα pre, textarea και τα σενάρια μένουν αμετάβλητα, τα δομημένα δεδομένα (JSON-LD) ξαναγράφονται συμπαγή. Ανάλογα με τη σελίδα, οι σελίδες γίνονται 10 έως 30 % μικρότερες. Στη δοκιμή με επτά πραγματικές σελίδες, το κείμενο, ο αριθμός στοιχείων, η θέση όλων των στοιχείων και το στιγμιότυπο οθόνης ήταν πανομοιότυπα με το πρωτότυπο. Η πρώτη παράδοση (MISS) είναι ελαχιστοποιημένη ακριβώς όπως κάθε επόμενη (HIT).
  • Συμπίεση (παράμετρος website_page_cache.compress): Οι σελίδες από την κρυφή μνήμη αποστέλλονται με gzip (Content-Encoding: gzip, Vary: Accept-Encoding). Τα μεγάλα πακέτα assets (CSS και JavaScript, έως μερικά MB) τα παραδίδει το ίδιο το Odoo ασυμπίεστα· το άρθρωμα τα συμπιέζει μία φορά, αποθηκεύει το αντίγραφο στον δίσκο και στη συνέχεια τα παραδίδει απευθείας. Έτσι τα 2,1 MB CSS έγιναν 0,27 MB και τα 4,8 MB JavaScript 1,1 MB. Τα παλιά αντίγραφα τα καθαρίζει η εργασία συντήρησης.
  • Μετά από επανεκκίνηση του υπολογιστή: Η κρυφή μνήμη RAM διατηρείται στις επανεκκινήσεις του Odoo, όχι όμως στην επανεκκίνηση του διακομιστή. Γι' αυτό η εργασία συντήρησης την αντικατοπτρίζει σταδιακά στον δίσκο (παράμετρος website_page_cache.persist) και την επαναφέρει κατά την εκκίνηση. Το αν μια επαναφερθείσα εγγραφή εξακολουθεί να ισχύει ελέγχεται από τον ίδιο μηχανισμό όπως κατά τα άλλα: ηλικία και ημερολόγιο αλλαγών. Η ελαχιστοποίηση δεν υπολογίζεται ξανά κατά τη διαδικασία.

Εγκατάσταση και ρυθμίσεις

  1. Λήψη του αρθρώματος: Κατεβάστε τον πηγαίο κώδικα από το GitHub και τοποθετήστε τον σε μια διαδρομή addons της εγκατάστασης Odoo 19: github.com/Alex0176/odoo-website-page-cache
  2. Εγκατάσταση: odoo-bin -d <Datenbank> -i website_page_cache --stop-after-init. Έτσι δημιουργούνται το ημερολόγιο αλλαγών, οι σκανδαλιστές και η εργασία συντήρησης (κάθε 10 λεπτά).
  3. Επανεκκίνηση της υπηρεσίας, ώστε όλες οι διεργασίες εργασίας να φορτώσουν το άρθρωμα.
  4. Άνοιγμα του πίνακα ελέγχου: Ιστότοπος → Αναφορές → Κρυφή μνήμη σελίδων. Ελέγξτε αν η παρακολούθηση αλλαγών είναι πλήρης και επιλέξτε τον τόπο αποθήκευσης (προεπιλογή: αυτόματα).
  5. Έλεγχος: Ζητήστε μια σελίδα καταστήματος ή ιστολογίου δύο φορές και δείτε την κεφαλίδα X-Page-Cache: την πρώτη φορά MISS, έπειτα HIT.

Οι ρυθμίσεις υπάρχουν ως παράμετροι συστήματος (website_page_cache.enabled, .backend, .ttl_hours, .max_mb_file, .max_mb_ram) και συνήθως διαχειρίζονται στον πίνακα ελέγχου. Το άρθρωμα είναι μεταφρασμένο στα γερμανικά. Η απεγκατάσταση αφαιρεί ξανά πλήρως τους σκανδαλιστές, το ημερολόγιο και όλες τις σελίδες στην κρυφή μνήμη.

Συμβουλή για την κρυφή μνήμη RAM: Ο προϋπολογισμός RAM στον πίνακα ελέγχου και το μέγεθος του tmpfs (/dev/shm, επιλογή προσάρτησης size=) πρέπει να ταιριάζουν με την ανάγκη. Και τα δύο τα αναφέρει ο έλεγχος „Χωρά στην κύρια μνήμη;“ με συγκεκριμένες τιμές.

Όρια που πρέπει να γνωρίζετε

  • Σύντομη καθυστέρηση μετά από αλλαγές: Ο δείκτης του ημερολογίου αλλαγών ανανεώνεται κάθε δύο δευτερόλεπτα. Μια αλλαγμένη σελίδα μπορεί έως τότε να παραδίδεται ακόμη στην παλιά εκδοχή.
  • Τα κείμενα που εξαρτώνται από το απόθεμα ενημερώνονται μέσω αλλαγών αποθέματος και της μέγιστης ηλικίας.
  • Εκτίμηση της ανάγκης χώρου: Πρόσθετες εκδοχές ανά τιμοκατάλογο ή χώρα δεν συνυπολογίζονται· προγραμματίστε κάποιο απόθεμα.
  • Όχι υποκατάστατο για όλα: Η κρυφή μνήμη ανακουφίζει τα αιτήματα που επιτρέπεται να εξυπηρετήσει. Συνδεδεμένοι χρήστες, αναζητήσεις και φόρμες συνεχίζουν να περνούν από το Odoo.
  • Η πρώτη κλήση παραμένει αργή: Μετά από επανεκκίνηση του διακομιστή (RAM) ή καθολική αλλαγή, κάθε σελίδα αποδίδεται μία φορά κανονικά, πριν βρεθεί στην κρυφή μνήμη.

Συχνές ερωτήσεις

Τι είναι η κρυφή μνήμη σελίδων για το Odoo;

Ένα άρθρωμα ανοικτού λογισμικού (website_page_cache, Odoo 19, LGPL-3) που παραδίδει δημόσιες σελίδες καταστήματος και ιστολογίου σε ανώνυμους επισκέπτες από μια κρυφή μνήμη, αντί να τις αποδίδει εκ νέου σε κάθε κλήση. Η κρυφή μνήμη βρίσκεται κατ' επιλογήν σε αρχεία ή στην κύρια μνήμη.

Αποκλείει το άρθρωμα μηχανές αναζήτησης ή ρομπότ ανίχνευσης ΤΝ;

Όχι. Οι μηχανές αναζήτησης και οι ευρετηριαστές ΤΝ λαμβάνουν τις ίδιες σελίδες με κάθε άλλο επισκέπτη, απλώς ταχύτερα. Δεν υπάρχει αποκλεισμός, δεν υπάρχει περιορισμός και δεν υπάρχει ξεχωριστή έκδοση για ρομπότ ανίχνευσης.

Αποθηκεύονται αυτόματα ξανά στην κρυφή μνήμη οι αλλαγμένες σελίδες και μεταφράσεις;

Ναι. Οι σκανδαλιστές PostgreSQL αναφέρουν κάθε αλλαγή σχετικών πινάκων σε ένα ημερολόγιο· οι σελίδες που επηρεάζονται απορρίπτονται και στην επόμενη κλήση αποδίδονται εκ νέου και αποθηκεύονται. Οι μεταφράσεις καλύπτονται, επειδή το Odoo 19 τις αποθηκεύει στην ίδια εγγραφή.

Να επιλέξω αρχείο ή RAM;

Κατά κανόνα Αυτόματα: το άρθρωμα χρησιμοποιεί τη RAM εφόσον χωρούν όλες οι σελίδες και διαφορετικά καταφεύγει στα αρχεία. Τα αρχεία ταιριάζουν όταν η κρυφή μνήμη πρέπει να επιβιώνει των επανεκκινήσεων ή όταν η RAM είναι περιορισμένη· η RAM είναι η ταχύτερη παραλλαγή.

Πώς μαθαίνω αν ο ιστότοπός μου χωρά στην κύρια μνήμη;

Στον πίνακα ελέγχου στο Ιστότοπος → Αναφορές → Κρυφή μνήμη σελίδων. Η ενότητα „Χωρά στην κύρια μνήμη;“ μετρά τις σελίδες ανά ιστότοπο και γλώσσα, μετρά το μέγεθος των σελίδων και συγκρίνει την ανάγκη με τον προϋπολογισμό RAM, το μέγεθος του tmpfs και τη διαθέσιμη μνήμη.

Πόση πρόσθετη RAM απαιτείται για κρυφή μνήμη RAM;

Ο πίνακας ελέγχου την αναφέρει σε ξεχωριστή γραμμή. Ο υπολογισμός είναι: ανάγκη = σελίδες × μέγεθος σελίδας· με περιθώριο ασφαλείας διαιρεμένη με 0,8. Επειδή η κρυφή μνήμη επιτρέπεται να χρησιμοποιεί το πολύ το μισό της διαθέσιμης μνήμης, το διπλάσιο αυτής είναι η ελεύθερη απαιτούμενη μνήμη· η διαφορά είναι η πρόσθετη RAM. Αν είναι πολύ μικρός μόνο ο προϋπολογισμός RAM ή το tmpfs, ο πίνακας ελέγχου αναφέρει τη ρύθμιση μαζί με την τιμή-στόχο.

Μπορεί η κρυφή μνήμη να δείξει σε κάποιον ξένο περιεχόμενο;

Όχι. Αποθηκεύεται μόνο για ανώνυμες κλήσεις GET χωρίς παραμέτρους αναζήτησης. Συνδεδεμένοι χρήστες, καλάθια αγορών, φόρμες και αναζητήσεις δεν προέρχονται ποτέ από την κρυφή μνήμη· η γλώσσα, ο τιμοκατάλογος, η φορολογική θέση και η συγκατάθεση για cookies αποτελούν μέρος του κλειδιού.

Πώς απενεργοποιώ την κρυφή μνήμη σε έκτακτη ανάγκη;

Απενεργοποιήστε στον πίνακα ελέγχου τον διακόπτη „Ενεργό“ ή ορίστε την παράμετρο συστήματος website_page_cache.enabled σε 0. Αυτό ισχύει σε όλες τις διεργασίες εργασίας το αργότερο έπειτα από 30 δευτερόλεπτα. Η απεγκατάσταση αφαιρεί επιπλέον τους σκανδαλιστές, το ημερολόγιο και τις σελίδες στην κρυφή μνήμη.

Πώς καταλαβαίνω αν μια σελίδα προήλθε από την κρυφή μνήμη;

Από την κεφαλίδα απάντησης X-Page-Cache: το HIT σημαίνει από την κρυφή μνήμη, το MISS σημαίνει μόλις αποδοθείσα και αποθηκευμένη.

Κάνει το άρθρωμα το HTML μικρότερο και το συμπιέζει;

Ναι. Οι σελίδες στην κρυφή μνήμη ελαχιστοποιούνται συντηρητικά (τα σχόλια και ο περιττός κενός χώρος παραλείπονται, το περιεχόμενο και η εμφάνιση μένουν ίδια) και παραδίδονται με gzip στις επιτυχίες της κρυφής μνήμης· τα πακέτα assets συμπιέζονται μία φορά και παραδίδονται από τον δίσκο. Και τα δύο μπορούν να απενεργοποιηθούν μέσω των παραμέτρων website_page_cache.minify και website_page_cache.compress.

Υποστήριξη από την Biricon IT Services

Ο ιστότοπός σας Odoo αντιδρά νωθρά υπό φορτίο ρομπότ ανίχνευσης ή θέλετε να κάνετε το κατάστημα και το ιστολόγιο ταχύτερα και πιο ορατά; Σας υποστηρίζουμε στην ανάλυση του φορτίου, στη ρύθμιση της κρυφής μνήμης σελίδων, στην διαστασιολόγηση της κύριας μνήμης και των διεργασιών εργασίας και στη πολύγλωσση βελτιστοποίηση για μηχανές αναζήτησης του ιστότοπού σας Odoo. Τον πηγαίο κώδικα του αρθρώματος θα βρείτε στο GitHub.

Επικοινωνήστε μαζί μας τώρα

Κατάσταση: 10 Νοεμβρίου 2026. Οι μετρήσεις προέρχονται από δοκιμαστικό σύστημα με δεδομένα παραδείγματος και δεν αποτελούν δέσμευση για άλλες εγκαταστάσεις.