предисловие
Давно не вел блог, мой первоначальный заголовок был«XXX от входного URL до загрузки страницы завершено»?
Но вдумайтесь, это контент, который много раз пережевывали другие, он не сложный, и слишком много мест, которые можно оптимизировать в процессе работы страницы.
Тогда просто копай себе яму, или оставайся на год в отделе разработки эксплуатации и сопровождения.
В этой статье постараемсяЭксплуатация и техническое обслуживание передних и задних концов или множества углов, описать оптимизацию всего сайта от разбора до работы.
1. Обзор процесса
1. Серия событий от ввода URL до парсинга в браузере
Многие интервью в крупных компаниях любят задавать такой вопрос на собеседовании, введите URL-адрес, чтобы увидеть, что случилось со страницей? , Сегодня подведем итоги. Вкратце, есть следующие процессы
- Введите URL в браузере
- DNS(
DNS), найдите IP-сервер - положить начало
TCPсоединять,HTTPТрехстороннее рукопожатие, отправить запрос (Request) - Сервер отвечает HTTP (ответ)
- Ресурсы загрузки браузера
html css js imagesЖдать - Код парсинга браузера (если на сервере
gzipСжатие, браузер сначала распаковывает) - Браузер отображает презентацию для пользователя
2. Объедините страницы действий, чтобы закрыть вкладки
Мы делаем что-то после рендеринга страницы:
- кнопка повторный щелчок
- действие прокрутки
- Условный поиск запроса
Поместим вышеизложенное в==> 8. Работа интерфейса
ещеШаг 3. Инициируйте TCP-соединениеВставить перед:
- Браузер разрешил оптимизацию одновременных запросов
Начнем с разрешения DNS...
2. Процесс разрешения DNS
кChromeБраузер в качестве примера:
-
Chrome сначала будет искать в собственном кеше DNS браузера.
(Время кеша относительно короткое, по умолчанию всего 1 минута, и он может вместить только 1000 кешей)
Примечание:
chrome://net-internals/#dnsДля просмотраChromeсобственный кеш)
- Если соответствующая запись не найдена в собственном кеше браузера, то
Chromeбудет искать собственный кэш DNS операционной системы
-
Windows- существуетWindowsПосмотреть вDNSПроцесс кэширования записей очень прост. Просто откройте командную строку и введите следующую команду:ipconfig /displaydns. -
Mac- существуетMacСмотреть наDNSПроцесс кэширования записей немного отличается. Сначала вам нужно открыть консольное приложение, выбрать устройство на левой боковой панели и ввести:any:mdnsresponderВойдите в строку поиска. Далее откройте командную строку и введите следующую команду:sudo log config --mode "private_data:on" sudo killall -INFO mDNSResponderЗатем вернитесь в консольное приложение и просмотрите список кешированных DNS-записей. Например, на скриншоте ниже показано
wx.qlogo.cnтайникCNAMEЗаписывать.
-
Если он также не найден в кэше DNS системы, то попробуйте прочитать
hostsдокумент. Проверьте, есть ли IP-адрес, соответствующий доменному имени, если да, то разрешение выполнено успешно.- Примечание:
WindowsродыC:\Windows\System32\drivers\etc,Macявляется/etc/hosts. - Это разрешение доменных имен на уровне операционной системы часто используется злоумышленниками, изменяющими
hostsСодержимое файла разрешает доменное имя в указанноеipадрес, что привело к так называемому захвату доменного имени, поэтомуhostsФайл установлен в режим только для чтения, чтобы предотвратить злонамеренное вмешательство.
- Примечание:
-
если в
hostsЕсли соответствующая запись не найдена в файле, браузер инициируетDNSсистемный вызов для запроса локального сервера именlocalDNS(LDNS) для разрешения доменного имени.
- пройти через
UDPсогласие наDNS53 для инициирования запроса, этот запрос является рекурсивным запросом, то есть операторомDNSСервер должен
должны предоставить намIPадрес)
- Первый запрос будет сделан к локальному серверу имен (
LDNS) для разрешения этого доменного имени. Этот сервис обычно находится в углу вашего города, не очень далеко, и его производительность очень хорошая. Обычно он кэширует результаты разрешения доменного имени, и около 80% разрешения доменного имени заканчивается здесь. - Если на локальном сервере разрешения доменных имен нет записи доменного имени, запустите рекурсивное + итеративное разрешение.
К этому моменту все разрешение DNS, которое может сделать браузер, было завершено, и следующие шаги связаны с сервером. Вы можете игнорировать то, что не хотите видеть.
- если
localDNSПо-прежнему нет хитов, просто идите прямо кRoot ServerСервер доменных имен запрашивает разрешение. - Корневой сервер имен возвращает запрошенный первичный сервер имен локальному серверу имен (
gTLD Server)адрес.gTLDявляется международным сервером доменных имен верхнего уровня, таким как.com,.cn,.orgПодождите, в мире их всего 13 или около того. - локальный сервер имен
localDNSодин шаг назадgTLDСервер отправляет запрос. - принятие запроса
gTLDСервер находит и возвращает соответствующее доменное имяName ServerАдрес сервера доменных имен, этоName ServerОбычно это сервер доменных имен, зарегистрированный пользователем, например, доменное имя, примененное пользователем в поставщике услуг доменных имен, затем задача разрешения доменного имени выполняется сервером поставщика доменных имен. -
Name ServerСервер доменных имен будет запрашивать сохраненную таблицу сопоставления между доменными именами и IP-адресами.При нормальных обстоятельствах целевой IP-адрес будет получен в соответствии с доменным именем, а значение TTL будет возвращено на сервер.DNS ServerСервер доменных имен. - Возвращает доменное имя
IPа такжеTTLстоимость,LDNSбудет кэшировать это доменное имя иIPСоответствующее отношение времени кэширования определяется выражениемTTLконтроль стоимости. - Результат разрешения возвращается пользователю, и пользователь кэширует его в кэше локальной системы в соответствии со значением TTL, и процесс разрешения доменного имени завершается.
Примечание. В реальном процессе разрешения DNS может быть больше, чем эти 11 шагов (шаг 1 фактически может быть проигнорирован), напримерName ServerУровней может быть много, а может быть и одинGTMдля управления балансировкой нагрузки, что может повлиять на процесс разрешения доменного имени.
Если вы не хотите видеть текст, вы можете посмотреть на картинку:
3. Оптимизация DNS
Прежде всего, необходимо уточнить: в кэше DNS есть многоуровневые кэши, по удаленности от браузера они бывают следующих типов:
- кеш браузера
- системный кеш
- кеш маршрутизатора
-
IPSкеш сервера - кеш корневого сервера имен
- Кэш ДВУ
- Кэш основного сервера имен.
Не слишком ли много времени нужно каждый раз анализировать так много шагов? Как я могу уменьшить шаги в этом процессе?
тогда нужноDNSулучшен. А во фронтенд-оптимизации сDNSВ нем есть два момента:
- уменьшать
DNSзапросов -
DNSготовить
DNS Поскольку это основной протокол Интернета, оптимизаторы веб-сайтов легко упускают из виду его скорость анализа. Большинство новых браузеров теперь оптимизированы для разрешения DNS, типичногоDNSзатраты на синтаксический анализ20-120Миллисекунды, сокращение времени и времени разрешения DNS — хороший метод оптимизации. Я не буду говорить об этом здесь, сосредоточьтесь наDNSПредварительно разберите его.
3.1 Передняя часть:DNS prefetch
DNS prefetchЭто позволяет разрешению доменного имени с этим атрибутом в фоновом режиме без нажатия пользователем ссылки, а разрешение доменного имени и загрузка содержимого являются последовательными сетевыми операциями, поэтому этот метод может сократить время ожидания пользователя и улучшить взаимодействие с пользователем.
По умолчанию браузер предварительно выбирает доменное имя страницы и текущее доменное имя (доменное имя просматриваемой веб-страницы), которые не находятся в одном и том же домене, и кэширует результат, который является неявным.DNS Prefetch.
Если вы хотите предварительно выбрать поля, которые не отображаются на странице, используйте отображаемыйDNS Prefetch.
Его использование также очень просто, еслиlinkДобавьте к метке соответствующий атрибут:
/* 这是用来告知浏览器当前页面要做DNS预解析 */
<meta http-equiv="x-dns-prefetch-control" content="on" />
<link rel="dns-prefetch" href="//example.com">
- Если вашей странице необходимо посетить много ресурсов с разными доменными именами, вы можете использовать эту технологию, чтобы ускорить получение ресурсов, чтобы получить лучший пользовательский опыт.
- должны знать о том,
DNSПодготовка хорошая, но злоупотреблять ею нельзя. Если предварительное разрешение DNS повторяется для нескольких страниц, количество запросов DNS будет увеличено.
В настоящее время многие крупные сайты также применили эту оптимизацию, например:
Таобао:
Цзиндон:
Если вам нужно отключить неявноеDNS Prefetch, вы можете использовать следующие теги:
<meta http-equiv="x-dns-prefetch-control" content="off">
3.2 Серверная часть и эксплуатация и техническое обслуживание:CDNа такжеHTTPDNS
На самом деле, есть три оптимизации, которые можно выполнить для серверной части, эксплуатации и обслуживания:
CDNHTTPDNSDNSБалансировка нагрузки
Однако для немного более крупных веб-сайтов от решения по балансировке нагрузки DNS в основном отказываются, и у него слишком много недостатков. Желающие могут поискать сами.
1. CDNа такжеDNSцикл
CDN, полное имяContent Delivery Network, сеть распространения контента. Его цель - пройти существующуюInternetдобавить новый слойCACHEУровень (кэш) публикует содержимое веб-сайта на узле, ближайшем к «краю» сети пользователя, чтобы пользователь мог получить требуемый контент поблизости и повысить скорость отклика пользователя, посещающего веб-сайт.
DNSЦикл: Когда властьDNSОбнаружено, что доменное имя сопоставляется с несколькимиIP, буду использоватьIPголосованиеIPравномерно распределить на несколькоDNSзапрос, чтобы добиться эффекта балансировки нагрузки.
зачем нужноCDN?
- из-за
DNSРаспределение равномерно распределено в течение цикла, и распределение не может быть оптимизировано в соответствии с нагрузкой на разные серверы, даже если один сервер выйдет из строя,DNSне может вовремя узнать ситуацию и поставить серверIPЕсли он будет выделен, это вызовет недоступность. - Поэтому в авторитете
DNSи сервер добавляетCDNслой необходим. -
CDNОсновываясь на возможности планировать и распределять серверы, он может синхронизировать условия работы серверов, а затем своевременно корректировать политику планирования в зависимости от ситуации, тем самым значительно улучшая способность балансировки нагрузки.
CDNвыгода:
- Решить проблему «первой мили» на стороне сервера.
- Смягчить или даже устранить влияние узких мест во взаимосвязи между различными операторами.
- Смягчить давление на экспортную пропускную способность провинций.
- Снизить нагрузку на магистральную сеть.
- Оптимизировано распространение горячего онлайн-контента.
CDNШаги доступа:
(1) не развертывается перед применением CDN:
Путь сетевого запроса:
- Запрос: локальная сеть (локальная сеть) — «сеть оператора —» серверная комната приложений
- Ответ: серверная комната приложений - "сеть оператора -" локальная сеть (локальная сеть)
Не рассматривая сложную сеть, от запроса к ответу нужно пройти3узлы,6шаги для завершения операции доступа пользователя.
(2) После развертывания приложения CDN:
сетевой путь:
-
Запрос: локальная сеть (локальная сеть) - "сеть оператора
-
Ответ: Операторская сеть — «Собственная сеть (LAN)
Не рассматривая сложную сеть, от запроса к ответу нужно пройти2узлы,2шаги для завершения операции доступа пользователя.
с развертыванием и безCDNпо сравнению с сервисом1узлы,4доступ шаг за шагом. Значительно улучшить скорость отклика системы.
Ниже приведены шаги в сочетании с конкретной работой и обслуживанием сети:
step1:用户向localDNS发起请求查询输入域名对应的IP地址(若有缓存直接返回,否则去rootDNS查询);
step2:localDNS迭代向rootDNS查询,逐级迭代,rootDNS=>顶级DNS=>权限DNS;
step3:获得权限DNS后,localDNS向权限DNS发起域名解析请求;
step4:权限DNS通常会将域名CNAME
【如果有有CNAME则解析CNAME对应的CDN服务,否则的话默认为普通请求,直接返回解析到的IP】到另一个域名,这个域名最终会被指向CDN网络中的智能DNS负载均衡系统;
step5:DNS负载均衡系统通过一些智能算法,将最合适的CDN节点IP地址返回给localDNS;
step6:localDNS将获得的IP地址返回给用户;
step7:用户得到节点的IP地址后,向该节点发起访问请求;
step8:CDN节点返回请求文件,如果该节点中请求的文件不存在,就会再回到源站获取这个文件,然后返回给用户。
2. HTTPDNS:решитьDNSУгон:
По обычному впечатлению, много раз я чувствовал, что сайт законченHTTPSсоглашениеVANS. вообще-то нет:
- несмотря на использование
HTTPSтехнологии, часть гнусных операторов, до сих пор используютDNSТехнология загрязнения, заставляющая доменные имена указывать на их собственные серверы. - И эти серверы не развернуты
SSLСлужба (даже если развернута, вызоветSSLСертификатCommon nameНесогласованный сигнал тревоги), что приводит к прямому отклонению порта 443.
Операторы действуют недобросовестно, чтобы заработать на рекламе и сэкономить межсетевой расчет. Их общий метод угона черезISPкоторый предоставилDNSПоддельные доменные имена. Есть ли способ решить этоDNSЧто насчет угона?
В отрасли есть набор решений для таких сценариев, а именноHTTPDNS:
HTTPDNSиспользоватьHTTPпротокол разрешения доменных имен, заменяющий существующийUDPпротокол DNS, запросы на разрешение доменного имени отправляются непосредственно наHTTPDNSсервера, тем самым минуя оператораLocal DNS, можно избежатьLocal DNSВ результате возникает проблема захвата доменного имени и неточного планирования.
HTTPDNSПринцип прост, т.DNSЭтот легко перехватываемый протокол преобразуется для использованияHTTPЗапрос протоколаDomain <-> IPкарта. быть правымIPПозже,ClientСобери самHTTPсоглашение, чтобы избежатьISPфальсифицированные данные.
Tencent первой предоставилаHttpDNSУ поставщика облачных услуг сервиса есть две статьи, опубликованные с разницей в четыре года, в которых подробно описаны технические детали:
- [Сеть Goose Factory] Как создается служба HttpDNS на уровне 100 миллиардов?
- [Сеть Goose Factory] Новая идея глобального точного планирования трафика - Подробное объяснение службы HttpDNS
Продолжение следует...
Следующий разговор о содержанииHTTP 优化Два генеральных направления ::
- Уменьшите количество запросов.
- Сократите время, затрачиваемое на один запрос.
Соответствующее содержание:
- оптимизация одновременных запросов, разрешенных браузером,
nginxКонвергенция расхождений в конфигурации/доменах. - Сжатие и слияние ресурсов,
webpack/GzipСвязанный. - И другие интересные материалы...
Сборник статей автора Nuggets
Если вам нужно перепечатать его в публичный аккаунт, просто позвоните мне и добавьте его в белый список.
- Руководство "True® Full Stack Road" для веб-интерфейсной разработки
- «Практика Vue» — плагин Vue CLI за 5 минут
- Вооружите свой интерфейсный проект «Практикой Vue»
- «Intermediate and Advanced Front-End Interview» JavaScript Рукописный код Invincible Cheats
- «Узнайте из исходного кода» ответы на вопросы Vue, которые интервьюеры не знают
- JS-операция «Узнать из исходного кода» в исходном коде Vue
- «Учитесь на основе исходного кода» полностью разбирайтесь в параметрах Vue.
- Правильная позиция для обновления vue-cli3 в проекте "Vue Practice"
- Почему вы до сих пор не можете понять цепочку областей видимости JavaScript?
Нет публики