предисловие
Давно не вел блог, мой первоначальный заголовок был«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
согласие наDNS
53 для инициирования запроса, этот запрос является рекурсивным запросом, то есть оператором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
На самом деле, есть три оптимизации, которые можно выполнить для серверной части, эксплуатации и обслуживания:
CDN
HTTPDNS
DNS
Балансировка нагрузки
Однако для немного более крупных веб-сайтов от решения по балансировке нагрузки 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?
Нет публики