Επικοινωνία με την υποστήριξη

Απαντάμε μέσω e-mail, συνήθως μέσα σε δύο ημέρες.

Το Google reCAPTCHA ελέγχει αυτή την υποβολή για κατάχρηση· δεδομένα αποστέλλονται στην Google. Το script φορτώνεται μόνο όταν ανοίξει αυτή η φόρμα.

← Όλα τα άρθρα

Συμπίεση του ίδιου αρχείου ξανά και ξανά

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

Μετρήθηκε στις 19 Αυγούστου 2026 σε ήδη ανοιχτή σύνδεση, με τα αρχεία αυτού του ιστότοπου style.css (124 kB) και world.js (102 kB):

χρόνοςbyte
χωρίς συμπίεση2,9 ms124.755
gzip, δυναμικά18,1 ms34.995
brotli, δυναμικά14,5 ms32.685
world.js, gzip47,9 ms38.283
world.js, brotli15,9 ms38.086
χωρίς συμπίεση2,9 msgzip18,1 msbrotli14,5 msworld.js gzip47,9 msworld.js brotli15,9 ms

Σαράντα οκτώ χιλιοστά του δευτερολέπτου CPU ανά αίτημα, για να παραχθεί ένα αποτέλεσμα πανομοιότυπο byte προς byte. Σε έναν μικρό διακομιστή αυτό δεν είναι αμελητέο.

Συμπίεση μία φορά, στον δίσκο

Ένα βήμα δημιουργίας (build) γράφει το συμπιεσμένο αρχείο δίπλα στο πρωτότυπο, και ένας κανόνας rewrite το σερβίρει όταν το πρόγραμμα περιήγησης δηλώνει ότι δέχεται gzip. Η αποστολή ενός έτοιμου αρχείου κοστίζει όσο η αποστολή οποιουδήποτε αρχείου.

gzip αντί για brotli, για έναν βαρετό λόγο: σε αυτό το μηχάνημα δεν είναι εγκατεστημένο εκτελέσιμο brotli. Τα αρχεία βγαίνουν περίπου 7% μεγαλύτερα απ’ ό,τι θα τα έκανε το brotli, και ο χρόνος διακομιστή είναι το ένα πέμπτο από όσο κοστίζει το δυναμικό brotli. Άξιζε να γίνει αυτός ο συμβιβασμός τώρα, αντί να περιμένουμε μια πιο κομψή λύση.

Η έκδοση μπαίνει στο όνομα αρχείου

Η δημιουργία γράφει το style.css.<mtime>.gz, και το ?v= στη σήμανση είναι ακριβώς αυτός ο χρόνος τροποποίησης. Ο κανόνας rewrite ενεργοποιείται μόνο όταν υπάρχει αρχείο με τον αντίστοιχο αριθμό.

Αυτή η διάταξη έχει μια ιδιότητα που αξίζει να σχεδιάζεται σκόπιμα: αν το φύλλο στυλ αλλάξει και ξεχαστεί η νέα δημιουργία, ο αριθμός στη σήμανση δείχνει σε αρχείο που δεν υπάρχει, ο κανόνας rewrite δεν ενεργοποιείται και ο Apache σερβίρει κανονικά το πρωτότυπο. Στη χειρότερη περίπτωση λείπει η επιτάχυνση. Ένα παρωχημένο φύλλο στυλ δεν μπορεί να σταλεί. Κάθε μηχανισμός προσωρινής αποθήκευσης θα έπρεπε να ελέγχεται με αυτό το ερώτημα — όταν κάτι πάει στραβά, γίνεται αργός ή γίνεται λάθος;

Το σφάλμα στη μέση όλων αυτών

Το αρχείο που σερβίρεται είναι ήδη gzip, οπότε δεν πρέπει να συμπιεστεί ξανά κατά την έξοδο. Η ρύθμιση όριζε αρχικά no-gzip, που σταματά τον έναν από τους δύο συμπιεστές του Apache. Ο άλλος, το mod_brotli, συμπίεσε πρόθυμα με brotli το έτοιμο αρχείο gzip, ενώ η κεφαλίδα της απόκρισης εξακολουθούσε να λέει gzip.

Τα προγράμματα περιήγησης λάμβαναν μη αναγνώσιμο περιεχόμενο. Αυτό δεν εντοπίστηκε κοιτάζοντας τη σελίδα — εντοπίστηκε αθροίζοντας τα byte και βρίσκοντας έναν αριθμό που δεν έβγαζε νόημα. Και το no-gzip και το no-brotli χρειάζονται, και μόνο το ένα από τα δύο είναι το προφανές.

Διαφήμιση