- वेबसाइट का आकार 14kB या उससे कम रखने पर 15kB होने की तुलना में लोडिंग स्पीड को काफ़ी कम किया जा सकता है
- यह घटना TCP slow start algorithm की वजह से होती है, जहाँ शुरुआती डेटा ट्रांसफर सीमा के कारण महसूस होने वाली स्पीड में फ़र्क आता है
- 14kB आम तौर पर सर्वर द्वारा शुरुआत में भेजे जाने वाले 10 TCP packets की क्षमता के बराबर होता है
- सैटेलाइट इंटरनेट जैसी उच्च latency वाली परिस्थितियों में एक अतिरिक्त round trip (RTT) से 612ms या उससे अधिक की देरी हो सकती है
- व्यवहार में, मुख्य कंटेंट को 14kB से कम में रखना या पहले 14kB के भीतर महत्वपूर्ण resources को रखना वेब परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के लिए प्रभावी है
अवलोकन और मुख्य सिद्धांत
- वेबसाइट का आकार जितना छोटा होगा, वह उतनी जल्दी लोड होगी — यह एक अच्छी तरह ज्ञात तथ्य है
- लेकिन 14kB से 15kB पर जाते ही पहली response speed में नाटकीय अंतर आना अपेक्षा से बाहर की बात है
- 15kB और 16kB पेज के बीच स्पीड का अंतर मामूली होता है, लेकिन 14kB और 15kB के बीच अधिकतम 612ms का अंतर हो सकता है
TCP क्या है
- Transmission Control Protocol (TCP), IP (Internet Protocol) के ऊपर काम करता है और packets की विश्वसनीय डिलीवरी सुनिश्चित करता है
- वेब ब्राउज़र HTTP request के समय कई TCP packets भेजता है
- केवल IP इस्तेमाल करने पर यह पता नहीं चलता कि packet पहुँचा या नहीं, इसलिए TCP packet receipt confirmation (ACK) की सुविधा देता है
- सर्वर पहले थोड़ी संख्या में packets भेजता है, और ब्राउज़र से ACK मिलने पर अतिरिक्त packets भेजता है
- ACK न मिलने पर packet retransmission प्रक्रिया शुरू होती है
TCP slow start क्या है
- TCP slow start एक algorithm है जिसमें सर्वर नेटवर्क कनेक्शन की गुणवत्ता (bandwidth) समझने के लिए चरणबद्ध तरीके से packet ट्रांसमिशन बढ़ाता है
- कनेक्शन की शुरुआत में सर्वर केवल थोड़ी संख्या में packets भेजता है, आम तौर पर 10
- विज़िटर के कंप्यूटर से ACK सही तरह आने पर packet ट्रांसमिशन की मात्रा दोगुनी कर दी जाती है
- अगर ACK छूट जाए, तो उसके बाद packets धीमी गति से भेजे जाते हैं
- वास्तविक algorithm के विवरण implementation के हिसाब से अलग हो सकते हैं, लेकिन मूल विचार एक ही है
14kB सीमा का आधार
- ज़्यादातर सर्वर slow start में 10 TCP packets एक साथ भेजते हैं
- TCP packet का अधिकतम आकार 1500 bytes होता है, लेकिन header (40 bytes) हटाने पर 1460 bytes वास्तविक डेटा के लिए बचते हैं
- इसलिए 10 x 1460 = 14600 bytes (लगभग 14kB) पहली ट्रांसमिशन की ऊपरी सीमा है
- अगर वेबसाइट या महत्वपूर्ण resources को 14kB या उससे कम में रखा जाए, तो शुरुआत में अतिरिक्त round trip delay के बिना दिखाया जा सकता है
एक round trip कितनी बड़ी देरी पैदा कर सकता है
सैटेलाइट इंटरनेट उदाहरण
- उच्च latency वाले माहौल का प्रतिनिधि उदाहरण सैटेलाइट इंटरनेट उपयोगकर्ता हैं, जैसे तेल ड्रिलिंग रिग या क्रूज़ शिप पर मौजूद लोग
- मोबाइल फ़ोन से होमपेज request भेजने पर router → satellite antenna → space satellite → ground station → server तक हर चरण में दर्जनों से सैकड़ों ms लग सकते हैं
- पूरे transmission round trip में दो बार अंतरिक्ष मार्ग, नेटवर्क खंडों की यात्रा और सर्वर प्रोसेसिंग शामिल होने से लगभग 612ms की अतिरिक्त देरी हो सकती है
- HTTPS इस्तेमाल करने पर अतिरिक्त handshake के कारण यह 1836ms तक बढ़ सकता है
स्थलीय नेटवर्क की latency
- 2G, 3G जैसे मोबाइल नेटवर्क में भी 100~1000ms तक latency हो सकती है
- भीड़भाड़, सर्वर ओवरलोड, packet loss जैसी अलग-अलग परिस्थितियों में अतिरिक्त देरी हो सकती है
14kB नियम लागू करने की वेबसाइट ऑप्टिमाइज़ेशन रणनीति
- वेबसाइट या पेज को जितना संभव हो उतना छोटा बनाना सबसे अहम है
- आदर्श रूप से हर पेज का compressed transfer size 14kB या उससे कम होना चाहिए
- compression लागू होने पर वास्तविक content ~50kB तक शामिल हो सकता है
- autoplay video, popup, tracker, अनावश्यक JS/CSS जैसे अधिकांश गैर-ज़रूरी तत्वों को घटाकर यह आसानी से हासिल किया जा सकता है
- अगर पूरे पेज को 14kB में समेटना मुश्किल हो, तो पहले 14kB में core resources और मुख्य content (CSS, JS, मुख्य text आदि) को प्राथमिकता से रखना महत्वपूर्ण है
- HTTP headers (compress नहीं किए जा सकते), images (केवल ज़रूरी न्यूनतम/दिखने वाले हिस्से को लोड करना या placeholder लगाना) भी 14kB के भीतर गिने जाते हैं
14kB नियम के अपवाद और आधुनिक protocol मुद्दे
- 14kB नियम बहुत अधिक सामान्यीकरण नहीं है, लेकिन कुछ अपवाद मौजूद हैं
- कुछ सर्वर initial window को 30 packets तक बढ़ाते हैं
- TLS handshake के ज़रिए बड़ा window स्वीकार करने की संभावना हो सकती है
- route के हिसाब से भेजे जा सकने वाले packet count को cache करके अगली connection पर और अधिक भेजा जा सकता है
- HTTP/2 में भी सर्वर का TCP slow start के साथ 10 packets से शुरू करना आम तौर पर नहीं बदला है
- HTTP/3, QUIC में भी 14kB नियम आधिकारिक रूप से अनुशंसित है
सारांश और संदर्भ सामग्री
- तकनीकी आधार और अतिरिक्त व्याख्या से जुड़ी सामग्री हर लिंक के ज़रिए देखी जा सकती है
- पहली बार प्रकाशित: 2022-08-25, हाल में संशोधित: 2022-08-26, लेखक: Nathaniel, संबंधित टैग: वेब परफ़ॉर्मेंस, HTTP, TCP
संदर्भ लिंक
- Ethernet frame और TCP header संरचना, latency और bandwidth से जुड़ी अतिरिक्त सामग्री, TCP/QUIC specification आदि
1 टिप्पणियां
Hacker News राय
सॉफ़्टवेयर डेवलपर्स को मीडिया लेयर पर थोड़ा ज़्यादा ध्यान देने की ज़रूरत है, खासकर 3G/5G की reliability और latency के बारे में लेखक ने जो बात कही वह प्रभावशाली है। रेडियो में लगभग हमेशा retransmission होता है, और ज़्यादातर HTTP संचार में UI अपडेट होने के लिए packets का क्रम में पहुँचना ज़रूरी होता है। वास्तव में, एक अकेला REST request भी तभी सचमुच एक packet में संभलता है जब request और response दोनों 1400 bytes से कम हों। इससे बड़ा होने पर वह ‘single’ request असल में कई packets में बँट जाता है। इनमें से किसी एक में भी समस्या हुई तो स्क्रीन के सही तरह अपडेट होने के लिए सारे packets का क्रम में पहुँचना ज़रूरी हो जाता है। अगर इसे आज़माना हो तो Chrome DevTools में 3G mode और packet loss चालू करके टेस्ट करें; सिर्फ़ एक छोटी optimization से भी UI responsiveness में बड़ा सुधार दिखेगा। इसलिए API और UI को जितना संभव हो उतना छोटा रखने का एक ठोस कारण है
मेरे homepage का transfer size compression के बाद 7.0kB है
14kB का लक्ष्य थोड़ा चुनौतीपूर्ण है, लेकिन initial 10 packets के भीतर सीमित रखने का विचार भी दिलचस्प है। मेरी तरह वेबसाइट आकार पर ध्यान देने वाले projects में 512kb.club भी है। वहाँ sites के size की तुलना golf score की तरह होती है। मेरी site(anderegg.ca) में registration से पहले सभी resources जोड़कर 71kB आया था। इसी project की वजह से मुझे Cloudflare Radar के बारे में पता चला, जिसमें site analysis और page size मापने के लिए अच्छा tool है। इसका मुख्य उद्देश्य पूरे internet का dashboard है, लेकिन इसमें page size analysis tool भी शामिल है
अगर आप इसे थोड़ा और मज़ेदार प्रयोग बनाना चाहें, तो initial window (IW) size server side पर सेट की जा सकती है। उदाहरण के लिए इसे इस तरह बदला जा सकता है
नीचे दिए गए लेख की बात भी यहाँ लागू होती है: Cloudflare ब्लॉग - रूस के ISP सिर्फ़ पहले 16KB तक अनुमति दे रहे हैं, जिससे सामान्य वेब ब्राउज़िंग लगभग असंभव हो गई. Cloudflare analysis के अनुसार, रूसी ISPs अपने देश के उपयोगकर्ताओं के लिए internet throttling करके हर web asset के सिर्फ़ पहले 16KB तक ही लोड होने दे रहे हैं
जो लोग TCP Slow Start नहीं जानते और जो लोग वेबसाइट लोडिंग latency के सूक्ष्म स्तर तक परवाह करते हैं, उनके बीच overlap बहुत कम है। startups को पहले startup पर ध्यान देना चाहिए, और सिर्फ़ बड़ी कंपनियों के पास ही ऐसी optimization पर अटकने की गुंजाइश होती है
मेरा homepage 17.2KB है! (dependencies छोड़कर) मैंने अपनी personal page पर वाकई बहुत optimization की और Lighthouse में 100 में 100 score भी हासिल किया। पहले लगा था यह नामुमकिन होगा, लेकिन हो गया। और हाँ, यह Rails में बना है। ऐसी optimization वास्तव में करने लायक है। बिना किसी sluggishness के बिजली की तरह खुलने वाले pages का अनुभव अपने आप में बहुत संतोषजनक है
मुझे लगता है कि लेख में दो तार्किक कमज़ोरियाँ हैं
आज की पीढ़ी simple static websites भी Next.js जैसे frameworks से बनाती है। यह देखकर अफ़सोस होता है कि HTML+CSS+js का दौर जैसे ढल रहा है
latency ही नहीं, resource consumption को कम करना भी टिकाऊ भविष्य के लिए ज़रूरी शर्त है। network का पर्यावरण पर प्रभाव भी बिल्कुल छोटा नहीं है। टिप्पणियों का व्यंग्यात्मक माहौल थोड़ा निराशाजनक लगा। यह optimization कोई अंतिम समाधान का युग नहीं है, लेकिन energy usage में कमी के असर पर और ज़ोर होना चाहिए