Web Performance

Γιατί το Time to First Byte σας είναι αργό και τι να κάνετε γι’ αυτό

Το TTFB δεν είναι ένα μεμονωμένο bug. Είναι η ορατή καθυστέρηση που προκαλείται από DNS, ρύθμιση σύνδεσης, δρομολόγηση CDN, εργασία server, αστοχίες cache και, μερικές φορές, ένα αργό ερώτημα βάσης δεδομένων.

The Wux Webtools Team The Wux Webtools Team 3 λεπτά ανάγνωσης Βοηθούμενος από AI, ελεγμένος από άνθρωπο
A simplified network path from a browser to a CDN and origin server showing points where latency can occur.
Πίνακας περιεχομένων
  1. Ξεκινήστε με το τι πραγματικά μετρά το TTFB
  2. Τι θεωρείται αργό TTFB;
  3. Μετρήστε το σε περισσότερα από ένα σημεία
  4. 1. Browser developer tools
  5. 2. Synthetic tests από πολλές περιοχές
  6. 3. Real user monitoring ή server logs
  7. Οι συνήθεις αιτίες αργού TTFB
  8. Το HTML σας δεν γίνεται cached
  9. Το CDN σας κάνει cache μόνο τα assets
  10. Ο server σας κάνει υπερβολικά πολλά πριν απαντήσει
  11. Τα database queries είναι αργά ή απρόβλεπτα
  12. Η εφαρμογή σας έχει cold starts
  13. Τα redirects σπαταλούν το πρώτο request
  14. Μια πρακτική ακολουθία debugging
  15. Step 1: Δοκιμάστε το κύριο έγγραφο, όχι μόνο ολόκληρη τη σελίδα
  16. Step 2: Συγκρίνετε περιοχές
  17. Step 3: Ελέγξτε τα response headers
  18. Step 4: Ελέγξτε το origin timing
  19. Step 5: Διορθώστε τη μεγαλύτερη επιβεβαιωμένη καθυστέρηση
  20. Διορθώσεις που συνήθως λειτουργούν
  21. Κάντε cache το δημόσιο HTML στο edge
  22. Μετακινήστε τη μη κρίσιμη εργασία έξω από το request path
  23. Μειώστε τις αλυσίδες backend dependencies
  24. Φέρτε το compute πιο κοντά στους χρήστες
  25. Κρατήστε τα redirects βαρετά
  26. Τι να μην κάνετε
  27. Η ψύχραιμη εκδοχή του σχεδίου

Ξεκινήστε με το τι πραγματικά μετρά το TTFB

Το Time to First Byte, συνήθως συντομευμένο ως TTFB, είναι ο χρόνος μεταξύ του αιτήματος ενός πόρου από τον browser και της λήψης του πρώτου byte της απόκρισης.

Ακούγεται σαν μετρική server, αλλά δεν είναι μόνο μετρική server. Το TTFB περιλαμβάνει αρκετά βήματα:

  • DNS lookup, αν το hostname δεν έχει ήδη επιλυθεί
  • Ρύθμιση σύνδεσης TCP
  • Διαπραγμάτευση TLS για HTTPS
  • Χρόνος μετάβασης του αιτήματος προς τον server ή το CDN edge
  • Αναμονή σε ουρά και επεξεργασία στον server
  • Χρόνος επιστροφής της απόκρισης στον browser

Έτσι, ένα υψηλό TTFB μπορεί να σημαίνει ότι το backend σας είναι αργό. Μπορεί επίσης να σημαίνει ότι ο χρήστης βρίσκεται μακριά από το origin σας, ότι το CDN σας είναι λανθασμένα ρυθμισμένο, ότι η cache σας έχει συνεχώς misses ή ότι ο server σας ξοδεύει υπερβολικά πολύ χρόνο αποφασίζοντας τι να στείλει.

Αυτό έχει σημασία επειδή το TTFB βρίσκεται κοντά στην αρχή της αλυσίδας φόρτωσης. Αν το έγγραφο HTML φτάσει αργά, ο browser ανακαλύπτει αργά και τα CSS, JavaScript, fonts και images. Μπορεί να έχετε εξαιρετική βελτιστοποίηση front-end και παρ’ όλα αυτά η εμπειρία να φαίνεται αργή αν η πρώτη απόκριση εγγράφου χρειάζεται 1,5 δευτερόλεπτο.

