Дуй, дуй, моя гордость и снисхождение, 2017 год, сегодня начало зимы, хоть осенний ветер еще дует, но солнышко пригревает, и настроение тоже греет. Деревья по обеим сторонам дороги были одеты в золото, шумели и шумели, а мертвые листья на земле были подхвачены ветром и вращались вокруг меня.
Оставьте несколько слов, чтобы увидеть, хотите ли вы решить, говорить их или нет, и сначала перейдите к вопросам интервью:
Вопрос 1 (CSS)
Ответ 20px.
Вопрос 2 (html)
Предварительная выборка DNS или предварительная выборка DNS является частью внешней оптимизации. Вообще говоря, во внешней оптимизации есть два момента, связанных с DNS: один — уменьшить количество DNS-запросов, а другой — выполнить предварительную выборку DNS.
Поскольку скорость разрешения DNS является основным протоколом Интернета, оптимизаторы веб-сайтов легко упускают из виду. Теперь большинство новых браузеров оптимизированы для разрешения DNS.Типичное разрешение DNS занимает 20-120 миллисекунд.Это хороший метод оптимизации для сокращения времени и времени разрешения DNS. Предварительная выборка DNS позволяет разрешать доменное имя с этим атрибутом в фоновом режиме без нажатия пользователем ссылки, а разрешение доменного имени и загрузка содержимого являются последовательными сетевыми операциями, поэтому этот метод может сократить время ожидания пользователя и улучшить взаимодействие с пользователем. .
По умолчанию браузер предварительно выбирает доменное имя на странице, которая не находится в том же домене, что и текущее доменное имя (доменное имя просматриваемой веб-страницы), и кэширует результат, который является неявным DNS Prefetch. Если вы хотите выполнить предварительную выборку доменов, которые не отображаются на странице, вы будете использовать явную предварительную выборку DNS.
В настоящее время большинство браузеров уже поддерживают это свойство, и поддерживаются следующие версии:
- Safari: 5+
- Chrome: All
- Firefox: 3.5+
- Opera: Unknown
- IE: 9+ (называется «Предварительное разрешение» на blogs.msdn.com)
Среди них Chrome и Firefox 3.5+ имеют встроенную технологию предварительной выборки DNS и соответствующие настройки оптимизации для предварительного разрешения DNS. Таким образом, даже если это свойство не установлено, Chrome и Firefox 3.5+ могут автоматически выполнять предварительный анализ в фоновом режиме.
DNS Prefetch следует размещать как можно ближе к началу веб-страницы, и рекомендуется размещать его сзади. Конкретное использование заключается в следующем:
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//www.itechzero.com">
<link rel="dns-prefetch" href="//api.share.baidu.com">
<link rel="dns-prefetch" href="//bdimg.share.baidu.com">
Следует отметить, что хотя использование DNS Prefetch может ускорить разрешение страниц, им нельзя злоупотреблять, поскольку некоторые разработчики указывалиОтключение упреждающего чтения DNS экономит 10 миллиардов DNS-запросов в месяц..
Если вам нужно отключить неявную предварительную выборку DNS, вы можете использовать следующие теги:
<meta http-equiv="x-dns-prefetch-control" content="off">
Вопрос 3 (CSS)
стоимость | описывать |
---|---|
absolute |
Генерирует абсолютно позиционированные элементы, позиционированные относительно первого родительского элемента, отличные от статического позиционирования. Положение элемента задается свойствами «слева», «сверху», «справа» и «снизу». |
fixed |
Генерирует абсолютно позиционированные элементы, расположенные относительно окна браузера. Положение элемента задается свойствами «слева», «сверху», «справа» и «снизу». |
relative |
Создает относительно позиционированный элемент, расположенный относительно его нормального положения. Таким образом, "left:20" добавляет 20 пикселей к ЛЕВОЙ позиции элемента. |
static | По умолчанию. Без позиционирования элементы отображаются в обычном потоке (игнорируя объявления top, bottom, left, right или z-index). |
inherit | Указывает, что значение свойства position должно быть унаследовано от родительского элемента. |
Вопрос 4 (регулярное выражение)
В нем рассматривается принцип работы внешнего шаблонизатора.
ты видишь это9 строк кода для реализации шаблона engine.js
Tpl = function(tpl, data) {
var fn = tpl.replace(/</g, '<').replace(/>/g, '>') // 转义 <>
.replace(/(<%=)([\s\S]*?)(%>)/g, '$1_html_+= ($2)\n$3') // <%= %> [\s\S]允许换行
.replace(/(<%)(?!=)([\s\S]*?)(%>)/g, '$1\n\t$2\n$3') // <% js code %> (?!=)不要匹配到<%= %>
.replace(/(^|%>|%>)([\s\S]*?)(<%=|<%|$)/g, function($, $1, $2, $3) { // 边界符外的html, html 中的(\|"|\r|\n) 要转义
return '_html_+= "' + $2.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\r?\n/g, '\\n') + '"\n'
});
return (fn = Function('data', 'with(data||{}){\nvar _html_=""\n' + fn + '\nreturn _html_\n}')), data ? fn(data) : fn
};
Вопрос 5 (http)
Cache-Control определяет запросы и ответы механизма кэширования. Хороший механизм кэширования может уменьшить пропускную способность сети, повысить скорость доступа, улучшить взаимодействие с пользователем, а также снизить нагрузку на сервер.
Cache-Control в основном имеет следующие типы:
(1) Запрос запроса:
- no-cache Не читать файлы в кеше, запрашивать повторный запрос к WEB серверу
- Запросы и ответы без сохранения запрещено кэшировать
- max-age означает, что при повторном доступе к этой веб-странице в течение max-age секунд она не будет обращаться к серверу для запроса.Его функция аналогична Expires, за исключением того, что Expires сравнивается на основе определенного значения даты. Если собственное время кешировщика неточное, результат может быть неправильным, и у max-age, очевидно, нет этой проблемы. Приоритет Max-age также выше, чем у Expires.
- max-stale позволяет читать кэшированные объекты, время истечения которых должно быть меньше значения max-stale.
- min-fresh принимает кешированные объекты, время жизни которых max-age больше, чем сумма их текущего времени и значения min-fresh
- only-if-cached сообщает кешировщику, что я хочу, чтобы контент исходил из кеша, и мне все равно, свежий ли кешированный ответ.
- no-transform указывает агенту не изменять тип мультимедиа, например jpg, который вы заменяете на png.
(2) Ответ Ответ:
- Все общедоступные данные сохраняются, даже веб-страницы, защищенные паролем, сохраняются, а безопасность очень низкая.
- Содержимое личных данных может храниться только в частном кеше, действительно только для определенного пользователя и не может быть передано
- no-cache может кэшироваться, но может быть возвращен клиенту только после проверки его достоверности на веб-сервере
- Запросы и ответы без сохранения запрещено кэшировать
- max-age Время истечения срока действия объекта, содержащегося в этом ответе.
- Обязательная повторная проверка Если срок действия кеша истек, он снова проверит исходный сервер, являются ли это последними данными, а не прокси-сервером посередине.
- max-stale позволяет читать кэшированные объекты, время истечения которых должно быть меньше значения max-stale.
- proxy-revalidate похож на Must-revalidate, разница в том, что proxy-revalidate исключает кэш пользовательского агента. То есть его правила не применяются к локальному кешу пользовательского агента.
- Единственная разница между -maxage и max-age заключается в том, что s-maxage применяется только к общим кешам и не применяется к однопользовательским кешам, таким как локальные кеши пользовательских агентов.Кроме того, s-maxage имеет более высокий приоритет, чем max -возраст .
- no-transform указывает агенту не изменять тип мультимедиа, например jpg, который вы заменяете на png.
Вопрос 6 (html)
-
<script src="script.js"></script>Без отсрочки или асинхронности браузер загрузит и выполнит указанный скрипт немедленно. «Немедленно» означает, что перед рендерингом элемента документа под тегом script, то есть он не ждет следующего загруженного элемента документа, а загружает его как как только он будет прочитан и выполнен.
-
<script async src="script.js"></script>При использовании асинхронности процесс загрузки и рендеринга последующих элементов документа будет происходить параллельно (асинхронно) с загрузкой и выполнением script.js.
-
<script defer src="myscript.js"></script>С defer процесс загрузки последующих элементов документа будет выполняться параллельно (асинхронно) с загрузкой script.js, но выполнение script.js будет завершено после парсинга всех элементов и до запуска события DOMContentLoaded.
Затем, с практической точки зрения, лучше всего сначала выбрасывать все скрипты перед