المستوى: مبتدئ — وقت قراءة تقريبي: 7 دقائق
لو موقعك بيستدعي API على دومين خارجي زي Stripe أو Google Maps أو Cloudinary، أول طلب فيهم بيدفع ضريبة حوالي 240ms قبل ما ينقل بايت واحد من المحتوى. الضريبة دي اسمها DNS lookup + TCP handshake + TLS negotiation. سطرين HTML بسيطين اسمهم preconnect و dns-prefetch بيخلّوا المتصفح يدفع الضريبة دي مبكرًا، فأول طلب فعلي يطلع تقريبًا فوريًا.
Resource Hints: السرعة بتيجي قبل ما تطلب أي حاجة
المشكلة باختصار
أي طلب HTTPS لدومين جديد بيمر بأربع مراحل قبل ما ينقل أي بيانات حقيقية:
- DNS lookup — تحويل الاسم لـ IP. يستغرق 40 إلى 120ms على شبكة 4G.
- TCP handshake — ثلاث رسائل بين العميل والسيرفر (SYN, SYN-ACK, ACK). 60 إلى 80ms.
- TLS handshake — تبادل المفاتيح وإثبات الهوية. 60 إلى 100ms في TLS 1.3.
- أول طلب HTTP فعلي — هنا فقط بتبدأ تنقل بايت من المحتوى.
المجموع: حوالي 240ms قبل أي بايت من البيانات. لو الصفحة بتستدعي ثلاث دومينات خارجية، الضريبة دي بتتدفع لكل واحد فيهم. والأسوأ: المتصفح ميقدرش يبدأ التحضير ده إلا بعد ما يقرأ الـ HTML الأول ويلاقي إن في طلبات لـ third-party.
مثال للمبتدئ: جرس الشقة
تخيّل إنك بتزور صديق في عمارة ما رحتلهاش قبل كده. لازم تعمل أربع خطوات قبل ما تدخل الشقة: تسأل البواب على رقم الشقة، تتأكد إنه فاكر اسم صاحبك، تطلع بالأسانسير للدور الصحيح، وتدق الجرس. لو صاحبك بعتلك رسالة قبل ما تيجي قال للبواب إنك جاي وقفل الأسانسير على دوره، أنت لما توصل بتدق الجرس على طول. قطعت 90% من وقت الانتظار. ده بالظبط اللي بيعمله preconnect مع المتصفح.
التعريف الدقيق
Resource Hints هي توجيهات قصيرة بنكتبها للمتصفح عبر تاج <link> في الـ head، أو عبر ترويسة HTTP اسمها Link. التوجيه بيقول للمتصفح: "ابدأ تجهّز الاتصال أو الملف ده دلوقتي، أنا هحتاجه قريب". المتصفح بينفّذ التوجيهات دي على CPU وnetwork idle، بمعنى إنها مش بتأخّر رسم الصفحة. الـ specification موثّقة في W3C Resource Hints ومدعومة في Chrome وFirefox وSafari من سنة 2017.
الأنواع الأربعة المهمة
dns-prefetch: يحلّ DNS فقط للدومين. تكلفة شبه صفر على المتصفح.preconnect: يعمل DNS + TCP + TLS كاملة. أغلى من ناحية الذاكرة، لكن أقوى توفير.prefetch: حمّل ملف هيتطلب في الصفحة التالية بأولوية منخفضة.preload: حمّل ملف الصفحة الحالية محتاجاه دلوقتي بأولوية عالية.