Τι θεωρείται αργό TTFB;

Δεν υπάρχει ένας καθολικός αριθμός που να ταιριάζει σε κάθε site, περιοχή και αρχιτεκτονική. Παρ’ όλα αυτά, τα πρακτικά όρια βοηθούν.

Η καθοδήγηση του web.dev από τη Google ταξινομεί ένα καλό TTFB ως κάτω από 800 ms, με τα 800–1800 ms να χρειάζονται βελτίωση και πάνω από 1800 ms να θεωρούνται κακά. Για μια καλά cached marketing page που εξυπηρετείται κοντά στον χρήστη, συχνά μπορείτε να πετύχετε πολύ καλύτερα αποτελέσματα από αυτό. Για ένα σύνθετο authenticated dashboard που κάνει δυναμική εργασία, ο αποδεκτός αριθμός μπορεί να είναι υψηλότερος, αλλά θα πρέπει και πάλι να μπορεί να εξηγηθεί.

Η σημαντική συνήθεια είναι να τμηματοποιείτε τον αριθμό. Ένας παγκόσμιος μέσος όρος TTFB 900 ms μπορεί να κρύβει απόκριση 150 ms για χρήστες κοντά στο CDN edge σας και απόκριση 2200 ms για χρήστες σε άλλη περιοχή. Αντίστοιχα, η homepage σας μπορεί να είναι εντάξει, ενώ οι σελίδες αναζήτησης, κατηγοριών ή logged-in είναι αθόρυβα επώδυνες.

Μετρήστε το σε περισσότερα από ένα σημεία

Μην διαγιγνώσκετε το TTFB από ένα μόνο Lighthouse run. Το Lighthouse είναι χρήσιμο, αλλά είναι ένα test από ένα περιβάλλον. Αν είστε νέοι στην ερμηνεία του, ξεκινήστε με μια ψύχραιμη ανάγνωση για το πώς να διαβάζετε ένα Lighthouse report χωρίς πανικό — το βασικό μάθημα είναι να διαχωρίζετε τα εργαστηριακά σήματα από την πραγματικότητα στο πεδίο.

Για το TTFB, θέλετε τουλάχιστον τρεις οπτικές:

1. Browser developer tools

Ανοίξτε το Network panel, κάντε reload με απενεργοποιημένη cache και εξετάστε το κύριο αίτημα εγγράφου. Η ανάλυση timing δείχνει τις φάσεις DNS, connection, TLS, waiting και download. Η φάση «waiting» είναι συχνά αυτό που οι άνθρωποι εννοούν ως backend time, αν και μπορεί να περιλαμβάνει upstream latency.

2. Synthetic tests από πολλές περιοχές

Εκτελέστε tests από τοποθεσίες κοντά και μακριά από τους χρήστες σας. Αν το TTFB είναι χαμηλό σε μία περιοχή και υψηλό σε άλλη, υποψιαστείτε γεωγραφία, CDN routing, τοποθέτηση origin ή κάλυψη cache πριν ξαναγράψετε application code.

3. Real user monitoring ή server logs

Τα field data σας δείχνουν τι βιώνουν οι πραγματικοί χρήστες σε συσκευές, δίκτυα και sessions. Τα server logs μπορούν να σας πουν αν το origin παρήγαγε απόκριση γρήγορα. Η διαφορά μεταξύ του TTFB που παρατηρεί ο client και του χρόνου επεξεργασίας στο origin είναι συχνά το σημείο όπου εμφανίζονται ζητήματα CDN και δικτύου.

Οι συνήθεις αιτίες αργού TTFB

Το HTML σας δεν γίνεται cached

Αυτό είναι το πιο συνηθισμένο ζήτημα σε content sites και ecommerce sites. Τα static assets γίνονται cached επιθετικά, αλλά το έγγραφο HTML — αυτό που χρειάζεται πρώτα ο browser — παράγεται σε κάθε αίτημα.

Μερικές φορές αυτό είναι απαραίτητο. Συχνά δεν είναι.

