Оригиналът е на endtimes и предизвика голям интерес и много коментари
Колкото по-малък е даден уеб сайт, толкова по-бързо се зарежда, което е съвсем логично и не е за учудване.
Интересното е, че една уеб страница с размер 14 KB се зарежда много по-бързо в сравнение с подобна страница с размер 15 KB. Разликата във времето на зареждане е около 612 милисекунди въпреки че разликата между 15 KB и 16 KB е минимална.
Причината за това е алгоритъмът за забавено стартиране на TCP. Тук ще обясним защо това е важно и как всъщност работи този алгоритъм, който се използва във всекидневието. Да започнем с основите.
Какво е TCP
Transmission Control Protocol (TCP) е начин за използване на Internet Protocol (IP) за надежден обмен на мрежовите пакети. Протоколът е известен и като TCP/IP.
Когато браузърът отправя запитване към вашия уеб сайт (или към изображение в него или, към таблицата със стиловете и т.н.), той осъществява това запитване с помощта на HTTP.
HTTP от своя страна е надстройка над TCP и едно HTTP запитване се състои от множество TCP мрежови пакети.
Самият IP (интернет протокол) е само една система за изпращане на мрежови пакети от една точка на интернет към друга. IP няма възможност да провери дали даден мрежови пакет все пак е стигнал до крайната точка.
Когато имаме работа с уеб сайтове е важно да знаем дали всички данни са пристигнали и са получени, понеже в противен случай цели фрагменти от уеб страниците може да се окажат изгубени. Разбира се, има и друг начин за използване на уеб пространството като например, стриймване на видео, но тук няма да се спираме върху това.
TCP е разширение на IP, което дава възможност на браузъра и на сървъра с уеб сайтовете да си съобщят, че мрежовите пакети са успешно получени.
Сървърът изпраща няколко мрежови пакета и очаква отговор от браузъра, с което той съобщава, че пакетите са получени – това се нарича потвърждение на приемането (acknowledgement, ACK). Ако сървърът не е получил ACK, то той отново изпраща няколко мрежови пакета.
Какво е забавеният старт на TCP?
Бавният старт на TCP (TCP slow start) е алгоритъм, който се използва от сървърите за определяне на това, колко мрежови пакета могат да бъдат изпращани наведнъж.
Пропускателната способност (bandwidth) на канала е обемът на данните, които е възможно да бъдат изпратени чрез мрежовия канал за единица време и обикновено се измерва като битове в секунда. Като аналогия може да посочим задачата за тръбата и водата – това е количеството вода, което може да премине през водата за една секунда.
Вашият сървър няма как да предварително да знае какъв обем от данни може да премине през дадена мрежова връзка и затова предварително изпраща неголямо количество надеждни данни, като обикновено това са 10 TCP пакета.
Ако тези мрежови пакети успешно са стигнали до посетителя на сайта, то неговият компютър потвърждава приемането (ACK) и успешното получаване на тези пакети.
След това сървърът изпраща нови данни, като този път удвоява броя на мрежовите пакети. Този процес се повтаря докато не започнат загуби на мрежови пакети.
Това всъщност е съвсем краткото обяснение на алгоритъма за забавения старт на TCP. В реалността се използват различни версии на този алгоритъм, но това е основата.
Откъде се взеха тези 14 KB?
Забавеният старт на TCP повечето сървъри започват с изпращането на 10 TCP мрежови пакета, като максималният размер на един TCP пакет е 1500 байта. Този максимум не е определен от TCP спецификациите, а от Ethernet стандарта. Във всеки един TCP мрежови пакет са заделени 40 байта за заглавия – 16 байта за IP и допълнителни 24 байта за TCP.
Тоест, за всеки TCP пакет остават 1460 байта информация, а 10 пакета са 10 x 1460 = 14600 байта или приблизително 14 KB!
Тоест, ако успеете да поберете вашия уеб сайт или, което е може би по-важното, неговите най-критични части във въпросните 14 KB, то ще икономисате много време на своите посетители, което се изразходва за прехвърляне на данните пред назад – между сървъра на уеб сайта и потребителския компютър.
Колко дълъг може да бъде този път дотам и обратно?
Хората са много нетърпеливи, а една разходка напред-назад е удивително дълга и зависи от латентността…
Латентността (latency) е времето необходимо на даден пакет от данни за неговото прехвърляне от източника до крайната точка. Казано по друг начин, това е времето необходимо на една капка вода да влезе в тръбата и да излезе от другия край. Това забавяне е твърде неприятно.
Сателитният интернет
Сателитният интернет от стария тип се предоставя от спътник в орбита около Земята. Той се използва предимно в места с много ниска плътност на населението, на нефтените платформи, круизните морски съдове и за Wi-Fi в самолетите по време на полет.
За да дадем пример за ужасна латентност нека да си представим, че сондьорите от нефтената платформа в средата на океана са забравили картите и заровете вкъщи и сега хората искат да използват сайта missingdice.com (под 14 KB), за да играят Dungeons & Dragons.
И така, един от тях с помощта на своя смартфон се опитва да посети тази уеб страница…
Телефонът изпраща сигнал до Wi-Fi рутера, който прехвърля тези данни към сателитната чиния на нефтената платформа. Нека да бъдем по-щедри и да приемем, че тук забавянето е 1 милисекунда.
След това сателитната чиния трябва да изпрати тези данни до спътника, който се намира в орбита около Земята.
Обикновено за тази цел се използват сателити в геостационарна орбита на височина 35786 километра над повърхността на Земята. Радиовълните (и светлината) се движат със скорост 299792458 метра в секунда и изпратеното от Земята съобщение ще достигна сателита след 120 милисекунди. След това сателитът ще изпрати свое съобщение до наземната станция, което ще отнеме още 120 милисекунди.
После наземната станция трябва да изпрати подаденото запитване към тази точка на Земята, където е разположен сървърът. Да напомним, че през оптичния кабел светлината се движи по-бавно и скоростта е някъде около 200 милиона метра в секунда. Ако разстоянието между наземната станция и сървъра е колкото от Ню Йорк до Лондон, то сигналът ще пристигне след около 28 милисекунди, но ако става дума за разстоянието между Ню Йорк и Сидни, то тогава това забавяне ще бъде около 80 милисекунди. Нека да вземем средно 60 милисекунди, още повече, че това значение е удобно за пресмятанията.
След това сървърът трябва да обработи запитването, което става за около 10 милисекунди, след което изпраща запитаната информация.
И отново трябва да се измине същия път – наземна станция, през космоса към сателита, след това към Wi-Fi рутера и до смартфона на сондьора .
Или това са 10 + ( 1 + 120 + 120 + 60 ) x 2 = 612 милисекунди.
Това са допълнителни 612 милисекунди, които се добавят при всеки обмен на информация. Може да не ви изглежда много, но за да бъдат изпратени първите ресурси на уеб сайта ще трябва да се извършат многобройни обмени на данни, които многократно пътуват по този дълъг път.
Освен това, преди първоначално да бъде изминат този път HTTPS протоколът има нужда от два допълнителни обмена на данни, което ни дава 1836 милисекунди! Почти 2 секунди…
А каква е латентността на сушата?
Може да ви се стори, че нарочно сме избрали лошия пример със сателитния интернет. Аз го избрах, защото протичащите процеси при него са по-лесни за обяснение. Всъщност, за живеещите на сушата често пъти латентността е още по-голяма
- В hpbn.co можем да видим, че латентността на 2G мобилната мрежа е в диапазона от 300 до 1000 милисекунди
- 3G мрежите са с латентност от 100 до 500 милисекунди
- Шумът в мобилната връзка, особено когато имаме много хора в една и съща клетка, внася допълнително забавяне
- Сървърите започват да се бавят при много голям трафик
- При прекъсване на връзката се губят мрежови пакети, заради което се налага още един път да протекат процесите по изпращането на данните напред назад, за да бъдат получени изгубените мрежови пакети
Как може да използваме правилото за 14-те KB?
Разбира се, можете да направите своя уеб сайт колкото се може по-малък, понеже навярно обичате и уважавате своите посетители и искате те да останат доволни. Идеята всяка една уеб страница във вашия сайт да е под 14 KB е една много добра.
Тези 14 KB могат да съдържат компресирани данни с големина около 50 KB, което е доста щедро. Да напомня, че бордовият компютър на Аполо 11 имаше само 72 KB памет.
След като премахнете видеата с автоматичното започване на възпроизвеждането, изскачащите прозорци, текстовите бисквитки, разрешаващите бисквитки на банерите, бутоните на социалните мрежи, скриптовете за следене на потребителите, Javascript и CSS фреймуърковете и всичките останали боклуци, които на никой не му харесват, може и да постигнете тази цел.
Но дори и с всички сили да се се опитали да се поберете в тези 14 KB, а не можете, правилото за 14-те KB си остава полезно.
Опитайте се да направите така, че първите 14 KB от подаваните на потребителите данни да се използват за показването на нещо полезно. Това биха могли да бъдат например, някакви критично важни CSS, JS и първите няколко абзаца от текст, които обясняват как да се използва вашето приложение (съвсем произволен пример).
Забележка: тези 14 KB включват и HTTP заглавията, които няма как да бъдат компресирани (дори с използването на HTTP/2 при първия отговор). Същото е положението и с изображенията, което означава, че е по-добре първоначално да се подадат изображенията, които се намират в началото на вашата уеб страница (или страници), като е добре тези изображения да бъдат колкото се може по-малки. Вместо използването на цялото изображение можете да използвате временни малки иконки, които да подсказват на посетителите, че могат да очакват нещо интересно.
Някои особености при използването на това правило
Правилото за 14-те KB не е фундаментален закон, а обикновено емпирично правило:
- Някои сървъри използват по-широк прозорец на забавения TCP старт с от 10 до 30 мрежови пакета
- Понякога сървърът знае, че може да започне с по-голям брой пакети, понеже е използвал TLS handshake и по този начин е разбрал, че може да започне с по-широк прозорец
- Сървърите могат да кешират известно количество мрежови пакети, които връзката със сигурност ще издържи, и следващия път да изпратят повече пакети
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!