تأخير TLS: الميلي ثانية اللي بتبطّأ موقعك من غير ما تحس ⚡

هل الـ HTTPS هو السبب في بطء موقعك؟

مش بالظبط، لكن غالبًا مصافحة TLS (TLS #Handshake) هي السبب.

إحنا كـ مطورين دايمًا بنشتغل على تحسين استعلامات قاعدة البيانات، بنستخدم كاش، وضبط استخدام وحدة المعالجة المركزية… الخ بس قليل قوي اللي بيبص على مصافحة TLS، اللي ممكن تزود وقت كل اتصال جديد بـ 350–500 ميلي ثانية أو أكتر من غير ما ناخد بالنا.

تعالوا نفهم الموضوع ببساطة 👇

في عالم الأداء العالي (High-Performance Applications)، كل ميلي ثانية بتفرق، وواحدة من أكتر الحاجات اللي مش واخدة حقها في التحسين هي وقت مصافحة TLS.

🔍 يعني إيه تأخير TLS؟

TLS هو البروتوكول اللي بيأمن الاتصال بين المتصفح والسيرفر، بس في البداية بيحتاج يعمل شوية حاجات:

– كذا راوند من التبادل

– التحقق من الشهادة

– تبادل مفاتيح التشفير (زي #ECDHE أو #RSA)

– يعني أول مرة تبعت فيها طلب HTTPS مش هيوصل فورًا، هيعدي على:

– تحليل الـ DNS

– TCP Handshake

– TLS Handshake

وبعدين يبدأ يبعَت طلب #HTTP

⏱ الإجمالي: ممكن يوصل لـ 400+ ميلي ثانية قبل السيرفر حتى ما يبدأ يرد.

🧪 جربت على موقعي الشخصي، مرتين:

نتيجة الأولى:

DNS Lookup:    0.247556s

TCP Connection:  0.385730s

TLS Handshake:   0.534450s

Server Processing: 0.672430s

Total Time:    0.811581s

نتيجة التانية:

DNS Lookup:    0.003662s

TCP Connection:  0.142494s

TLS Handshake:   0.286136s

Server Processing: 0.421756s

Total Time:    0.558700s

📌 ركز على مصافحة TLS:

في الأولى: خدت حوالي 534 ملّي ثانية

في التانية: خدت حوالي 286 ملّي ثانية

يعني نص اجمالي وقت الطلب ضاع بس علشان نثبت الثقة قبل حتى ما نبعَت بيانات!

🧠 ليه TLS بياخد وقت؟

لأنه بيعمل كذا خطوة:

– يحدد نوع التشفير اللي هيستخدمه

– يتأكد من الشهادة بتاعة السيرفر

– يبدّل مفاتيح التشفير

– ممكن كمان يعمل فحص إذا كانت الشهادة موقوفة (#OCSP/CRL)

– وكل ده بيتم على أكتر من راوند #TCP

⚙️ أعمل إيه علشان أقلل تأخير TLS؟

فيه شوية حاجات ممكن تساعدك تحسن ده:

✅ استخدم TLS 1.3

– أسرع من TLS 1.2

– المصافحة بتتم في راوند واحد بدل اتنين

✅ فعّل HTTP/2 أو HTTP/3

– بيعيد استخدام نفس الاتصال

– وبيقلل عدد المصافحات المطلوبة

✅ فعّل Session Resumption

– بيرجع يستخدم نفس الجلسة للمستخدمين اللي رجعوا

– وبيختصر المصافحة

✅ فعّل OCSP #Stapling

– بيخلي السيرفر يجهّز التحقق من الشهادة، مش المتصفح

✅ استخدم Keep-Alive

– ومتنساش تفعّله في الأدوات زي #Guzzle

✅ استفيد من الكاش

– في production، استخدم Keep-Alive و Connection Pooling

❓ ليه النتيجة التانية كانت أسرع من الاولي؟

– كاش #DNS اشتغل

أول مرة: 0.247s

تاني مرة: 0.003s

يعني الجهاز خزّن الـ IP من أول مرة

– اتصال TCP وTLS كان لسه دافي (Warm Start)

السيرفر والـ OS لهم دور في حفظ البيانات

– سلسلة الشهادات اتخزنت

– التصفح الأول خزّن كل التفاصيل، فالتاني مش محتاج يعيدهم

المسار بتاع الشبكة استقر

🔬 مثال علي موقع Google:

DNS Lookup: 0.021602s

TCP Connection: 0.355201s

TLS Handshake: 0.718044s

Server Processing: 1.375661s

Total Time: 1.378316s

💡 الخلاصة

لو موقعك سريع من جوه، بس الطلبات بطيئة، بص على الطبقات اللي قبل ما الكود يشتغل، ممكن تلاقي السبب في #TLS أو الشبكة.

كل ميلي ثانية بتفرق… واحتمال كبير السرعة بتروح في المصافحة مش في الكود!

تابعني للمزيد 👈 Khaled Alam

#BackendOptimization

#Latency

Leave a Reply

Your email address will not be published. Required fields are marked *