æ¨æµè§å API
æéå¯ç¨
æ¤ç¹æ§ä¸å±äºåºçº¿ï¼å 为å®å°æªå¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æã
Want more browser support for this feature? Tell us why.
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
æ¨æµè§å APIï¼Speculation Rules APIï¼æ¯ä¸ºäºæåæªæ¥ç½é¡µå¯¼èªçé度è设计çãå®ä¸»è¦é对ç½é¡µç URLï¼è䏿¯ç¹å®çèµæºæä»¶ï¼æä»¥æ´éåå¤é¡µé¢åºç¨ï¼MPAï¼ï¼è䏿¯å页é¢åºç¨ï¼SPAï¼ã
æ¨æµè§å API æ¯å¹¿æ³æ¯æç <link rel="prefetch"> çæ¿ä»£åï¼å¹¶ä¸æç®å代ä»
Chrome æ¯æãå·²ç»å¼ç¨ç <link rel="prerender"> ç¹æ§ãå®ç¸æ¯è¿äºææ¯æä¾äºå¾å¤æ¹è¿ï¼å¹¶ä¸ææ´çµæ´»ãå¯é
ç½®çæ¹å¼æ¥æå®åªäºææ¡£åºè¯¥è¢«é¢åï¼prefetchï¼æé¢æ¸²æï¼prerenderï¼ã
夿³¨ï¼æ¨æµè§å API å¹¶ä¸å¤çåèµæºçé¢åï¼ä¸ºæ¤è¿æ¯éè¦ä½¿ç¨ <link rel="prefetch">ã
æ¦å¿µåç¨æ³
æ¨æµè§åå¯ä»¥åå¨å
èç <script type="speculationrules"> æ ç¾ä¸ï¼æè
éè¿ Speculation-Rules ååºæ 头å¼ç¨çå¤é¨ææ¬æä»¶æ¥å®ä¹ãè¿äºè§å以 JSON æ ¼å¼æå®ã
èæ¬ç¤ºä¾ï¼
<script type="speculationrules">
{
"prerender": [
{
"where": {
"and": [
{ "href_matches": "/*" },
{ "not": { "href_matches": "/logout" } },
{ "not": { "href_matches": "/*\\?*(^|&)add-to-cart=*" } },
{ "not": { "selector_matches": ".no-prerender" } },
{ "not": { "selector_matches": "[rel~=nofollow]" } }
]
}
}
],
"prefetch": [
{
"urls": ["next.html", "next2.html"],
"requires": ["anonymous-client-ip-when-cross-origin"],
"referrer_policy": "no-referrer"
}
]
}
</script>
妿ç½ç«å
å«äºä½¿ç¨ <script> æ ç¾çæ¨æµè§åï¼é£ä¹å
¶å¿
须被 Content-Security-Policy ç script-src æä»¤æç¡®å
许ãå¯éè¿æ·»å 'inline-speculation-rules' æ¥æºãæ£åæ¥æºï¼hash-sourceï¼æ nonce æ¥æºï¼nonce-sourceï¼æ¥å®ç°ã
ä¸ä¸ª HTTP æ 头çä¾åï¼
Speculation-Rules: "/rules/prefetch.json"
å
嫿¨æµè§å JSON çææ¬èµæºå¯ä»¥ä½¿ç¨ä»»æææçå½ååæ©å±åï¼ä½å¿
须以 application/speculationrules+json MIME ç±»åæ¥æä¾ã
夿³¨ï¼ä½ å¯ä»¥å¨åä¸ä¸ªææ¡£éåæ¶ç¨å èèæ¬å HTTP æ å¤´æ¥æå®è§åââææè§åé½ä¼è¢«è§£æå¹¶å å ¥å°ææ¡£çæ¨æµè§åå表éã
æ¯ç§æ¨æµå 载类åï¼æ¯å¦ "prerender" æ "prefetch"ï¼é½æä¸ä¸ªä¸é¨çæ°ç»æ¥åæ¾è§åãæ¯æ¡è§å齿¯ä¸ä¸ªå¯¹è±¡ï¼æå®äºæ¯å¦è¦å è½½çèµæºåè¡¨ãæ¯ä¸ªè§åçé项ï¼ä¾å¦æ¾å¼ç Referrer-Policy 设置ï¼ã注æï¼é¢æ¸²æç URL ä¹ä¼è¢«é¢åã
åè§ <script type="speculationrules"> 以è·åå¯ç¨è¯æ³ç宿´è¯´æã
使ç¨é¢å
å¨ <script type="speculationrules"> å
ç´ æ Speculation-Rules æ 头ä¸å
å« prefetch è§åï¼æ¯æå®çæµè§å¨å°±ä¼ä¸è½½è¢«å¼ç¨é¡µé¢çååºä½ï¼ä½ä¸ä¼ä¸è½½è¢«é¡µé¢æå¼ç¨çåèµæºãå½å¯¼èªå°é¢åç页颿¶ï¼å®çå è½½éåº¦ä¼æ¯æ²¡æé¢åæ¶å¿«å¾å¤ã
é¢åçç»æä¼ä¿åå¨ä¸ä¸ªæ¯ä¸ªææ¡£çå åç¼åéãå½ä½ 离å¼å½å页颿¶ï¼ä»»ä½ç¼åçé¢åé½ä¼è¢«ä¸¢å¼ï¼é¤éä½ å¯¼èªå°äºé¢åçææ¡£ã
è¿æå³çå¦æä½ é¢åäºç¨æ·æ²¡æè®¿é®çå 容ï¼é£éå¸¸å°±æ¯æµªè´¹èµæºï¼å°½ç®¡ç»æå¯è½ä¼å¡«å HTTP ç¼åï¼å¦ææ 头å 许ï¼ãä¸è¿ï¼é¢åçåæææ¬æ¯é¢æ¸²æçè¦å°å¾å¤ï¼æä»¥å»ºè®®ä½ 广æ³éç¨é¢åï¼æ¯å¦é¢åä½ ç½ç«ä¸ææéè¦ç页é¢ï¼åªè¦è¿äºé¡µé¢æ¯å®å ¨çï¼åè§ä¸å®å ¨çæ¨æµæ§å è½½æ¡ä»¶ä»¥äºè§£æ´å¤ç»èï¼ã
åç«åè·¨ç«çé¢åé½å¯ä»¥å·¥ä½ï¼ä½è·¨ç«çé¢åæéå¶ï¼åè§âåç½ç«âåâè·¨ç½ç«â以äºè§£ä¸¤è çåºå«ï¼ãåºäºéç§èèï¼ç®åè·¨ç«é¢ååªæå¨ç¨æ·å¯¹ç®æ ç«ç¹æ²¡æè®¾ç½® cookie æ¶æä¼å·¥ä½ââæä»¬ä¸å¸æç«ç¹è½éè¿é¢å页é¢ï¼ç¨æ·å¯è½æ°¸è¿ä¸ä¼çæ£è®¿é®çï¼ä»¥å©ç¨ä¹å设置ç cookie æ¥è·è¸ªç¨æ·æ´»å¨ã
夿³¨ï¼å°æ¥ä¼éè¿ Supports-Loading-Mode æ 头æä¾è·¨ç«é¢åçå¯ç¨é项ï¼ä½å¨æ°åæ¬ææ¶è¿æ²¡æå®ç°ï¼åªæåæºãåç«ç颿¸²æå¯ç¨é项å¯ç¨ï¼ã
å¯¹äºæ¯æçæµè§å¨ï¼æ¨æµè§åé¢ååºè¯¥ä¼å
äºæ§çé¢åæºå¶ï¼å³ <link rel="prefetch"> åè®¾ç½®äº priority: "low" é项ç fetch()ãå 为æä»¬ç¥éï¼æ¨æµè§åé¢åæ¯ä¸ºäºå¯¼èªï¼è䏿¯ä¸è¬çèµæºé¢åï¼
- å®å¯ä»¥ç¨äºè·¨ç«ç¹å¯¼èªï¼è
<link rel="prefetch">ä¸è½ã - å®ä¸ä¼è¢«
Cache-Controlæ 头黿¢ï¼è<link rel="prefetch">é常ä¼è¢«é»æ¢ã
æ¤å¤ï¼æ¨æµè§åé¢åï¼
- å¨éè¦æ¶èªå¨éä½ä¼å
级ï¼
fetch()ä¸ä¼ï¼ã - å°éç¨æ·çé ç½®ãä¾å¦ï¼å½ç¨æ·ç设å¤å¤äºççµæ¨¡å¼ææµéèçæ¨¡å¼æ¶ï¼ä¸ä¼è¿è¡é¢åã
- å°é¢åçèµæºåå¨å¨æ¯ä¸ªææ¡£çå åç¼åä¸ï¼è䏿¯ HTTP ç¼åä¸ï¼è¿å¯è½ä¼ä½¿é¢åé度ç¨å¾®å¿«ä¸äºã
使ç¨é¢æ¸²æ
å¨ <script type="speculationrules"> å
ç´ æ Speculation-Rules æ 头ä¸å
å« prerender è§åï¼æ¯æå®çæµè§å¨å°±ä¼è·åãæ¸²æå¹¶å°å
容å è½½å°ä¸ä¸ªä¸å¯è§çæ ç¾é¡µä¸ï¼å¹¶åå¨å¨æ¯ä¸ªææ¡£çå
åç¼åä¸ãè¿å
æ¬å è½½ææåèµæºãè¿è¡ææ JavaScriptï¼çè³è¿æç± JavaScript æå¯å¨çåèµæºå è½½åæ§è¡æ°æ®è·åãä»»ä½ç¼åç颿¸²æåå
¶åèµæºå¨ä½ 离å¼å½å页颿¶é½ä¼è¢«ä¸¢å¼ï¼é¤éä½ æ¤å导èªå°é£ä¸ªé¢æ¸²æçææ¡£ã
ä¹å导èªå°é¢æ¸²æç页颿¶ï¼å è½½å 乿¯å³æ¶çãæµè§å¨æ¿æ´»é£ä¸ªä¸å¯è§çæ ç¾é¡µï¼è䏿¯æ§è¡é常ç导èªè¿ç¨ï¼ç¨é¢æ¸²æç页颿¿æ¢æ§çåå°é¡µé¢ã妿页é¢å¨å®å ¨é¢æ¸²æä¹åè¢«æ¿æ´»ï¼å®å°ä»¥å½åç¶ææ¿æ´»ï¼ç¶åç»§ç»å è½½ï¼è¿æå³çä½ ä»ç¶ä¼çå°æ¾èçæ§è½æåã
颿¸²æä¼ä½¿ç¨å ååç½ç»å¸¦å®½ãå¦æä½ é¢æ¸²æäºç¨æ·æ²¡æè®¿é®çå 容ï¼è¿äºèµæºå°±æµªè´¹äºï¼å°½ç®¡ç»æå¯è½ä¼å¡«å HTTP ç¼åï¼å¦ææ 头å 许ï¼ï¼å 许以å使ç¨ï¼ã颿¸²æçåæææ¬æ¯é¢åè¦å¤§å¾å¤ï¼å ¶ä»æ¡ä»¶ä¹å¯è½ä½¿å 容ä¸éå颿¸²æï¼å ·ä½ç»è请åè§ä¸å®å ¨çæ¨æµæ§å è½½æ¡ä»¶ï¼ãå æ¤ï¼å»ºè®®ä½ æ´è°¨æ å°éç¨é¢æ¸²æï¼ä»ç»èèé£äºæå¾é«æ¦ç被访é®ç页é¢ï¼å¹¶ä¸ä½ 认为å¼å¾ç¨é¢å¤çææ¬æ¢åç¨æ·ä½éªçæåã
夿³¨ï¼ä¸ºäºè®©ä½ 对æ½å¨çèµæºæµªè´¹æä¸ªæ¦å¿µï¼é¢æ¸²æä½¿ç¨çèµæºå¤§çº¦å渲æä¸ä¸ª <iframe> 䏿 ·å¤ã
夿³¨ï¼è®¸å¤ API ä¼è¢«èªå¨æ¨è¿å°é¢æ¸²æææ¿æ´»ä¹åãå ·ä½ç»è请åè§å¨é¢æ¸²ææé´æ¨è¿æéå¶çå¹³å°ç¹æ§ã
颿¸²æé»è®¤éå¶å¨åæºçææ¡£ä¸ãè·¨æºãåç«çæ¸²ææ¯å¯è½çââå®éè¦å¯¼èªç®æ 使ç¨å
·æ credentialed-prerender å¼ç Supports-Loading-Mode æ 头æ¥å¯ç¨ãè·¨ç«é¢æ¸²æç®åè¿ä¸å¯è½ã
å¯¹äºæ¯æå®çæµè§å¨ï¼æ¨æµè§å颿¸²æåºè¯¥ä¼å
äºæ§ç颿¸²ææºå¶ï¼å³ <link rel="prerender">ï¼
<link rel="prerender">æ¯ Chrome ç¹æçï¼ä»æªæ ååï¼Chrome å·¥ç¨å¢éæ£å¨éæ¥æ·æ±°å®ã- å®ä¼å è½½é£äºéè¿ JavaScript å è½½çåèµæºï¼è
<link rel="prerender">ä¸ä¼ã - å®ä¸ä¼è¢«
Cache-Controlè®¾ç½®é»æ¢ï¼è<link rel="prerender">ç»å¸¸ä¼è¢«é»æ¢ã - æ¨æµè§å颿¸²æåºè¯¥è¢«è§ä¸ºä¸ä¸ªæç¤ºåæ¸è¿å¢å¼ºãä¸
<link rel="prerender">ä¸åï¼å®åªæ¯ä¸ä¸ªæ¨æµæ§æç¤ºï¼æµè§å¨å¯è½ä¼æ ¹æ®ç¨æ·è®¾ç½®ãå½åå åä½¿ç¨æ åµæå ¶ä»å¯å弿¹æ³éæ©ä¸æ ¹æ®æç¤ºéåè¡å¨ã
æ¨æµè§å API ç¹æ§æ£æµ
ä½ å¯ä»¥ç¨ä»¥ä¸ä»£ç æ¥æ£æ¥æ¨æµè§å API æ¯å¦åå°æ¯æï¼
if (
HTMLScriptElement.supports &&
HTMLScriptElement.supports("speculationrules")
) {
console.log("ä½ çæµè§å¨æ¯ææ¨æµè§å APIã");
}
ä¾å¦ï¼ä½ å¯è½æ³å¨æ¯æçæµè§å¨ä¸æå
¥é¢åçæ¨æµè§åï¼ä½å¨å
¶ä»æµè§å¨ä¸ä½¿ç¨æ§ææ¯ï¼æ¯å¦ <link rel="prefetch">ï¼
if (
HTMLScriptElement.supports &&
HTMLScriptElement.supports("speculationrules")
) {
const specScript = document.createElement("script");
specScript.type = "speculationrules";
const specRules = {
prefetch: [
{
source: "list",
urls: ["/next.html"],
},
],
};
specScript.textContent = JSON.stringify(specRules);
document.body.append(specScript);
} else {
const linkElem = document.createElement("link");
linkElem.rel = "prefetch";
linkElem.href = "/next.html";
document.head.append(linkElem);
}
æ£æµé¢åå颿¸²æé¡µé¢
æ¬èæ¢è®¨ä¸åçæ¹æ³æ¥æ£æµè¯·æ±ç页颿¯å¦å·²è¢«é¢åæé¢æ¸²æã
æå¡å¨ç«¯æ£æµ
é¢åå颿¸²æé¡µé¢è¯·æ±ä¼æºå¸¦ Sec-Purpose è¯·æ±æ 头ï¼
对äºé¢åï¼
Sec-Purpose: prefetch
对äºé¢æ¸²æï¼
Sec-Purpose: prefetch;prerender
æå¡å¨å¯ä»¥æ ¹æ®æ¤æ 头è¿è¡ååºï¼ä¾å¦è®°å½æ¨æµæ§å 载请æ±ãè¿åä¸åå 容ï¼çè³é»æ¢æ¨æµæ§å è½½çåçã妿è¿åéæåçååºç ï¼éå®ååä»»ä½ HTTP ç¶æç ä¸å¨ 200-299 èå´å çï¼ï¼å页é¢ä¸ä¼è¢«é¢å/颿¸²æãæ¤å¤ï¼204 å 205 ç¶æç ä¹ä¼é»æ¢é¢æ¸²æï¼ä½ä¸ä¼é»æ¢é¢åï¼ã
使ç¨éæå代ç ï¼ä¾å¦ 503ï¼æ¯æå¡å¨ç«¯é»æ¢æ¨æµæ§å è½½çæç®åæ¹æ³ï¼å°½ç®¡é常æ´å¥½çæ¹æ³æ¯å 许é¢å/颿¸²æï¼å¹¶ä½¿ç¨ JavaScript å»¶è¿é£äºä» åºåçå¨å®é æ¥ç页颿¶çè¡ä¸ºã
JavaScript é¢åæ£æµ
å½é¡µé¢è¢«é¢åæ¶ï¼å
¶ PerformanceResourceTiming.deliveryType æ¡ç®å°è¿å "navigational-prefetch" å¼ãä½ å¯ä»¥ä½¿ç¨ä»¥ä¸ä»£ç 卿¶å°ç±»å为 "navigational-prefetch" çæ§è½æ¡ç®æ¶ï¼è¿è¡ä¸ä¸ªå½æ°ï¼
if (
performance.getEntriesByType("navigation")[0].deliveryType ===
"navigational-prefetch"
) {
respondToPrefetch(); // ä½è
å®ä¹ç彿°
}
卿µéæ§è½æ¶ï¼æå¸æå»¶è¿é£äºå¯è½ä¼å¨é¢åæé´åç并导è´é®é¢çè¡ä¸ºæ¶ï¼æ¤ææ¯é常æç¨ãï¼å¯åèä¸å®å ¨çé¢åï¼ã
JavaScript 颿¸²ææ£æµ
è¦å¨é¡µé¢é¢æ¸²ææ¶è¿è¡æ´»å¨ï¼ä½ å¯ä»¥æ£æ¥ Document.prerendering 屿§ãä¾å¦ï¼ä½ å¯ä»¥è¿è¡ä¸äºåæï¼
if (document.prerendering) {
analytics.sendInfo("颿¸²ææ¶å·²ç»è¿è¡å°äºè¿ä¸æ¥ï¼");
}
å½é¢æ¸²æçææ¡£è¢«æ¿æ´»æ¶ï¼PerformanceNavigationTiming.activationStart 被设å®ä¸ºä¸ä¸ªè¡¨ç¤ºä»é¢æ¸²æå¼å§å°ææ¡£è¢«æ¿æ´»ä¹é´çæ¶é´ç DOMHighResTimeStampã以ä¸å½æ°å¯ä»¥æ£æ¥é¢æ¸²ææ¶å颿¸²æåç页é¢ï¼
function pagePrerendered() {
return (
document.prerendering ||
self.performance?.getEntriesByType?.("navigation")[0]?.activationStart > 0
);
}
å½ç¨æ·æ¥ç页颿¿æ´»é¢æ¸²æé¡µé¢æ¶ï¼prerenderingchange äºä»¶å°è¢«è§¦åãè¿å¯ä»¥ç¨äºå¯ç¨é£äºä»¥åä¼å¨é¡µé¢å è½½æ¶é»è®¤å¯å¨ï¼ä½ä½ 叿延è¿å°ç¨æ·æ¥ç页颿¶æå¯å¨çæ´»å¨ã以ä¸ä»£ç 设置äºä¸ä¸ªäºä»¶çå¬å¨ï¼å¨é¢æ¸²æå®æåå¨é¢æ¸²æé¡µé¢ä¸è¿è¡ä¸ä¸ªå½æ°ï¼æè
å¨é颿¸²æé¡µé¢ä¸ç«å³è¿è¡å®ï¼
if (document.prerendering) {
document.addEventListener("prerenderingchange", initAnalytics, {
once: true,
});
} else {
initAnalytics();
}
ä¸å®å ¨çæ¨æµæ§å è½½æ¡ä»¶
æ¬èä»ç»äºéè¦è¦æçæ¡ä»¶ï¼å¨è¿äºæ¡ä»¶ä¸é¢åå/æé¢æ¸²ææ¯ä¸å®å ¨çãè¿æå³çé¢å/颿¸²æè¡¨ç°åºè¿äºæ åµç页é¢å¯è½éè¦å¨ä½ ç代ç ä¸éåè¡¥ææªæ½ï¼æè éè¦å®å ¨é¿å ã
ä¸å®å ¨çé¢å
å¦åæè¿°ï¼æä»¬å»ºè®®å¹¿æ³å°ä½¿ç¨é¢åï¼å 为é£é©ä¸åæ¥çæ¯çç¸å¯¹è¾ä½ââèµæºæµªè´¹çå¯è½æ§å¾å°ï¼èæ§è½æ¹è¿å¯è½é常æ¾èãç¶èï¼ä½ éè¦ç¡®ä¿é¢åç页é¢ä¸ä¼å¯¼è´åºç¨ç¨åºçæµç¨åºç°é®é¢ã
å½è¿è¡é¢åæ¶ï¼æµè§å¨éè¿å个 GET 请æ±ä¸è½½è¢«å¼ç¨é¡µé¢çååºä½ï¼ç¨æ·å¯è½ä¼å¨å°æ¥æä¸ªæ¶é´å¯¼èªå°è¯¥é¡µé¢ãå½è¯·æ±ç URL æ§è¡æå¡å¨æ®µåèµ·çå¯ä½ç¨ï¼èä½ ä¸å¸æå®å¨å¯¼èªå°è¯¥ URL ä¹ååçæ¶ï¼å°¤å ¶å®¹æåºç°é®é¢ã
ä¾å¦ï¼
- 注éç URLã
- è¯è¨åæ¢ç URLã
- âå å ¥è´ç©è½¦âç URLã
- æå¡å¨ä¼è§¦åçä¿¡åéçç»å½æµç¨ï¼ä¾å¦ä¸æ¬¡æ§å¯ç ï¼OTPï¼ï¼ç URLã
- å¢å ç¨æ·ä½¿ç¨é 颿°ï¼ä¾å¦æ¶èä»ä»¬çæ¯æå è´¹æç« é 颿å¯å¨ä»ä»¬çæ¯æåéæ°è®¡æ¶å¨ï¼ç URLã
- å¯å¨æå¡å¨ç«¯å¹¿å转åè·è¸ªç URLã
卿å¡å¨ä¸è§æµ Sec-Purpose: prefetch è¯·æ±æ 头ï¼å¹¶è¿è¡ç¹å®ä»£ç æ¥æ¨è¿é®é¢åè½ï¼å¯ä»¥ç¼è§£æ¤ç±»é®é¢ãç¨åï¼å½é¡µé¢å®é
被导èªå°æ¶ï¼å¦æéè¦ï¼ä½ å¯ä»¥åéè¿ JavaScript å¯å¨è¢«æ¨è¿çåè½ã
夿³¨ï¼ä½ å¯ä»¥å¨æ£æµé¢åå颿¸²æé¡µé¢é¨åæ¾å°æ´å¤å ³äºæ£æµä»£ç ç详ç»ä¿¡æ¯ã
é¢åä¸ä¸ªæå¡å¨æ¸²æçå 容ä¼å ç¨æ·å¨å½å页é¢ä¸å¯éåçè¡å¨èæ¹åçææ¡£ä¹æ¯æ½å¨çé£é©ãè¿å¯è½å æ¬ï¼ä¾å¦ï¼éæ¶æ¢è´é¡µé¢æçµå½±é¢åº§ä½å¾ãä»ç»æµè¯è¿äºæ åµï¼å¹¶éè¿å¨é¡µé¢å è½½åæ´æ°å 容æ¥ç¼è§£è¿äºé®é¢ãæå ³è¿äºæ åµçæ´å¤è¯¦ç»ä¿¡æ¯ï¼è¯·åè§æå¡å¨æ¸²æçå¯åç¶æã
夿³¨ï¼æµè§å¨ä¼å°é¢åç页é¢ç¼åä¸å°æ®µæ¶é´ï¼ä¾å¦ Chrome ä¼ç¼å 5 åéï¼ï¼ç¶åå丢å¼å®ä»¬ï¼å æ¤æ 论å¦ä½ï¼ä½ çç¨æ·å¯è½ä¼çå°æå¤è¿æ¶ 5 åéçå 容ã
å 为 JavaScript ç´å°æ¿æ´»æ¶æä¼è¿è¡ï¼æä»¥å¦æææè·å页é¢çå¯ä½ç¨é½æ¥èª JavaScript çæ§è¡ï¼åé¢åæ¯å®å ¨çï¼
æåä¸ä¸ªå°è´´å£«ï¼è¯·å®¡æ ¸ä½ å¨ robots.txt æä»¶ä¸å为ä¸å 许ç URLââé常è¿äº URL æåå°é£äºå¿ é¡»ç»è¿äºèº«ä»½éªè¯çç¨æ·æè½è®¿é®ç页é¢ï¼å æ¤ä¸åºå å«å¨æç´¢å¼æç»æä¸ãè¿äº URL 大夿°é½æ²¡é®é¢ï¼ä½è¿ä¹æ¯ä¸ä¸ªè½å¤æ¾å°ä¸éåé¢åï¼å³å®ä»¬è¡¨ç°åºä¸è¿°æ¡ä»¶ï¼ç URL ç好尿¹ã
ä¸å®å ¨ç颿¸²æ
颿¸²ææ¯é¢åé£é©æ´é«ï¼å æ¤åºè¯¥è°¨æ 使ç¨ï¼ä» å¨å¼å¾çæ åµä¸éç¨ã颿¸²ææ¶éè¦æ³¨æçä¸å®å ¨æ¡ä»¶æ´å¤ï¼å æ¤è½ç¶åæ¥æ´é«ï¼é£é©ä¹åæ ·é«ã
å½é¢æ¸²æåçæ¶ï¼æµè§å¨ä¼éè¿ GET è¯·æ± URL 并渲æåå è½½å 容å°ä¸ä¸ªä¸å¯è§çæ ç¾é¡µä¸ãè¿å æ¬è¿è¡å 容ä¸ç JavaScript å¹¶å è½½ææåèµæºï¼åèµæºä¹å æ¬éè¿ JavaScript è·åçèµæºã妿è§å¯å°ä»¥ä¸ä»»ä½æ¡ä»¶ï¼åå 容å¯è½ä¸éå颿¸²æï¼
- URL ä¸è½å®å ¨å°é¢åãå¦æä½ è¿æ²¡æé 读åä¸é¨åï¼è¯·å é 读并çè§£è¿äºæ¡ä»¶åæ ·éç¨äºä¸å®å ¨ç颿¸²æã
- 页é¢ç JavaScript å¨å è½½æ¶ä¿®æ¹å®¢æ·ç«¯åå¨ï¼ä¾å¦ Web å卿 IndexedDBï¼ï¼è¿å¯è½ä¼å¨ç¨æ·å½åæ¥ççå ¶ä»é颿¸²æé¡µé¢ä¸é ææ··æ·çææã
- 页é¢è¿è¡ç JavaScript æå è½½çå¾åä¼å¯¼è´å¯ä½ç¨ï¼ä¾å¦åéåææ°æ®ãè®°å½å¹¿åå±ç¤ºæä»¥ç¨æ·å·²ä¸å ¶äº¤äºçæ¹å¼ä¿®æ¹åºç¨ç¨åºç¶æï¼ãè¿åæ ·å¯è½å½±ååºç¨ç¨åºçæµç¨ï¼æå¯¼è´éè¯¯çæ§è½æä½¿ç¨æ¥åãæå ³è¿äºç¨ä¾çæ´å¤è¯¦ç»ä¿¡æ¯ï¼è¯·åé æå¡å¨æ¸²æçå¯åç¶æã
为äºç¼è§£è¿äºé®é¢ï¼ä½ å¯ä»¥ä½¿ç¨ä»¥ä¸ææ¯ï¼
- 卿å¡å¨ä¸çè§è¯·æ±å°è¾¾æ¶ç
Sec-Purpose: prefetchæ 头ï¼å¹¶è¿è¡ç¹å®ä»£ç 以æ¨è¿é®é¢åè½ã - 使ç¨
prerenderingchangeäºä»¶æ¥æ£æµé¢æ¸²æé¡µé¢ä½æ¶è¢«å®é æ¿æ´»ï¼å¹¶å æ¤è¿è¡ä»£ç ãè¿å¨ä¸¤ç§æ åµä¸é½å¾æç¨ï¼- æ¨è¿å¯è½å¨é¡µé¢æ¥çä¹åè¿è¡æ¶å¼èµ·é®é¢ç代ç ãä¾å¦ï¼ä½ å¯è½å¸æçå°æ¿æ´»ååæ´æ°å®¢æ·ç«¯åå¨æä½¿ç¨ JavaScript ä¿®æ¹æå¡å¨ç«¯ç¶æãè¿å¯ä»¥é¿å UI ååºç¨ç¨åºç¶æå½¼æ¤ä¸åæ¥çæ åµï¼ä¾å¦è´ç©è½¦æ¾ç¤ºæ²¡æååï¼å³ä½¿ç¨æ·å·²æ·»å äºä¸äºã
- 妿ä¸ä¸ç¹åä¸å°ï¼ä½ ä»ç¶å¯ä»¥å¨é¡µé¢æ¿æ´»åéæ°è¿è¡ä»£ç ï¼ä»¥ä½¿åºç¨ç¨åºåæ¬¡æ´æ°ãä¾å¦ï¼ä¸ä¸ªé«åº¦å¨æçéæ¶æ¢è´é¡µé¢å¯è½ä¾èµäºæ¥èªç¬¬ä¸æ¹åºçå
å®¹æ´æ°ãå¦æä½ ä¸è½å»¶è¿æ´æ°ï¼ä½ æ»å¯ä»¥å¨ç¨æ·æ¥ç页é¢åè·å¾ææ°çæ´æ°ã颿¸²æé¡µé¢å¯ä»¥ä½¿ç¨å¹¿æé¢é API æå¦ä¸ç§æºå¶å¦
fetch()æWebSocketè¿è¡å®æ¶æ´æ°ãè¿ä¿è¯äºç¨æ·å¨é¢æ¸²ææ¿æ´»åä¼çå°ææ°çå 容ã
- ä»ç»ç®¡çä½ çç¬¬ä¸æ¹åæèæ¬ââ妿å¯è½ï¼ä½¿ç¨å¯æç¥é¢æ¸²æçèæ¬ï¼ä¾å¦ä½¿ç¨
Document.prerendering屿§æ¥æ¨è¿å¨é¢æ¸²æé¡µé¢ä¸çè¿è¡ï¼å¦ Google Analytics æ NewRelicã- 请注æï¼å¨é¢æ¸²ææé´ï¼è·¨æº
<iframe>çå 容å 载被延è¿ï¼ç´å°æ¿æ´»åçãè¿æ ·åæ¯ä¸ºäºé¿å å å è½½æªæç¥é¢æ¸²æçè·¨æºé¡µé¢èé æçç ´åï¼å¹¶é¿å å´ç»åè¿äºæ¡æ¶æ´é²åªäºåæ®ååå¨ç夿æ§ãè¿æå³çå¨æäºæ åµä¸ç¨æ·æåå¯è½ä¼çå°ç©ºç½çæ¡æ¶ï¼ä½è¿åæ ·æå³ç大夿°ç¬¬ä¸æ¹å¾®ä»¶ï¼å¦å¹¿åææ¯ï¼å¨é¢æ¸²ææé´ä½¿ç¨æ¯å®å ¨çã - 对äºé£äºä¸æç¥é¢æ¸²æçç¬¬ä¸æ¹èæ¬ï¼å¦åæè¿°ï¼å¯ä½¿ç¨
prerenderingchangeäºä»¶æ¥é¿å 卿¿æ´»ä¹åå è½½å®ä»¬ã
- 请注æï¼å¨é¢æ¸²ææé´ï¼è·¨æº
æå¡å¨æ¸²æçå¯åç¶æ
éè¦å ³æ³¨çæå¡å¨æ¸²æç¶æä¸»è¦æä¸¤ç§ç±»åï¼è¿æ¶ç¶æåç¨æ·ç¹å®ç¶æ ãè¿å¯è½å¯¼è´ä¸å®å ¨çé¢åå颿¸²æã
- è¿æ¶ç¶æï¼èèä¸ä¸ªæå¡å¨æ¸²æçå客è¯è®ºå表çä¾åï¼è¯¥å表å¯è½å¨å客æç« è¢«é¢æ¸²æå被æ¥çä¹é´è¿æ¶ã妿å½å页颿¯ä¸ä¸ªç¨æ·æ£å¨å é¤åå¾è¯è®ºç管ç颿¿ï¼è¿ç¹å«å®¹æåºç°é®é¢ãå¦æç¨æ·ä¹å导èªå°å客æç« ï¼ä»ä»¬å¯è½ä¼å¯¹ä»ä»¬ååå é¤çåå¾è¯è®ºä¸ºä»ä¹è¿è½çå°æå°å°æã
- ç¨æ·ç¹å®ç¶æï¼èèéè¿ cookie è·è¸ªç»å½ç¶æçä¾åãå¯è½ä¼åºç°ä»¥ä¸é®é¢ï¼
- ç¨æ·å¨æ ç¾é¡µ 1 ä¸è®¿é®
https://site.example/aï¼å¨æ ç¾é¡µ 2 ä¸è®¿é®https://site.example/bï¼åæ¶æ³¨éã https://site.example/b颿¸²æhttps://site.example/cãå®å°ä»¥æ³¨éç¶æé¢æ¸²æã- ç¨æ·å¨æ ç¾é¡µ 1 ä¸ç»å½å°
https://site.exampleã - ç¨æ·åæ¢å°æ ç¾é¡µ 2 å¹¶ç¹å»é¾æ¥å°
https://site.example/cï¼è¿æ¿æ´»äºé¢æ¸²æç页é¢ã - æ ç¾é¡µ 2 æ¾ç¤º
https://site.example/cçæ³¨éè§å¾ï¼è¿ä½¿ç¨æ·æå°å°æï¼å 为ä»ä»¬è®¤ä¸ºèªå·±å·²ç»å½ã
- ç¨æ·å¨æ ç¾é¡µ 1 ä¸è®¿é®
ç¨æ·ç¹å®ç¶æé®é¢ä¹å¯è½åçå¨å ¶ä»çç¨æ·è®¾ç½®ä¸ï¼ä¾å¦è¯è¨è®¾ç½®ãæè²æ¨¡å¼å好æåè´ç©è½¦æ·»å ååãå½åªæ¶åå个æ ç¾æ¶ï¼è¿ä¹å¯è½åçï¼
- åè®¾ç¨æ·è®¿é®
https://site.example/productã https://site.example.com/product颿¸²æhttps://site.example.com/cartãå®é¢æ¸²ææ¶è´ç©è½¦ä¸æ 0 ä»¶ååã- ç¨æ·ç¹å»âæ·»å å°è´ç©è½¦âæé®ï¼è¿å¯å¨äºä¸ä¸ªè¯·æ±å°ååæ·»å å°ç¨æ·çè´ç©è½¦ï¼æ é页é¢éæ°å è½½ï¼ã
- ç¨æ·ç¹å»é¾æ¥å°
https://site.example.com/cartï¼è¿æ¿æ´»äºé¢æ¸²æç页é¢ã - ç¨æ·çå°ä¸ä¸ªç©ºè´ç©è½¦ï¼å³ä½¿ä»ä»¬åååå ¶ä¸æ·»å äºä¸è¥¿ã
对äºè¿äºæ
åµï¼ä»¥åå®é
ä¸ä»»ä½å
容å¯è½ä¸æå¡å¨ä¸åæ¥çæ¶åï¼æä½³çç¼è§£æªæ½æ¯é¡µé¢æéå·æ°èªå·±ãä¾å¦ï¼æå¡å¨å¯ä»¥ä½¿ç¨å¹¿æé¢é APIï¼æå¦ä¸ç§æºå¶å¦ fetch() æ WebSocketãç¶å页é¢å¯ä»¥éå½å°æ´æ°èªå·±ï¼å
æ¬å°æªæ¿æ´»çæ¨æµæ§å 载页é¢ã
颿¸²æææ¡£çä¼è¯åå²è¡ä¸º
仿ç»ç¨æ·çè§åº¦æ¥çï¼æ¿æ´»ä¸ä¸ªæ£å¨é¢æ¸²ææè å·²ç»å®æé¢æ¸²æçææ¡£çè¡ä¸ºï¼å°±åä»»ä½å¸¸è§ç导èªä¸æ ·ãæ¿æ´»çææ¡£ä¼æ¾ç¤ºå¨æ ç¾é¡µä¸å¹¶æ·»å å°ä¼è¯åå²ä¸ï¼ä»»ä½ç°æçåè¿åå²è®°å½é½ä¼è¢«å é¤ã卿¿æ´»ä¹åå¨é¢æ¸²ææµè§ä¸ä¸æä¸è¿è¡çä»»ä½å¯¼èªé½ä¸ä¼å½±åä¼è¯åå²ã
ä»å¼åè çè§åº¦æ¥çï¼é¢æ¸²æææ¡£å¯ä»¥è¢«è§ä¸ºå ·æä¸ä¸ªå¾®ä¼è¯åå²ï¼trivial session historyï¼ï¼å ¶åªæä¸ä¸ªæ¡ç®ââå½åæ¡ç®ã颿¸²æä¸ä¸æä¸çææå¯¼èªå®é ä¸é½è¢«æ¿æ¢äºã
è½ç¶å¨é¢æ¸²æææ¡£ä¸å¯ä»¥è°ç¨æä½ä¼è¯åå²ç API ç¹æ§ï¼ä¾å¦ History å Navigationï¼ï¼ä½å®ä»¬ä»
å¨ä¸ä¸æçå¾®ä¼è¯åå²ä¸æä½ãå æ¤ï¼é¢æ¸²æææ¡£ä¸ä¼åä¸å
¶å¼ç¨é¡µé¢çèåä¼è¯åå²è®°å½ãä¾å¦ï¼å®ä»¬ä¸è½éè¿ History.back() 导èªåå¼ç¨é¡µé¢ã
è¿ç§è®¾è®¡ç¡®ä¿äºç¨æ·å¨ä½¿ç¨åéæé®æ¶è·å¾é¢æçä½éªââå³ä»ä»¬è¢«å¸¦åæåçå°çå 容ã䏿¦é¢æ¸²æææ¡£è¢«æ¿æ´»ï¼åªæå个ä¼è¯å岿¡ç®è¢«æ·»å å°èåä¼è¯åå²ä¸ï¼å¿½ç¥å¨é¢æ¸²ææµè§ä¸ä¸æä¸åççä»»ä½å å导èªãå¨èåä¼è¯åå²ä¸åé䏿¥ââä¾å¦ï¼éè¿æåéæé®ââä¼å°ç¨æ·å¸¦åå¼ç¨é¡µé¢ã
å¨é¢æ¸²ææé´æ¨è¿æéå¶çå¹³å°ç¹æ§
ç±äºé¢æ¸²æé¡µé¢ä»¥éèçç¶ææå¼ï¼å æ¤ä¸äºå¯è½å¯¼è´ä¾µå ¥æ§è¡ä¸ºç API ç¹æ§å¨æ¤ç¶æä¸ä¸ä¼è¢«æ¿æ´»ï¼èæ¯æ¨è¿å°é¡µé¢æ¿æ´»æ¶ãå ¶ä»å¨é¢æ¸²ææ¶åå¨é®é¢ç web å¹³å°ç¹æ§åå®å ¨åå°éå¶ãæ¬èç»åºäºåªäºç¹æ§è¢«æ¨è¿æéå¶ç详ç»ä¿¡æ¯ã
夿³¨ï¼å¨å°æ°æ æ³æ¨è¿åéå¶çæ æ¯ä¸ï¼é¢æ¸²æå°è¢«åæ¶ã
弿¥ API æ¨è¿
æ¨è¿æå³ç API åè½ç«å³è¿åä¸ä¸ªå¾ å¤çç promiseï¼ç¶åå¨é¡µé¢æ¿æ´»ä¹åä¸åä»»ä½äºæ ãæ¿æ´»åï¼è¯¥åè½æ£å¸¸è¿è¡ï¼promise 被æ£å¸¸å ç°ææç»ã
å¨é¢æ¸²æææ¡£ä¸ï¼ä»¥ä¸å¼æ¥åè½çç»æè¢«æ¨è¿è³é¡µé¢è¢«æ¿æ´»ï¼
- é³é¢è¾åºè®¾å¤ APIï¼
MediaDevices.selectAudioOutput() - Background Fetch APIï¼
BackgroundFetchManager.fetch() - 广æé¢é APIï¼
BroadcastChannel.postMessage() - åæ®ç®¡ç APIï¼
CredentialsContainer.create()ãCredentialsContainer.get()ãCredentialsContainer.store() - å å¯åªä½æ©å± APIï¼
Navigator.requestMediaKeySystemAccess() - æ¸¸æææ APIï¼
Navigator.getGamepads()ãgamepadconnectedäºä»¶ãgamepaddisconnectedäºä»¶ - å°çä½ç½® APIï¼
Geolocation.getCurrentPosition()ãGeolocation.watchPosition()ãGeolocation.clearWatch() HTMLMediaElementAPIï¼å½å å«ææ¡£æ£å¨è¿è¡é¢æ¸²ææ¶ï¼ææ¾ä½ç½®ä¸ä¼åè¿ã- ç©ºé²æ£æµ APIï¼
IdleDetector.start() - åªä½ææä¸åªä½æµ APIï¼
MediaDevices.getUserMedia()ï¼ä»¥åéççæ¬Navigator.getUserMedia()ï¼ãMediaDevices.enumerateDevices() - éç¥ APIï¼
Notification()æé 彿°ãNotification.requestPermission() - æ¨é APIï¼
PushManager.subscribe() - å±å¹æ¹å APIï¼
ScreenOrientation.lock()ãScreenOrientation.unlock() - ä¼ æå¨ APIï¼
Sensor.start() - Service Worker APIï¼
ServiceWorker.postMessage()ãServiceWorkerContainer.register()ãServiceWorkerRegistration.update()ãServiceWorkerRegistration.unregister() - åå¨ APIï¼
StorageManager.persist() - Web é³é¢ APIï¼å¨å
å«ææ¡£æ£å¨è¿è¡é¢æ¸²ææ¶ï¼
AudioContextä¸è¢«å 许å¼å§ã - Web èç APIï¼
Bluetooth.getDevices()ãBluetooth.requestDevice() - WebHID APIï¼
HID.getDevices()ãHID.requestDevice() - Web é APIï¼
LockManager.query()ãLockManager.request() - Web MIDI APIï¼
Navigator.requestMIDIAccess() - Web NFC APIï¼
NDefReader.write()ãNDefReader.scan() - Web Serial APIï¼
Serial.getPorts()ãSerial.requestPort() - Web è¯é³ APIï¼
SpeechRecognition.abort()ãSpeechRecognition.start()ãSpeechRecognition.stop()ãSpeechSynthesis.cancel()ãSpeechSynthesis.pause()ãSpeechSynthesis.resume()ãSpeechSynthesis.speak() - WebUSB APIï¼
USB.getDevices()ãUSB.requestDevice() - WebXR è®¾å¤ APIï¼
XRSystem.requestSession()
éå¼éå¶ç API
以ä¸ç¹æ§å¨æªæ¿æ´»çææ¡£ä¸å°èªå¨å¤±è´¥ææ æä½ã
éè¦ç¬ææ¿æ´»æç²æ§æ¿æ´»ç APIï¼
- ç±
beforeunloadäºä»¶çæçç¡®è®¤å¯¹è¯æ¡ - åªåæ¿ API ä¸ä»»ä½äºä»¶ç触å
- æä»¶ç³»ç» APIï¼
Window.showDirectoryPicker()ãWindow.showOpenFilePicker()ãWindow.showSaveFilePicker() - å
¨å± APIï¼
Element.requestFullscreen() - ç©ºé²æ£æµ APIï¼
IdleDetector.requestPermission() - é®ç APIï¼
Keyboard.lock()ï¼éè¦å ¨å±ï¼ - æ¯ä»è¯·æ± APIï¼
PaymentRequest.show() - åç° APIï¼
PresentationRequest.start() - æééå® APIï¼
Element.requestPointerLock() - å±å¹æè· APIï¼
MediaDevices.getDisplayMedia() - Web å
±äº« APIï¼
Navigator.share() Window.open()
éè¦å å«ææ¡£å¤äºç¦ç¹ç¶æç APIï¼
éè¦å
å«ææ¡£ç Document.visibilityState 为 "visible" ç APIï¼
- ç»ä¸ç» APIï¼
HTMLVideoElement.requestPictureInPicture()ï¼è¦æ±å å«ææ¡£çå¯è§ç¶æä¸º"visible"æ transient activationï¼ - å±å¹å¤éé APIï¼
WakeLock.request()
å ¶ä»åéç¹æ§
-
ä¸è½½é¾æ¥ï¼å³å¸¦æ
download屿§ç<a>å<area>å ç´ ï¼å ¶ä¸è½½å°è¢«æ¨è¿ï¼ç´å°é¢æ¸²æå®æã -
ä¸å 许跨ç«ç¹å¯¼èªï¼ä»»ä½å¯¼èªå°ä¸åç«ç¹ç颿¸²æææ¡£å°å¨åé对è¿ç±»å ¶ä»ç«ç¹ç请æ±ä¹åç«å³è¢«ä¸¢å¼ã
-
åéç URLï¼é¢æ¸²æææ¡£ä¸è½æç®¡é HTTPï¼Sï¼é¡¶çº§ URLãå å«ä»¥ä¸ URL ç±»åå°å¯¼è´é¢æ¸²æç«å³è¢«ä¸¢å¼ï¼
javascript:URLdata:URLblob:URLabout:URLï¼å æ¬about:blankåabout:srcdoc
-
ä¼è¯åå¨ï¼
Window.sessionStorageå¯ä»¥ä½¿ç¨ï¼ä½è¡ä¸ºé常ç¹å®ï¼ä»¥é¿å å½±åå°é£äºå¯¹ä¼è¯å卿颿çç½ç«ï¼è¿äºç½ç«ç设计æ¯åºäºä¸ä¸ªåæï¼å䏿¶é´åªæä¸ä¸ªé¡µé¢è½å¤è®¿é®æ ç¾é¡µçä¼è¯åå¨ãå æ¤ï¼é¢æ¸²æé¡µé¢å¨å¼å§æ¶ä¼è·å¾ä¸ä¸ªå éï¼è¿ä¸ªå 鿝åºäºé¡µé¢åå»ºæ¶æ ç¾é¡µä¼è¯åå¨çç¶æã卿¿æ´»æ¶ï¼é¢æ¸²æé¡µé¢çåå¨å é被丢å¼ï¼åè代ä¹çæ¯æ ç¾é¡µç主åå¨ç¶æã使ç¨ä¼è¯åå¨ç页é¢å¯ä»¥ä½¿ç¨prerenderingchangeäºä»¶æ¥æ£æµä½æ¶åçæ¤åå¨äº¤æ¢ã -
Window.print()ï¼å¯¹è¯¥æ¹æ³çä»»ä½è°ç¨é½å°è¢«å¿½ç¥ã -
âç®åå¯¹è¯æ¡æ¹æ³âéå¶å¦ä¸ï¼
Window.alert()ç«å³è¿åè䏿¾ç¤ºå¯¹è¯æ¡ãWindow.confirm()ç«å³è¿åfalseè䏿¾ç¤ºå¯¹è¯æ¡ãWindow.prompt()ç«å³è¿åä¸ä¸ªç©ºå符串ï¼""ï¼è䏿¾ç¤ºå¯¹è¯æ¡ã
-
ä¸ç¨/å ±äº« worker èæ¬ä¼è¢«å è½½ï¼ä½å ¶æ§è¡è¢«æ¨è¿è³é¢æ¸²æææ¡£è¢«æ¿æ´»ã
-
è·¨æº
<iframe>å è½½å¨é¢æ¸²ææé´è¢«å»¶è¿è³é¡µé¢æ¿æ´»åã
æ¥å£
æ¨æµè§å API 没æå®ä¹èªå·±ç任使¥å£ã
å¯¹å ¶ä»æ¥å£çæ©å±
Document.prerendering-
ä¸ä¸ªå¸å°å±æ§ï¼å¦æææ¡£å½åæ£å¤äºé¢æ¸²æè¿ç¨ä¸ï¼åè¿å
trueã prerenderingchangeäºä»¶-
å½é¢æ¸²æçææ¡£è¢«æ¿æ´»æ¶ï¼å³ç¨æ·æ¥ç页颿¶ï¼è§¦åã
-
ä¸ä¸ªæ°åï¼è¡¨ç¤ºææ¡£å¼å§é¢æ¸²æå°è¢«æ¿æ´»ä¹é´çæ¶é´ã
PerformanceResourceTiming.deliveryType"navigational-prefetch"å¼-
表示æ§è½æ¡ç®çç±»åæ¯é¢åã
HTTP æ 头
Content-Security-Policy'inline-speculation-rules'å¼-
ç¨äºéæ©å è®¸å¨æ£å¨è·åçææ¡£ä¸ä½¿ç¨
<script type="speculationrules">æ¥å®ä¹æ¨æµè§åã Speculation-Rules-
æä¾ä¸ä¸ªæåå 嫿¨æµè§å JSON å®ä¹çææ¬èµæºç URL å表ãå½ååºæ¯ HTML ææ¡£æ¶ï¼è¿äºè§åå°è¢«æ·»å å°ææ¡£çæ¨æµè§åéä¸ã
Supports-Loading-Mode-
ç±å¯¼èªç®æ 设置ï¼ä»¥éæ©ä½¿ç¨åç§æ´é«é£é©çå 载模å¼ãä¾å¦ï¼è·¨æºãåç«é¢æ¸²æéè¦
Supports-Loading-Modeçå¼ä¸ºcredentialed-prerenderã
HTML ç¹æ§
<script type="speculationrules">-
ç¨äºå¨å½åææ¡£ä¸å®ä¹ä¸ç»é¢åå/æé¢æ¸²ææ¨æµè§åï¼è¿äºè§å被添å å°ææ¡£çæ¨æµè§åéä¸ã
示ä¾
ä½ å¯ä»¥å¨è¿éæ¾å°ä¸ä¸ªå®æ´ç颿¸²ææ¼ç¤ºã
è§è
| è§è |
|---|
| HTML > # speculative-loading > |
| Prerendering Revamped > |
æµè§å¨å ¼å®¹æ§
>html.elements.script.type.speculationrules
http.headers.Speculation-Rules
åè§
- developer.chrome.google.cn ä¸çå¨ Chrome ä¸é¢æ¸²æé¡µé¢ä»¥å®ç°å³æ¶ç½é¡µå¯¼èªï¼2023ï¼
- æ¨æµæ§å è½½ç¨äºæ¯è¾æ¨æµè§ååå ¶ä»ç±»ä¼¼çæ§è½æ¹è¿ç¹æ§ã