Αν μια δημόσια σελίδα αλλάζει λίγες φορές την ημέρα, πιθανότατα δεν θα έπρεπε να απαιτεί fresh database render για κάθε ανώνυμο επισκέπτη. Χρησιμοποιήστε full-page caching, edge caching, static generation ή μοτίβα stale-while-revalidate όπου είναι κατάλληλο.

Ελέγξτε τα response headers για σήματα όπως Cache-Control, CDN-Cache-Status, Age, Vary και Set-Cookie. Μια σελίδα που στέλνει ένα μοναδικό cookie σε κάθε επισκέπτη μπορεί κατά λάθος να κάνει τον εαυτό της uncacheable. Αν χρειάζεστε έναν πρακτικό τρόπο να σκεφτείτε αυτό το επίπεδο, οι ίδιες συνήθειες debugging στον οδηγό μας για redirects και HTTP headers σε production εφαρμόζονται άμεσα στη δουλειά γύρω από το TTFB.

Το CDN σας κάνει cache μόνο τα assets

Πολλές ομάδες προσθέτουν ένα CDN και υποθέτουν ότι η δουλειά της απόδοσης έχει τελειώσει. Αλλά αν το CDN εξυπηρετεί μόνο images, CSS και JavaScript, το πρώτο αίτημα HTML μπορεί ακόμα να ταξιδεύει μέχρι έναν μοναδικό origin server.

Αυτό μπορεί να είναι εντάξει για ένα site τοπικής επιχείρησης με τοπικούς χρήστες. Δεν είναι εντάξει για ένα διεθνές κοινό. Όσο πιο μακριά είναι ο χρήστης από το origin, τόσο περισσότερη καθυστέρηση πληρώνετε πριν καν ξεκινήσει η backend εργασία.

Η καλή ρύθμιση CDN για TTFB συνήθως σημαίνει:

  • Κάντε cache το δημόσιο HTML όπου είναι ασφαλές
  • Σεβαστείτε τους σκόπιμους κανόνες bypass για authenticated ή personalized pages
  • Αποφύγετε περιττά Vary headers που διασπούν την cache υπερβολικά λεπτομερώς
  • Χρησιμοποιήστε cache purging ή revalidation αντί να απενεργοποιείτε πλήρως την cache
  • Επιβεβαιώστε ότι τα edge locations εξυπηρετούν πράγματι hits, όχι ότι προωθούν κάθε αίτημα

Ένα CDN δεν είναι μαγεία. Είναι ένα επίπεδο cache και routing. Αντιμετωπίστε το έτσι.

Ο server σας κάνει υπερβολικά πολλά πριν απαντήσει

Ένα αργό backend path μπορεί να προέλθει από πολλές μικρές καθυστερήσεις: database queries, API calls, template rendering, feature flag checks, authentication, personalization, logging και cold starts.

Το χειρότερο μοτίβο είναι η σειριακή εργασία εξαρτήσεων. Για παράδειγμα:

  1. Fetch page data
  2. Then fetch related products
  3. Then fetch pricing
  4. Then call a recommendations service
  5. Then render HTML

Αν κάθε βήμα περιμένει το προηγούμενο, το TTFB αυξάνεται γρήγορα. Εκτελέστε παράλληλα την ανεξάρτητη εργασία, αφαιρέστε μη κρίσιμα calls από την πρώτη απόκριση και κάντε cache τα δαπανηρά αποτελέσματα.

Ένας χρήσιμος κανόνας: αν ο χρήστης δεν μπορεί να δει ή να χρησιμοποιήσει το αποτέλεσμα αμέσως, πιθανότατα δεν θα έπρεπε να μπλοκάρει το first byte.

Τα database queries είναι αργά ή απρόβλεπτα

Οι βάσεις δεδομένων συχνά προκαλούν προβλήματα TTFB επειδή συμπεριφέρονται καλά στο development και κακά υπό πραγματική κίνηση. Missing indexes, μεγάλα joins, N+1 queries, lock contention και υπερμεγέθη result sets εμφανίζονται όλα ως «ο server είναι αργός».

Μην μαντεύετε εδώ. Καταγράψτε query timings για αργά requests. Κοιτάξτε p95 και p99, όχι μόνο averages. Μια σελίδα που συνήθως απαντά σε 120 ms αλλά περιστασιακά μπλοκάρει για 4 δευτερόλεπτα θα εξακολουθεί να δημιουργεί κακή εμπειρία χρήστη.

