
Size: a a a
<link rel="preload">
для шрифтов, проверьте, чтобы у вас не грузилось лишнего.<style>
@font-face {
font-family: "Roboto";
font-weight: 400;
src: url("./roboto-400.woff2") format("woff2");
}
@font-face {
font-family: "Roboto";
font-weight: 500;
src: url("./roboto-500.woff2") format("woff2");
}
</style>
<link rel="preload">
) браузер загрузит только те файлы шрифта, которые ему нужны. Если на странице не используется Roboto с насыщенностью 500, браузер его просто не загрузит.<link rel="preload" href="./roboto-400.woff2" as="font" />
<link rel="preload" href="./roboto-500.woff2" as="font" />
<style>
@font-face {
font-family: "Roboto";
font-weight: 400;
src: url("./roboto-400.woff2") format("woff2");
}
@font-face {
font-family: "Roboto";
font-weight: 500;
src: url("./roboto-500.woff2") format("woff2");
}
</style>
<link rel="preload">
в этом случае? Тут же инлайн-стили, разве браузер не начнёт загружать шрифты сразу же?»<link rel="preload">
ставится в очередь на загрузку сразу же, как только распарсится HTML-парсером (даже немного раньше).<link rel="preload">
не ок?»window.structuredClone()
, но не поясняет, почему это классно.structuredClone
— это как _.cloneDeep()
, но из коробки и быстрее._.cloneDeep(obj)
иJSON.parse(JSON.stringify(obj))
const a = { b: { c: 5 } }
history.pushState(a, document.title)
a.b.c = 6
{ b: { c: 5 } }
. Браузер склонирует объект a
перед тем, как сохранить его в историю. Это называется «структурное клонирование» («structured clone»).history.pushState
или postMessage
, но нигде не выставлено наружу. В итоге, если вам надо склонировать объект, но вы не можете подключить lodash, приходится писать что-то такое: const oldState = history.state;
history.replaceState(obj, document.title);
const copy = history.state;
history.replaceState(oldState, document.title);
return copy;
structuredClone()
. Она делает то же, что и _.cloneDeep()
, но без подключения внешних библиотек и (как минимум в Deno) быстрее.self.structuredClone()
реализовали уже вчера ↓