Дата публикации:

High-Performance Browser Networking в 2к23

patchcord.jpg

Ко своему стыду, за столько лет профессиональной разработки, я избегал сети и всё, что с ними связанно. Они всегда казались очень запутанными и неприступными. Чего только стоит размер томика Танненбаума “Компьютерные сети”. От одного вида этой книжки у меня коленки трясутся. Так бы и ходил неучем, если бы один мой хороший знакомый не посоветовал мне прочитать книгу “High Performance Browser Networking”. Недавно мы с коллегами дочитали эту книгу и я захотел написать на нёё обзор.

Как я набрёл на эту книгу

Я давно хотел закрыть один большой пробел в своих знаниях - сеть и всё, что с нею связанно. Но меня всегда пугали ресурсы по этой теме. Чего только стоит размер томика Танненбаума “Компьютерные сети”. От одного вида этой книжки у меня коленки трясутся.

Так бы и ходил неучем, если бы один мой хороший знакомый не посоветовал мне прочитать книгу “High Performance Browser Networking”. Он сказал, что это очень хорошая выжимка для того, кто хочет изучить базово сети. Не чтобы написать свой протокол, а чтобы его приложения работали хорошо. На мой скепсис по поводу слова “Browser” в названии он порекомендовал просто пропустить главы в которых обсуждается браузерное API.

Самому читать скучно, поэтому я предложил книжку в повестку Книжного Клуба нашей команды и теперь, когда мы её, наконец, дочитали, могу написать на неё отзыв. Если кратко: Читать стоит. Даже пропуская главы с браузерным API, контента очень много и он после 10 лет с даты выхода книги всё ещё актуален, пока 5G и Wifi 6 ещё не захватили мир.

Что нового я узнал для себя

В чем на практике различаются ТСР и UDP

Я знал приблизительное устройство этих двух базовых протоколов, но никогда и не задумывался о том, какие на самом деле сценарии применения есть у каждого из них. Для меня, например UDP всегда выглядел как низкоуровневый протокол с ограниченным применением. Но вот выпустили недавно спеку НТТР/3 и меня совсем не удивило, что в этой ревизии отказались от ТСР, ведь я теперь знаю, что UDP не страдает от Head-of-Line blocking.

Лучше грузить всё за один раз

Раньше я думал, что лучше грузить данные по чуть-чуть, чем всё что нужно за раз. Но, как оказалось, из-за особенностей устройства механизма энергосбережения LTE, лучше перевести антенну в высокоэнергетический режим и скачать всё сразу , чем будить её через время, когда она вернулась в IDLE. Это и батарейку сэкономит и позволит за более короткое время скачать большой кусок данных.

В НТТР 2 есть server push

Оказывается, в НТTР/2 сервер может посылать несколько ответов на один запрос. Кажется, что таким образом можно сделать ленивую погрузку данных эффективнее. Например, загрузить сначала количество элементов, а потом дожидаться данных в конкретных из них. Ну, или заменить WebSockets в ряде кейсов. Я, правда, ещё не успел это применить. Если есть опыт в этом - напиши в комментах, мне очень интересно.

Разобрался “на пальцах” с TLS, NAT, P2P и WebRTC

Кое-какие темы для меня вообще были непаханным полем. Эта книга помогла подойти к их изучению структурно. И теперь я более-менее понимаю что это за аббривеатуры и какие процессы за ними стоят.

Вывод. Читать или нет?

В итоге мне книга понравилась. В ней есть хорошие вводные про устройство сетей с точки зрения создания клиентов. Главы, специфичные для браузера, я пропустил. Местами не хватало современных данных или данных не касающихся Штатов (например, про покрытие LTE в РФ). Но в целом, это всё гуглится. Кажется, что книга, написанная 10 лет назад должна потерять свою актуальность, но медленный адопшн 5G, Wifi 6 и тот факт что НТТР 3 только-только получил стандартизацию даёт ей ещё пару лет на полке. Книга бесплатная, поэтому как минимум начать читать точно стоит.

Если знаешь ещё достойные книги по этой теме, то смело неси их в комментарии! Я бы почитал что-нибудь специфичное про Android или более современное издание с новыми плюшками.

Подпишись и обсуждай в Telegram