Συνηθισμένες διορθώσεις περιλαμβάνουν:

  • Προσθήκη ή διόρθωση indexes
  • Αφαίρεση μοτίβων N+1 query
  • Caching read-heavy data
  • Pagination μεγάλων queries
  • Μετακίνηση reporting ή analytics queries εκτός request time
  • Ορισμός λογικών timeouts για downstream calls

Η εφαρμογή σας έχει cold starts

Οι serverless και containerized πλατφόρμες μπορούν να είναι εξαιρετικές, αλλά τα cold starts μπορούν να βλάψουν το TTFB όταν η κίνηση είναι bursty ή οι περιοχές είναι under-provisioned.

Αν το πρώτο request μετά από idle time είναι πολύ πιο αργό από τα επόμενα requests, διερευνήστε τα cold starts. Μπορεί να χρειαστείτε provisioned concurrency, μικρότερα bundles, λιγότερες startup dependencies, warmer functions ή διαφορετικό deployment shape για latency-sensitive routes.

Αυτό δεν είναι επιχείρημα κατά του serverless. Είναι επιχείρημα κατά του να προσποιούμαστε ότι το runtime model είναι αόρατο.

Τα redirects σπαταλούν το πρώτο request

Ένα redirect προσθέτει έναν ακόμη request-response κύκλο πριν ο browser λάβει το τελικό έγγραφο. Ένα redirect από http:// σε https:// μπορεί να είναι αναπόφευκτο για παλιά links, αλλά οι αλυσίδες είναι σπατάλη.

Συνηθισμένες αλυσίδες περιλαμβάνουν:

  • http://example.comhttps://example.comhttps://www.example.com
  • trailing slash normalization μετά το protocol normalization
  • geo ή language redirects πριν από cache lookup
  • legacy campaign links που περνούν από πολλά URLs

Διορθώστε τα source links όπου είναι δυνατό, συμπτύξτε τους κανόνες redirect και κάντε τα canonical URLs άμεσα. Ο χρόνος redirect δεν αναφέρεται πάντα ως TTFB για το τελικό request, αλλά ο χρήστης εξακολουθεί να τον πληρώνει.

Μια πρακτική ακολουθία debugging

Όταν το TTFB φαίνεται αργό, χρησιμοποιήστε αυτή τη σειρά. Αποφεύγει το συνηθισμένο λάθος της βελτιστοποίησης application code πριν επιβεβαιωθεί η συμπεριφορά cache και routing.

Step 1: Δοκιμάστε το κύριο έγγραφο, όχι μόνο ολόκληρη τη σελίδα

Βρείτε το request για το έγγραφο HTML. Καταγράψτε το συνολικό TTFB και την ανάλυση timing. Επαναλάβετε με και χωρίς browser cache. Δοκιμάστε μια δημόσια σελίδα, μια dynamic page και μια logged-in page αν είναι σχετικό.

Step 2: Συγκρίνετε περιοχές

Εκτελέστε το ίδιο URL από αρκετές γεωγραφικές τοποθεσίες. Αν οι αργές περιοχές συσχετίζονται με την απόσταση από το origin, δώστε προτεραιότητα στο CDN και στο edge caching. Αν κάθε περιοχή είναι αργή, κοιτάξτε την backend επεξεργασία και τη χωρητικότητα του origin.

Step 3: Ελέγξτε τα response headers

Αναζητήστε cache headers, cookies, Age, CDN status και Vary. Ένα missing Age header ή επαναλαμβανόμενα cache misses είναι ενδείξεις. Ένα ευρύ Vary: Cookie header σε δημόσιο HTML είναι συχνά cache killer.

Step 4: Ελέγξτε το origin timing

Προσθέστε server timing instrumentation. Το Server-Timing header μπορεί να εκθέσει backend phases όπως database time, render time και upstream API time. Ακόμα και απλές ετικέτες είναι χρήσιμες:

Server-Timing: db;dur=82, render;dur=41, api;dur=210

Τώρα τα browser timings σας μπορούν να δείξουν αν ο server ξόδεψε 300 ms σε πραγματική εργασία ή αν η καθυστέρηση συνέβη πριν το request φτάσει στην εφαρμογή σας.

