Baseline Widely available *
<link>
å
ç´ ç rel
屿§ç preload
å¼å
è®¸ä½ å¨ HTML ç <head>
ä¸å£°æè·å请æ±ï¼æå®é¡µé¢å¾å¿«å°±éè¦çèµæºï¼è¿äºèµæºæ¯ä½ 叿å¨é¡µé¢çå½å¨æçæ©æå°±å¼å§å è½½çï¼æ©äºæµè§å¨çä¸»è¦æ¸²ææºå¶å¯å¨ãè¿å¯ä»¥ç¡®ä¿å®ä»¬æ´æ©å¯ç¨ï¼å¹¶ä¸ä¸å¤ªå¯è½é»å¡é¡µé¢ç渲æï¼ä»èæé«æ§è½ã尽管åç§°ä¸å
å«âloadâä¸è¯ï¼ä½å®å¹¶ä¸å è½½åæ§è¡èæ¬ï¼èåªæ¯å®æèæ¬ä»¥æ´é«çä¼å
级è¿è¡ä¸è½½åç¼åã
ä½ æå¸¸ä½¿ç¨ <link>
æ ç¾æ¥å è½½ä¸ä¸ª CSS æä»¶ï¼ä»¥ä¸ºä½ ç页颿·»å æ ·å¼ï¼
<link rel="stylesheet" href="styles/main.css" />
ç¶èï¼å¨è¿éï¼æä»¬å°ä½¿ç¨å¼ä¸º preload
ç rel
屿§ï¼è¿ä¼å° <link>
æ ç¾è½¬åæä»»ä½æä»¬æ³è¦çèµæºçé¢å è½½å¨ãä½ è¿éè¦æå®ï¼
ä¸ä¸ªç®åç示ä¾å¯è½å¦ä¸æç¤ºï¼æ¥çæä»¬ç JS å CSS ç¤ºä¾æºç ï¼ä»¥åå¨çº¿æ¼ç¤ºï¼
<head>
<meta charset="utf-8" />
<title>JS and CSS preload example</title>
<link rel="preload" href="style.css" as="style" />
<link rel="preload" href="main.js" as="script" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>bouncing balls</h1>
<canvas></canvas>
<script src="main.js" defer></script>
</body>
å¨è¿éï¼æä»¬é¢å è½½æä»¬ç CSS å JavaScript æä»¶ï¼ä»¥ä¾¿å®ä»¬å¨ç¨å渲æé¡µé¢æ¶ç«å³å¯ç¨ãè¿ä¸ªç¤ºä¾å¯è½è¿äºç®åï¼å 为æµè§å¨å¾å¯è½å¨ä¸é¢å è½½ç HTML åä¸ç¸åçä½ç½®åç°äº <link rel="stylesheet">
å <script>
å
ç´ ï¼ä½å¨ç¨ååç°èµæºå¹¶ä¸èµæºè¶å¤§æ¶ï¼å¥½å¤å°±ä¼æ´å ææ¾ãä¾å¦ï¼
preload
è¿æå
¶ä»ä¼ç¹ãä½¿ç¨ as
æ¥æå®è¦é¢å è½½çå
容类åå
许æµè§å¨ï¼
Accept
è¯·æ±æ 头ãå¯ä»¥é¢å è½½å¤ç§ç±»åçå
容ãas
屿§å¯è½çå¼å
æ¬ï¼
audio
ï¼é³é¢æä»¶ï¼éå¸¸å¨ <audio>
ä¸ä½¿ç¨ãdocument
ï¼ç¨äºåµå
¥å¨ <frame>
æ <iframe>
ä¸ç HTML ææ¡£ãembed
ï¼ç¨äºåµå
¥å¨ <embed>
å
ç´ ä¸çèµæºãfetch
ï¼éè¿ fetch æ XHR 请æ±è®¿é®çèµæºï¼ä¾å¦ ArrayBufferãWebAssembly äºè¿å¶æä»¶æ JSON æä»¶ãfont
ï¼å使件ãimage
ï¼å¾åæä»¶ãobject
ï¼è¦åµå
¥å¨ <object>
å
ç´ ä¸çèµæºãscript
ï¼JavaScript æä»¶ãstyle
ï¼CSS æ ·å¼è¡¨ãtrack
ï¼WebVTT æä»¶ãworker
ï¼JavaScript web worker æ shared workerãvideo
ï¼è§é¢æä»¶ï¼éå¸¸å¨ <video>
ä¸ä½¿ç¨ã夿³¨ï¼ é¢å è½½ font
å fetch
èµæºéè¦è®¾ç½® crossorigin
屿§ï¼è¯·åé
䏿çå¯ç¨ CORS çè·å请æ±ã
夿³¨ï¼ å
³äºè¿äºå¼ä»¥åå®ä»¬æææè¢«ä½¿ç¨ç web åè½çæ´å¤ç»èå¯ä»¥å¨é¢å è½½è§è䏿¾å°ââ请åè§é¾æ¥å
ç´ æ©å±ãæ¤å¤ï¼è¯·æ³¨æï¼as
屿§å¯ä»¥æ¥åçå¼ç宿´å表å Fetch è§èç约æââ请åè§è¯·æ±ç®æ ã
<link>
å
ç´ å¯ä»¥æ¥åä¸ä¸ª type
屿§ï¼å
¶ä¸å
å«å
ç´ æåçèµæºç MIME ç±»åãè¿å¨é¢å è½½èµæºæ¶ç¹å«æç¨ââæµè§å¨å°ä½¿ç¨ type
屿§ç弿¥ç¡®å®æ¯å¦æ¯æè¯¥èµæºï¼å¦æä¸æ¯æï¼åä¼å¿½ç¥å®ï¼ä»
卿¯ææ¶æä¼ä¸è½½å®ã
ä½ å¯ä»¥å¨æä»¬çè§é¢ç¤ºä¾ä¸çå°è¿ä¸ªç¤ºä¾ï¼æ¥ç宿´çæºä»£ç ï¼ä»¥åå¨çº¿çæ¬ï¼ï¼ä»¥ä¸æ¯å ¶ä¸ä¸é¨å代ç çæ®µãè¿å±ç¤ºäºä¸è¬æ åµä¸é¢å è½½èåçæ ¸å¿è¡ä¸ºã
<head>
<meta charset="utf-8" />
<title>Video preload example</title>
<link rel="preload" href="sintel-short.mp4" as="video" type="video/mp4" />
</head>
<body>
<video controls>
<source src="sintel-short.mp4" type="video/mp4" />
<source src="sintel-short.webm" type="video/webm" />
<p>
Your browser doesn't support HTML video. Here is a
<a href="sintel-short.mp4">link to the video</a> instead.
</p>
</video>
</body>
ä¸é¢ç示ä¾ä»£ç åªä¼å¨æ¯æçæµè§å¨ä¸é¢å è½½ video/mp4
æ ¼å¼çè§é¢ï¼å¯¹äºé£äºæµè§å¨ä¸æ¯æ video/mp4
æ ¼å¼çç¨æ·ï¼å®é
ä¸ä¼ä½¿ç¨ video/mp4
æ ¼å¼çè§é¢ï¼å ä¸ºå®æ¯é¦ä¸ªæå®ç <source>
ï¼ãè¿å¯ä»¥è®©æ¥ææ¯æ video/mp4
æ ¼å¼çæµè§å¨çç¨æ·è·å¾æ´æµç
åæ´ååºçè§é¢ææ¾ä½éªã
请注æï¼å¯¹äºé£äºæµè§å¨æ¢æ¯æ video/mp4
æ ¼å¼åæ¯æ video/webm
æ ¼å¼çç¨æ·ï¼å¦æå¨ä¸è¿°ä»£ç ä¸è¿æå®äºä¸ä¸ª <link rel="preload" href="sintel-short.webm" as="video" type="video/webm">
å
ç´ ï¼é£ä¹ä¸¤ç§æ ¼å¼çè§é¢ï¼video/mp4
å video/webm
ï¼é½ä¼è¢«é¢å è½½ï¼å°½ç®¡å®é
ä¸åªæå
¶ä¸ä¸ç§ä¼è¢«ä½¿ç¨ã
å æ¤ï¼ä¸å»ºè®®ä¸ºåä¸èµæºçå¤ç§ç±»åæå®é¢å è½½ãç¸åï¼æä½³å®è·µæ¯ä»
ä¸ºå¤§å¤æ°ç¨æ·å¯è½å®é
使ç¨çç±»åæå®é¢å è½½ãè¿å°±æ¯ä¸ºä»ä¹ä¸é¢ç¤ºä¾ä¸çä»£ç æ²¡æä¸º video/webm
è§é¢æå®é¢å è½½çåå ã
ç¶èï¼ç¼ºå°é¢å 载并ä¸ä¼é»æ¢é£äºéè¦çç¨æ·å®é
ä½¿ç¨ video/webm
è§é¢ï¼å¯¹äºé£äºæµè§å¨ä¸æ¯æ video/mp4
使¯æ video/webm
çç¨æ·ï¼ä¸è¿°ç¤ºä¾ä¸ç代ç ä»ç¶ä¼ä½¿ video/webm
è§é¢è¢«ä½¿ç¨ââä½å®è¿æ ·åçåæ¶ä¹ä¸ä¼å¯¼è´å¯¹å¤§å¤æ°å
¶ä»ç¨æ·ä¸å¿
è¦å°è¿è¡é¢å è½½ã
å¨é¢å è½½å¯ç¨ CORS çèµæºï¼ä¾å¦ fetch()
ãXMLHttpRequest
æåä½ï¼æ¶ï¼éè¦ç¹å«æ³¨æå¨ä½ ç <link>
å
ç´ ä¸è®¾ç½® crossorigin
屿§ãè¯¥å±æ§éè¦è®¾ç½®ä¸ºä¸èµæºç CORS ååæ®æ¨¡å¼ç¸å¹é
ï¼å³ä½¿è·å请æ±ä¸è·¨åä¹éè¦è®¾ç½®ã
å¦ä¸æè¿°ï¼å ¶ä¸ä¸ä¸ªéç¨çæè¶£æ 嵿¯å使件ãç±äºåç§åå ï¼è¿äºæä»¶å¿ 须使ç¨å¿å模å¼ç CORS è¿è¡è·åï¼åè§åä½è·åè¦æ±ï¼ã
让æä»¬ä»¥è¿ä¸ªæ¡ä¾ä½ä¸ºç¤ºä¾ãä½ å¯ä»¥å¨ GitHub 䏿¥ç宿´çç¤ºä¾æºä»£ç ï¼ä¹å¯ä»¥å¨çº¿æ¥çï¼ï¼
<head>
<meta charset="utf-8" />
<title>Web font example</title>
<link
rel="preload"
href="fonts/cicle_fina-webfont.woff2"
as="font"
type="font/woff2"
crossorigin />
<link
rel="preload"
href="fonts/zantroke-webfont.woff2"
as="font"
type="font/woff2"
crossorigin />
<link href="style.css" rel="stylesheet" />
</head>
<body>
â¦
</body>
æä»¬ä¸ä»
å¨ type
屿§ä¸æä¾äº MIME ç±»åæç¤ºï¼è¿æä¾äº crossorigin
屿§ï¼ä»¥ç¡®ä¿é¢å è½½ç CORS 模å¼ä¸æç»çåä½èµæºè¯·æ±ç¸å¹é
ã
<link>
å
ç´ çä¸ä¸ªå¾å¥½çç¹æ§æ¯å®ä»¬è½å¤æ¥å media
屿§ãè¿äºå±æ§å¯ä»¥æ¥ååªä½ç±»åæå®æ´çåªä½æ¥è¯¢ï¼è®©ä½ å¯ä»¥è¿è¡ååºå¼çé¢å è½½ï¼
让æä»¬æ¥çä¸ä¸ªä¾åï¼å¨ GitHub 䏿¥çï¼å æ¬æºä»£ç åå¨çº¿ç¤ºä¾ï¼ï¼
<head>
<meta charset="utf-8" />
<title>Responsive preload example</title>
<link
rel="preload"
href="bg-image-narrow.png"
as="image"
media="(max-width: 600px)" />
<link
rel="preload"
href="bg-image-wide.png"
as="image"
media="(min-width: 601px)" />
<link rel="stylesheet" href="main.css" />
</head>
<body>
<header>
<h1>My site</h1>
</header>
<script>
const mediaQueryList = window.matchMedia("(max-width: 600px)");
const header = document.querySelector("header");
if (mediaQueryList.matches) {
header.style.backgroundImage = "url(bg-image-narrow.png)";
} else {
header.style.backgroundImage = "url(bg-image-wide.png)";
}
</script>
</body>
æä»¬å¨ <link>
å
ç´ ä¸å
å« media
屿§ï¼ä»¥ä¾¿å¨ç¨æ·çè§å£è¾çªæ¶é¢å è½½çªå¾åï¼å¨è§å£è¾å®½æ¶å 载宽å¾åãæä»¬ä½¿ç¨ Window.matchMedia
/ MediaQueryList
æ¥å®ç°è¿ä¸ç¹ï¼æ¥çæµè¯åªä½æ¥è¯¢ä»¥è·åæ´å¤ä¿¡æ¯ï¼ã
è¿ä½¿å¾åä½å¨é¡µé¢æ¸²ææ¶æ´æå¯è½å¯ç¨ï¼åå°äº FOUTï¼æªç»æ ·å¼å¤ççææ¬éªçï¼ã
è¿å¹¶ä¸å±éäºå¾åï¼çè³ä¸å±éäºåç±»åçæä»¶ââå¤§èæ³è±¡ï¼å¦æç¨æ·ä½¿ç¨çæ¯å¸¦å®½å CPU å¯è½æ´åéççªå±å¹ï¼ä½ å¯ä»¥é¢å è½½åæ¾ç¤ºä¸ä¸ªç®åç SVG å¾è¡¨ï¼æè å¦æç¨æ·çèµæºæ´ä¸°å¯ï¼å¯ä»¥é¢å è½½ä¸ä¸ªå¤æç JavaScript 代ç åï¼ç¶åç¨å®æ¥æ¸²æä¸ä¸ªäº¤äºå¼ç 3D 模åã
èæ¬åé¢å è½½å¤æ³¨ï¼ å¦æä½ æ£å¨ä½¿ç¨ JavaScript 模åï¼è¯·ä½¿ç¨ <link rel="modulepreload">
ã
å
³äºè¿äºé¢å è½½çå¦ä¸ä¸ªå¥½å¤æ¯ï¼ä½ å¯ä»¥ä½¿ç¨èæ¬æ¥æ§è¡å®ä»¬ãä¾å¦ï¼è¿éæä»¬å建ä¸ä¸ª HTMLLinkElement
å®ä¾ï¼ç¶åå°å
¶éå å° DOM ä¸ï¼
const preloadLink = document.createElement("link");
preloadLink.href = "myscript.js";
preloadLink.rel = "preload";
preloadLink.as = "script";
document.head.appendChild(preloadLink);
è¿æå³çæµè§å¨å°é¢å è½½ myscript.js
æä»¶ï¼ä½å®é
ä¸è¿æ²¡æä½¿ç¨å®ãè¦ä½¿ç¨å®ï¼ä½ å¯ä»¥è¿æ ·åï¼
const preloadedScript = document.createElement("script");
preloadedScript.src = "myscript.js";
document.body.appendChild(preloadedScript);
å½ä½ æ³è¦é¢å è½½ä¸ä¸ªèæ¬ï¼ä½éè¦å°æ§è¡æ¨è¿å°ç¡®åéè¦å®çæ¶åï¼è¿å¾æç¨ã
å ¶ä»èµæºé¢å è½½æºå¶è¿åå¨å
¶ä»é¢å è½½ç¹æ§ï¼ä½é½ä¸å¦ <link rel="preload">
éå该ç®çï¼
<link rel="prefetch">
卿µè§å¨ä¸æ¯æå·²ä¹
ï¼ä½å®æ¯ç¨äºé¢åå°å¨ä¸ä¸æ¬¡å¯¼èª/页é¢å è½½æ¶ä½¿ç¨çèµæºï¼ä¾å¦ï¼å½ä½ 跳转å°ä¸ä¸é¡µæ¶ï¼ãè¿æ¯å¯ä»¥çï¼ä½å¯¹äºå½å页颿²¡æç¨ï¼æ¤å¤ï¼æµè§å¨ä¼ç»é¢åï¼prefetch
ï¼çèµæºæ¯é¢å è½½ï¼preload
ï¼çèµæºæ´ä½çä¼å
级ââå½å页颿¯ä¸ä¸é¡µæ´éè¦ãæå
³æ´å¤è¯¦ç»ä¿¡æ¯ï¼è¯·åé
é¢åã<link rel="prerender">
å¨åå°æ¸²ææå®çç½é¡µï¼å¦æç¨æ·å¯¼èªå°è¯¥é¡µé¢ï¼å¯ä»¥å éå
¶å è½½ãç±äºæå¯è½æµªè´¹ç¨æ·ç带宽ï¼Chrome å° prerender
è§ä¸º NoState é¢åã<link rel="subresource">
éæ å 䏿®µæ¶é´ä»¥åå¨ Chrome ä¸å¾å°äºæ¯æï¼å
¶ç®çæ¯è§£å³ä¸ preload
ç¸åçé®é¢ï¼ä½å®åå¨ä¸ä¸ªé®é¢ï¼æ²¡æåæ³ç¡®å®é¡¹ç®çä¼å
级ï¼as
彿¶è¿ä¸åå¨ï¼ï¼æä»¥å®ä»¬é½æ¯ä»¥ç¸å½ä½çä¼å
级è·åçãRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4