Create by jsliang on 2019-2-23 20:55:34
Recently revised in 2019-3-12 21:34:59
Привет друзья, если вы считаете, что эта статья неплохая, не забудьте датьstar, ВашstarЭто моя мотивация учиться!Адрес GitHub
【2019-08-16】Привет друзья, потому чтоjsliangБиблиотека документации подверглась рефакторингу, некоторые ссылки на эту статью могут быть битыми, иjsliangУ меня нет сил поддерживать старые статьи на стороне Nuggets, извините за это. Для тех, кому нужно получать последние статьи, щелкните адрес GitHub выше и перейдите в библиотеку документов, чтобы просмотреть скорректированные статьи.
Эта статья включает в себя очки знаний:
- Защита от тряски и дросселирования
- Перерисовка и перекомпоновка
- Браузер анализирует URL
- Разрешение доменного имени DNS
- Трехстороннее рукопожатие TCP и четырехсторонняя волна
- Браузер отображает страницу
В этой статье jsliang объяснит свое личное понимание вышеупомянутых знаний после самоисследования.Если есть какие-либо ошибки, упущения или недоразумения, вы можете оставить сообщение и указать.
Если у вас есть какие-либо вопросы по статье, вы хотите получить быстрый ответ.
Или небольшой партнер интересуется личной библиотекой внешних документов jsliang, а также хочет разобраться в своих внешних знаниях.
Добро пожаловать в группу QQ для совместного обсуждения:798961601
.
каталог
Чем отличается передок, который не подбрасывает, от соленой рыбы?
2 Предисловие
В работе мы можем столкнуться с такими проблемами:
- Когда пользователь ищет, он продолжает набирать слова.Если нам нужно вызывать интерфейс каждый раз, когда мы набираем слово, интерфейс вызывается слишком часто и зависает.
- Когда пользователь читает статью, нам нужно следить, к какому заголовку пользователь прокручивает, но каждый раз, когда пользователь прокручивает, он будет занимать слишком много памяти, а если будут добавлены другие бизнес-коды, он застрянет.
Итак, в настоящее время мы будем использоватьЗащита от тряски и дросселирования.
Итак, говоря оЗащита от тряски и дросселирования, мы можем исследоватьПерерисовка и перекомпоновка.
Говоря оПерерисовка и перекомпоновка, мы возьмемЧто происходит, когда браузер вводит URL-адрестакже обратите внимание, что приводит кDNS,TCPи другие точки знаний, и, наконец, связаны вместе, чтобы сформировать план этой статьи, что удобноjsliangОрганизуйте и запомните эту часть знаний с друзьями.
Три анти-встряхивания и дросселирования
Понимание чего-то с помощью кода часто является самой быстрой формой понимания знания.
3.1 Защита от сотрясений
Ниже у нас есть небольшой пример кода защиты от сотрясений.
Если у вас есть компьютер под рукой и вы заинтересованы, вы хотите сначала подумать о том, что такое защита от сотрясений. Вы можете скопировать код в свой браузер, попробовать нажать кнопку и посмотреть консоль, чтобы увидеть, как она печатается.
Если у вас нет под рукой компьютера, давайте сначала взглянем на реализацию кода, а затем взглянем на демонстрацию GIF ниже. (Этот эффект не так прост, как удар самому себе)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>防抖</title>
</head>
<body>
<button id="debounce">点我防抖!</button>
<script>
window.onload = function() {
// 1、获取这个按钮,并绑定事件
var myDebounce = document.getElementById("debounce");
myDebounce.addEventListener("click", debounce(sayDebounce));
}
// 2、防抖功能函数,接受传参
function debounce(fn) {
// 4、创建一个标记用来存放定时器的返回值
let timeout = null;
return function() {
// 5、每次当用户点击/输入的时候,把前一个定时器清除
clearTimeout(timeout);
// 6、然后创建一个新的 setTimeout,
// 这样就能保证点击按钮后的 interval 间隔内
// 如果用户还点击了的话,就不会执行 fn 函数
timeout = setTimeout(() => {
fn.call(this, arguments);
}, 1000);
};
}
// 3、需要进行防抖的事件处理
function sayDebounce() {
// ... 有些需要防抖的工作,在这里执行
console.log("防抖成功!");
}
</script>
</body>
</html>
Очень хорошо, я думаю, вы прочитали код, давайте посмотрим на его демонстрацию:
На этот раз мы можем выкинуть понятие анти-встряски:
- Стабилизатор:Если задачи запускаются часто, задача будет выполняться только тогда, когда интервал между запусками задачи превышает указанный интервал.
Комбинируя приведенный выше код, мы можем знать, что после запуска события щелчка, если пользователь снова щелкнет, мы очистим предыдущий таймер и создадим его заново. Это означает: это дело нужно подождать, если вы будете постоянно настаивать, я переназначу время!
Пустой разговор бесполезен, покажи тебе сцену:
- Есть поле ввода, после ввода будет вызван интерфейс для получения ассоциативных слов. Однако, поскольку часто вызывать интерфейс нехорошо, мы используем в коде функцию защиты от сотрясений, и интерфейс будет вызываться только после того, как пользователь закончит ввод в течение определенного периода времени, и появится ассоциативное слово.
Друзья могут попробовать посмотреть на приведенный выше случай, сначала реализовать решение этой сцены самостоятельно, если вы чувствуете, что это не хорошо, то посмотрите на:«Сценарии применения и реализация антишейков и троттлинга»
Дополнительные знания: что это
arguments
?
во-первых, учащиеся, которые переходят из бэкенда во фронтенд, могут использоватьarguments
Под ним понимается инструмент, способный реализовать функцию перегруженных функций.
потом, возьмем пример:function test()
В этом методе, поскольку мы не уверены, сколько переменных, таких какtest("jsliang", 24)
,илиtest("LiangJunrong", "jsliang", "24")
, то только функцияtest
китайское использованиеarguments
Просто примите это.
Наконец,существуетfunction test() { let arr1 = argument[0] }
середина,arr1
Вы можете получить первую переданную переменную.
так,fn.call(this, arguments)
Фактически неопределенная переменная заменяется функцией.
Ссылка 1:"Обсудить заявку и позвонить в JS"
Ссылка 2:«Использование аргументов в js»
3.2 Дросселирование
После разговора об антишейке поговорим о троттлинге, не будем о правилах, начнем с кода:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>节流</title>
</head>
<body>
<button id="throttle">点我节流!</button>
<script>
window.onload = function() {
// 1、获取按钮,绑定点击事件
var myThrottle = document.getElementById("throttle");
myThrottle.addEventListener("click", throttle(sayThrottle));
}
// 2、节流函数体
function throttle(fn) {
// 4、通过闭包保存一个标记
let canRun = true;
return function() {
// 5、在函数开头判断标志是否为 true,不为 true 则中断函数
if(!canRun) {
return;
}
// 6、将 canRun 设置为 false,防止执行之前再被执行
canRun = false;
// 7、定时器
setTimeout( () => {
fn.call(this, arguments);
// 8、执行完事件(比如调用完接口)之后,重新将这个标志设置为 true
canRun = true;
}, 1000);
};
}
// 3、需要节流的事件
function sayThrottle() {
console.log("节流成功!");
}
</script>
</body>
</html>
Очень хорошо, маленькие друзья, которые читают код, должны иметь общее представление о том, что происходит Давайте посмотрим на реализацию GIF:
Прочитав код и реализацию GIF, мы можем понять, что троттлинг — это:
- дросселирование:Задача будет выполнена только один раз в течение указанного интервала времени.
Итак, применение троттлинга на работе?
- Ленивая загрузка должна отслеживать и вычислять положение полосы прокрутки, а также использовать регулирование для ее получения с определенной частотой.
- Пользователь нажимает кнопку отправки. Предполагая, что мы знаем примерное время возврата интерфейса, мы используем регулирование и разрешаем только один клик в течение определенного периода времени.
Таким образом, в некоторых конкретных рабочих сценариях мы можем использовать антишейки и дросселирование, чтобы уменьшить ненужные потери.
Итак, возникает вопрос: допустим, интервьюер услышит ваши слова, будут ли они продолжать спрашивать: «Почему приведенный выше сценарий приводит к слишком большим потерям из-за несдержанности?»
Хорошо, здесь задействован механизм браузера для рендеринга страниц...
Четыре перерисовки и перекомпоновки
Прежде чем сказать, что браузер отображает страницу, нам нужно понять два момента, один из которых называетсяБраузер анализирует URL, а другое - это то, что будет рассмотрено в этой главе.Перерисовка и перекомпоновка:
- перекрашивать: когда изменение стиля элемента не влияет на макет, браузер будет использовать перерисовку для обновления элемента.В настоящее время на уровне пользовательского интерфейса требуется только повторный пиксельный рендеринг, поэтомуменьше потерь.
ОбщийперерисоватьОперации:
- изменить цвет элемента
- Изменить цвет фона элемента
- более
- переплавка: Также известен как перестановка (макет). Когда срабатывает размер, структура или определенные свойства элемента, браузер повторно отображает страницу, известную как перекомпоновка. В это время браузеру необходимо выполнить перерасчет, а макет страницы необходимо перекомпоновать после расчета, так что это более тяжелая операция.
ОбщийпереплавкаОперации:
- Первый рендер страницы
- Изменение размера окна браузера
- Размер/позиция/содержимое элемента изменены
- Изменение размера шрифта элемента
- Добавить или удалить видимые элементы DOM
- Активировать псевдоклассы CSS (:hover...)
- более
- фокус:Перекомпоновка определенно вызовет перерисовку, а перерисовка не обязательно вызовет перерисовку. Накладные расходы на перерисовку невелики, а стоимость оплавления высока.
Увидев это, мои друзья могут немного смутиться, вы только что сказали мнеЗащита от тряски и дросселирования, зачем прыгатьПерерисовка и перекомпоновкауже?
Хорошо, давайте продадим это, давайте посмотрим на следующую сцену:
- В интерфейсе есть поле div, пользователь может ввести некоторую информацию о поле div в поле ввода, например ширину и высоту, и свойства будут изменены сразу после ввода. Однако, поскольку изменения должны быть сохранены в базе данных в любое время, необходимо вызвать интерфейс. Без ограничений...
Увидев это, друзья могут объединить некоторые слова: зачем тебедросселирование, так как что-то может привести к тому, что браузерпереплавка,ипереплавкаувеличит нагрузку на браузер, поэтому мы проходимдросселированиечтобы предотвратить подобные вещи, которые увеличивают накладные расходы браузера.
Используйте схему, чтобы проиллюстрировать:
Таким образом, мы можем визуализироватьЗащита от тряски и дросселированияиПерерисовка и перекомпоновкаСоедини и запомни.
Итак, как мы можем избежать интенсивного использования перерисовки и перекомпоновки на работе? :
- Избегайте частых манипуляций со стилями, которые можно пересмотреть один раз после подведения итогов.
- Попробуйте использовать класс для изменения стиля вместо прямого управления стилями.
- Сокращение операций DOM и возможность одновременной вставки строк.
Хорошо, пока мы закончили две части, затем снова возникает вопрос: «Во время процесса рендеринга браузера также происходит перерисовка и перекомпоновка?» «От ввода браузером URL до успешного процесса рендеринга, что произошло что?"
Продолжаем исследовать...
5. URL-адрес парсинга браузера
Чтобы сделать наш уровень знаний более глубоким, мы должны рассмотреть следующие два вопроса:
- Что именно происходит с момента ввода браузером URL-адреса до успешного рендеринга?
- Что произошло в процессе рендеринга в браузере, есть ли еще перерисовка и перекомпоновка?
Хорошо, интерес здесь, давайте начнем сБраузер анализирует URLПохоже, давайте сначала посмотрим на следующий процесс, когда пользователь вводит URL-адрес, и браузер отображает страницу пользователю:
- Версия А:
- Пользователь вводит URL-адрес.
- Выполните разрешение доменного имени DNS для URL-адресов.
- Установите TCP-соединение (трехстороннее рукопожатие).
- Браузер инициирует сообщение HTTP-запроса.
- Сервер возвращает ответное сообщение HTTP.
- Закройте соединение TCP (четыре волны).
- Браузер анализирует ресурс документа и отображает страницу.
Говоря об этом, я вдруг вспомнил диалог:
ученик: «Учитель, в чем суть экзамена в этом классе?»
учитель: "Все в точку!"
enm... Не знаю, побьют ли учителя, ноjsliangЯ знаю, что писать таким образом будут ругать, поэтому давайте дополнительно наметим нашу структуру, объединив приведенные выше диаграммы:
очень хороший,jsliangЯ чувствую, что мои навыки рисования пошли еще дальше~
①: Хотя я очень благодарен за то, что в Интернете так много статей для справки, после того, как я проверил более 20 статей,jsliangЯ чувствую, что в этой части есть девять из десяти проблем, и я спросил некоторых друзей, некоторые из них сказали правильно, некоторые сказали, что неправильно. Впрочем, это не мешает друзьям продолжать смотреть вниз.
②: Во избежание выпадения из корзины ниже выложена еще одна версия.Друзья могут сказать какую версию вы поддерживаете в комментариях:
- Версия Б
- Пользователь вводит URL-адрес.
- Выполните разрешение доменного имени DNS для URL-адресов.
- Установите TCP-соединение.
- Запрос и ответ на HTTP-сообщения.
- Браузер анализирует ресурс документа и отображает страницу.
Здесь мы можем ясно понять, что изПользователь вводит URL-адрес, и браузер представляет страницу пользователю, через какой процесс она прошла?.
Дальше все просто:
- Что такое разрешение DNS и как оно работает?
- Что такое трехстороннее рукопожатие TCP, что такое четырехстороннее рукопожатие TCP и каков их процесс?
- Каков процесс анализа ресурсов документа браузером и рендеринга страниц?
Поехали~ Шаг за шагом выполните следующие три пункта знаний!
Ссылка 1:"Весь процесс парсинга веб-страницы (введите URL для отображения страницы)"
Ссылка 2:«Анализ процесса рендеринга в браузере»
Шесть разрешений доменных имен DNS
во-первых, решаем первую задачу:
- Что такое разрешение DNS и как оно работает?
DNS (система доменных имен) — этосистема доменных именАббревиатура от , которая предоставляет услуги по преобразованию имен хостов и доменных имен в IP-адреса:
доменное имя:http://jsliang.top
DNS IPV4:119.147.15.13
IPV4 является подделкой, он используется только для того, чтобы показать, что IP-адрес может быть возвращен после разрешения DNS.
Итак, когда пользователь вводит в браузереhttp://jsliang.top
, DNS выполняет следующие действия:
- На основе адреса браузер ищет запись разрешения в DNS (сервере доменных имен) в своем собственном кэше. Если он существует, он напрямую вернет IP-адрес; если он не существует, он проверит, есть ли в файле hosts в операционной системе запись разрешения DNS для доменного имени, и если да, вернет ее.
- Если нет записи разрешения DNS для этого доменного имени в кеше браузера или файле hosts операционной системы в Условии 1, или срок его действия истек, на сервер доменных имен отправляется запрос на разрешение доменного имени.
- Сначала попросите локальный сервер доменных имен разрешить доменное имя.Если доменное имя не может быть разрешено, запросите разрешение корневого сервера доменных имен.
- Корневой сервер возвращает первичный сервер имен локальному серверу имен.
- Локальный сервер доменных имен инициирует запрос разрешения на первичный сервер доменных имен.
- После получения запроса разрешения первичный сервер доменных имен выполняет поиск и возвращает адрес сервера доменных имен, соответствующий доменному имени.
- Сервер доменных имен запросит сохраненное имя домена и таблицу сопоставления IP-адресов и вернет запись целевого IP-адреса и значение TTL (время жизни).
- Локальный сервер доменных имен получает IP-адрес и значение TTL и кэширует их.Время кэширования контролируется значением TTL.
- Результат разрешения возвращается пользователю, пользователь кэширует его в локальном системном кеше в соответствии со значением TTL, и процесс разрешения доменного имени завершается.
Всегда сложно понять, прочитав текст, проследитьjsliangПосле нанесения рисунка становится понятно:
Семь трехсторонних рукопожатий TCP и четырехсторонняя волна
потом, решаем вторую задачу:
- Что такое трехстороннее рукопожатие TCP, что такое четырехстороннее рукопожатие TCP и каков их процесс?
Что такое TCP? TCP (протокол управления передачей) — это ориентированный на установление соединения, надежный протокол связи транспортного уровня на основе потока байтов.
Проще говоря, его роль заключается в надежной передаче потока данных с одного хоста на другой.
Что касается конкретного принципа работы, то он здесь пока не рассматривается, нам нужно знать только два момента:Три рукопожатия и четыре волны.
- трехстороннее рукопожатие:
-
первое рукопожатие: сначала оба конца находятся в закрытом закрытом состоянии, клиент устанавливает бит флага SYN в 1 и генерирует случайное значение
seq = x
, и отправить пакет на сервер, клиент переходит в состояние SYN-SENT и ждет подтверждения от сервера. -
второе рукопожатие: после того, как сервер получает пакет данных, он устанавливается флаговым битом
SYN = 1
Зная, что Клиент запрашивает соединение, Сервер устанавливает флаги SYN и ACK в 1,ack = x + 1
, генерировать случайное значениеseq = y
, и отправить пакет Клиенту для подтверждения запроса на соединение, Сервер вводитSYN-RCVD
состояние, после чего операционная система выделяет TCP-буферы и переменные для TCP-соединения. -
третье рукопожатие: после того, как клиент получит подтверждение, проверьте,
x + 1
, если ACK равен 1, если он правильный, установите бит флага ACK в 1,ack = y + 1
, а в это время операционная система выделяет TCP-буферы и переменные для TCP-соединения, и отправляет пакет данных на Сервер, а Сервер проверяет, есть ли аккy + 1
, равно ли ACK 1, если он правильный, соединение установлено успешно, Клиент и Сервер переходят в установленное состояние, завершают трехстороннее рукопожатие, после чего Клиент и Сервер могут начать передачу данных.
Текст слишком грязный, покажи картинку:
- помахал четыре раза:
-
первая волна: Процесс клиентского приложения сначала отправляет сегмент освобождения соединения на свой TCP (
FIN = 1
, серийный номерseq = u
), и снова прекратите отправку данных, активно закройте TCP-соединение, войдите в состояние FIN-WAIT-1 (ожидание завершения 1) и дождитесь подтверждения от сервера. -
вторая волна: после того, как сервер получает сегмент освобождения соединения, он отправляет сегмент подтверждения, (
ACK = 1
, номер подтвержденияack = u + 1
, серийный номерseq = v
), Сервер переходит в состояние CLOSE-WAIT (ожидание закрытия), TCP в это время находится в полузакрытом состоянии, а соединение от Клиента к Серверу разрывается.
Примечание. После того, как клиент получает подтверждение от сервера, он переходит в состояние FIN-WAIT-2 (ожидание завершения 2) и ожидает сегмента освобождения соединения, отправленного сервером.
-
Третья волна: У сервера больше нет данных для отправки клиенту, и сервер отправляет сегмент освобождения соединения (
FIN = 1
,ACK = 1
, серийный номерseq = w
, номер подтвержденияack = u + 1
), Сервер переходит в состояние LAST-ACK (последнее подтверждение) и ожидает подтверждения от Клиента. -
четвертая волна: После того, как Клиент получает от Сервера сегмент освобождения соединения, он отправляет сегмент подтверждения (
ACK = 1
,seq = u + 1
,ack = w + 1
), клиент переходит в состояние TIME-WAIT. В это время TCP не освобождается, и Клиент перейдет в состояние CLOSED только после того, как время, установленное таймером, будет равно 2MSL.
Текст слишком грязный, покажи картинку:
Хорошо, пока мы понимаемTCP и его трехстороннее рукопожатие и четырехсторонний волновой процесс, дабы облегчить образную память друзей,jsliangЯ сделал небольшой рассказ, надеюсь, мои друзья смогут углубить свое впечатление:
- Три рукопожатия + четырехволновая память изображений:
- jsliang: (инициирует приложение друга WeChat к девушке) «Привет, могу я добавить тебя в друзья?» ——первое рукопожатие
- сестра: (прошел обзор) "Привет, приятно познакомиться~" ——второе рукопожатие
- jsliang: «Здравствуйте, меня зовут Лян Цзюньронг, я небольшой эксперт по подбрасыванию переднего конца…» ——третье рукопожатие
- ... (содержимое чата)
- …………(содержание чата)
- ………… (содержание чата)
- …………(содержание чата)
- ... (содержимое чата)
- jsliang: (Я сфотографировал бумажную корзину, полную салфеток, когда простудился) «Ах, сегодня так неудобно».первая волна
- сестра: "Бля, ты противен!" ——вторая волна
- сестра: "Давай притворимся, что мы не знакомы, мы удалили друг друга, спасибо!" ——Третья волна
- jsliang: (Остается) «Нет, послушай меня!» ——четвертая волна
- сестра: (Решительно удалить друзей) ——CLOSED
- jsliang:(! «У меня сегодня простуда». Девушка включила верификацию друга, а вы ей не друг. Сначала отправьте запрос на верификацию друга, и вы сможете общаться только после того, как другая сторона пройдет верификацию.) — ——CLOSED
Хорошо, смущение удалось, я думаю, друзья хорошо понимают.
Итак, давайте двигаться дальше и исследовать.
Ссылка 1:«Трехстороннее рукопожатие TCP и процесс четырехсторонней волны»
Ссылка 2:«Трехстороннее рукопожатие TCP и четырехсторонняя волна (подробно + анимация)»
Восемь страниц рендеринга браузера
Наконец, решаем третью задачу:
- Каков процесс анализа ресурсов документа браузером и рендеринга страниц?
Без лишних слов, давайте посмотрим:
- Браузер разбирает HTML в дерево DOM через HTMLParser по принципу глубокого обхода.
- Браузер анализирует CSS в дерево правил CSS (дерево CSSOM) через CSSParser.
- Браузер анализирует и применяет код JS к макету через DOM API или CSSOM API и отображает результаты ответа по мере необходимости.
- Создайте дерево рендеринга из дерева DOM и дерева CSSOM.
- компоновка: перестановка (также называемая перекомпоновкой), при изменении геометрического размера любого узла в дереве рендеринга дерево рендеринга будет перестроено для пересчета положения всех узлов на экране.
- repaint: перерисовать.Когда какой-либо атрибут стиля элемента в дереве рендеринга (геометрический размер не изменился), дерево рендеринга будет перерисовано, например, изменение цвета шрифта, фона и т. д.
- paint: пройдите по дереву рендеринга и вызовите аппаратный графический API для рисования каждого узла.
Текст, конечно, недостаточно ясен, ноjsliangЯ устал после того, как нарисовал несколько картинок, так что давайтевороватьВот картинка:
Таким образом, мы правыПроцесс рендеринга в браузереЯсно~
использованная литература:«Статья, чтобы получить предварительное интервью»
Девять Резюме
Итак, давайте оглянемся на то, что мы сделали?
- Мы столкнулись с некоторыми проблемами на работе, и эти проблемы будут блокировать страницу, поэтому мы проверили информацию и знали, что для уменьшения накладных расходов браузера нам нужно использоватьЗащита от тряски и дросселирования.
- использоватьЗащита от тряски и дросселированияПосле решения проблемы мы задались вопросом, почему была такая операция, поэтому мы посмотрели глубжеПерерисовка и перекомпоновка.
- Перерисовка и перекомпоновкаЭто только говорит нам, как браузер отображает CSS, нам нужно знать больше.Браузер отображает страницуподробный процесс, но луковицу все равно нужно чистить слой за слоем, поэтому начинать нужно сБраузер анализирует URLНачать.
- существуетБраузер анализирует URL, Давайте взглянемРазрешение доменного имени DNS,Трехстороннее рукопожатие TCP и четырехсторонняя волнаЭти две точки знания.
- Наконец, мы, наконец, знаемБраузер отображает страницучто происходит.
Подводя итог, если нам нужно обратить внимание только на один момент интервью, интервьюер, скорее всего, потеряет дар речи, потому что мы не знаем начала и конца.
Однако, если мы знаем точку знания, и мы рассеиваем наши мысли и изучаем ее глубоко, я верю, что, когда интервьюер спрашивает, друзья могут говорить свободно, не спрашивая обо всем!
Наконец, я желаю, чтобы мои друзья нашли подходящую и удовлетворительную работу~
10 ссылок
- "Функция анти-тряски и дросселирования"
- «Дросселирование и защита от сотрясений»
- «Странные трюки JS: функция защиты от тряски и функция троттлинга»
- "Обсудить заявку и позвонить в JS"
- «Использование аргументов в js»
- «Сценарии применения и реализация антишейков и троттлинга»
- "Весь процесс парсинга веб-страницы (введите URL для отображения страницы)"
- «Анализ процесса рендеринга в браузере»
- «Статья, чтобы получить предварительное интервью»
библиотека документации jsliangЗависит отЛян ЦзюньронгиспользоватьCreative Commons Attribution-NonCommercial-ShareAlike 4.0 Международная лицензияЛицензия.
на основеGitHub.com/l ian Jun Ron…Создание работ выше.
Права на использование, отличные от разрешенных в настоящем Лицензионном соглашении, могут быть получены отCreative Commons.org/licenses/не…получено в.