Step 5: Διορθώστε τη μεγαλύτερη επιβεβαιωμένη καθυστέρηση

Αυτό ακούγεται προφανές, αλλά οι ομάδες συχνά διορθώνουν αυτό που τους είναι οικείο αντί για αυτό που έχει μετρηθεί. Αν κυριαρχούν τα cache misses, διορθώστε το caching. Αν κυριαρχεί η βάση δεδομένων, διορθώστε τα queries. Αν το TLS και το connection setup κυριαρχούν για global users, διορθώστε το routing, την κάλυψη CDN ή τη γεωγραφία του origin.

Η front-end εργασία εξακολουθεί να έχει σημασία. Fonts, images και JavaScript επηρεάζουν αυτό που συμβαίνει αφού φτάσει το HTML. Αλλά δεν υποκαθιστούν μια γρήγορη πρώτη απόκριση. Αν εργάζεστε επίσης πάνω στην render performance, τα web fonts παραμένουν μία από τις ευκολότερες νίκες σε πολλά sites, επειδή επηρεάζουν το πόσο γρήγορα το κείμενο γίνεται usable αφού φτάσει το έγγραφο.

Διορθώσεις που συνήθως λειτουργούν

Κάντε cache το δημόσιο HTML στο edge

Για marketing pages, documentation, blogs, landing pages και category pages, το edge caching είναι συχνά η μεγαλύτερη βελτίωση στο TTFB. Χρησιμοποιήστε σύντομα TTLs αν το περιεχόμενο αλλάζει συχνά. Χρησιμοποιήστε stale-while-revalidate αν το ελαφρώς stale περιεχόμενο είναι αποδεκτό ενώ η cache ανανεώνεται στο background.

Να είστε προσεκτικοί με το personalization. Αν μια σελίδα διαφοροποιείται ανά currency, language, login state ή experiment group, ορίστε αυτές τις παραλλαγές ρητά. Η τυχαία per-user variation καταστρέφει την cache efficiency.

Μετακινήστε τη μη κρίσιμη εργασία έξω από το request path

Email sending, analytics enrichment, recommendation generation, webhook calls και heavy logging σπάνια θα έπρεπε να μπλοκάρουν το first byte. Βάλτε τα σε queues ή εκτελέστε τα αφού ξεκινήσει η απόκριση.

Μειώστε τις αλυσίδες backend dependencies

Εκτελέστε παράλληλα τα ανεξάρτητα calls. Κάντε cache τις αποκρίσεις από αργά APIs. Ορίστε timeouts. Σχεδιάστε fallback content για services που είναι χρήσιμα αλλά όχι απαραίτητα.

Ένα αργό recommendations widget δεν θα έπρεπε να καθυστερεί ολόκληρη τη product page.

Φέρτε το compute πιο κοντά στους χρήστες

Αν οι χρήστες σας είναι global και το origin σας βρίσκεται σε μία περιοχή, το latency είναι δομικό. Το CDN caching μπορεί να το κρύψει σε μεγάλο βαθμό για δημόσιο περιεχόμενο. Για dynamic content, εξετάστε regional deployments, edge rendering για κατάλληλα routes ή μετακίνηση APIs πιο κοντά στο κοινό.

Κρατήστε τα redirects βαρετά

Κάντε canonicalize τα URLs σε ένα hop. Ενημερώστε τα internal links ώστε οι χρήστες και οι crawlers να πηγαίνουν απευθείας στον τελικό προορισμό. Ελέγξτε παλιά campaign URLs και platform migrations. Τα redirects είναι εύκολο να αγνοηθούν επειδή είναι αόρατα όταν λειτουργούν, αλλά εξακολουθούν να κοστίζουν χρόνο.

Τι να μην κάνετε

Μην κυνηγάτε έναν τέλειο αριθμό TTFB για κάθε route. Ένα authenticated report που εκτελεί πραγματικό computation δεν θα συμπεριφέρεται όπως ένα cached blog post.

Μην χρησιμοποιείτε το average TTFB ως τη μοναδική σας μετρική. Τα percentiles έχουν σημασία. Η γεωγραφία έχει σημασία. Ο τύπος σελίδας έχει σημασία.

Μην υποθέτετε ότι ένα CDN σημαίνει πως το HTML σας είναι cached. Επαληθεύστε το.

Και μην αντιμετωπίζετε το TTFB ως ξεχωριστό από τις product decisions. Personalization, experimentation, real-time inventory και third-party services έχουν όλα κόστος latency. Κάποια αξίζουν. Κάποια είναι απλώς συνήθεια.

<!-- tool-cta:start -->

💡 Δοκιμάστε αυτό: Κατά τη διάγνωση του TTFB, το Get Headers αποκαλύπτει την κατάσταση της cache, τους χρόνους του διακομιστή και τις ανακατευθύνσεις που συχνά εξηγούν από πού προέρχεται η καθυστέρηση.

<!-- tool-cta:end -->

Η ψύχραιμη εκδοχή του σχεδίου

Ένα αργό TTFB συνήθως διορθώνεται μόλις σταματήσετε να το αντιμετωπίζετε ως ένα αόριστο «πρόβλημα server». Μετρήστε το document request. Τμηματοποιήστε ανά περιοχή και τύπο σελίδας. Ελέγξτε headers. Συγκρίνετε client timing με origin timing. Έπειτα διορθώστε το μεγαλύτερο επιβεβαιωμένο bottleneck.

Τα περισσότερα sites δεν χρειάζονται εξωτική αρχιτεκτονική. Χρειάζονται λιγότερα αποφευκτά cache misses, λιγότερη blocking backend work, καθαρότερα redirects και μια πιο σαφή ιδέα για το τι πρέπει να συμβεί πριν σταλεί το first byte.

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

Είναι το TTFB μετρική Core Web Vitals;
Όχι. Το TTFB δεν είναι ένα από τα Core Web Vitals, αλλά επηρεάζει έντονα μετρικές όπως το Largest Contentful Paint, επειδή ο browser δεν μπορεί να κάνει render σημαντικό περιεχόμενο μέχρι να ανακαλυφθούν το έγγραφο και οι εξαρτώμενοι πόροι του.
Ποιος είναι ένας καλός στόχος TTFB;
Ως γενικό benchmark, κάτω από 800 ms θεωρείται καλό από το web.dev. Για cached public pages, πολλές ομάδες μπορούν να στοχεύσουν χαμηλότερα. Για σύνθετα authenticated routes, εστιάστε στη συνέπεια, στα percentiles και στο αν η καθυστέρηση δικαιολογείται.
Θα διορθώσει αυτόματα το TTFB η προσθήκη ενός CDN;
Όχι απαραίτητα. Ένα CDN βελτιώνει το TTFB μόνο αν μειώνει το routing latency ή εξυπηρετεί cached responses. Αν κάθε HTML request προωθείται στο origin, το CSS και οι images σας μπορεί να είναι γρήγορα ενώ το έγγραφο παραμένει αργό.
Μπορεί η βελτιστοποίηση JavaScript να βελτιώσει το TTFB;
Συνήθως όχι άμεσα για παραδοσιακές server-rendered pages. Το JavaScript επηρεάζει parsing, rendering και interactivity αφού ξεκινήσει η απόκριση. Το TTFB αφορά κυρίως το να φτάσει το πρώτο byte της απόκρισης στον browser.
Γιατί το TTFB μου είναι αργό μόνο για logged-in users;
Οι logged-in pages είναι δυσκολότερο να γίνουν cached επειδή είναι personalized. Το αργό TTFB εκεί συχνά προέρχεται από database queries, permission checks, API calls, session handling ή server-side rendering εργασία που δεν μπορεί να μοιραστεί μεταξύ χρηστών.

Πηγές & περαιτέρω ανάγνωση

  1. web.dev: Optimize Time to First Byte
  2. MDN Web Docs: PerformanceResourceTiming.responseStart
  3. W3C: Server Timing
  4. RFC 9111: HTTP Caching
Σχετικά με τον συγγραφέα
The Wux Webtools Team

Τελευταία ενημέρωση:

Συνεχίστε την ανάγνωση

Web Performance

Γιατί ο ιστότοπός σας πρέπει να στέλνει λιγότερα αιτήματα, όχι μικρότερα

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

2 λεπτά ανάγνωσης