Baseline Widely available
å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
ã¡ã¢: ãã®æ©è½ã¯ã¦ã§ãã¯ã¼ã«ã¼å ã§å©ç¨å¯è½ã§ãã
NavigationPreloadManager
ã¯ãµã¼ãã¹ã¯ã¼ã«ã¼ API ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ããµã¼ãã¹ã¯ã¼ã«ã¼ã«ãããªã½ã¼ã¹ã®äºåèªã¿è¾¼ã¿ã管çããããã®ã¡ã½ãããæä¾ãã¾ãã
対å¿ãã¦ããã°ããã®åã®ãªãã¸ã§ã¯ã㯠ServiceWorkerRegistration.navigationPreload
ã«ãã£ã¦è¿ããã¾ãã äºåèªã¿è¾¼ã¿ãã§ãããªã¯ã¨ã¹ãã®çµæã¯ãFetchEvent.preloadResponse
ã«ãã£ã¦è¿ããããããã¹ã使ç¨ãã¦å¾
ã¡ã¾ãã
NavigationPreloadManager.enable()
ããã²ã¼ã·ã§ã³ã®äºåèªã¿è¾¼ã¿ãæå¹ã«ããundefined
ã§è§£æ±ºãã Promise
ãè¿ãã¾ãã
NavigationPreloadManager.disable()
ããã²ã¼ã·ã§ã³ã®äºåèªã¿è¾¼ã¿ãç¡å¹ã«ããundefined
ã§è§£æ±ºãã Promise
ãè¿ãã¾ãã
Service-Worker-Navigation-Preload
ãããã¼ã®å¤ãè¨å®ãã空㮠Promise
ãè¿ãã¾ãã
NavigationPreloadManager.getState()
äºåèªã¿è¾¼ã¿ãæå¹ãã©ããã¨ãHTTP ã® Service-Worker-Navigation-Preload
ã®å
容ã示ãããããã£ãæã¤ãªãã¸ã§ã¯ãã«è§£æ±ºãã Promise
ãè¿ãã¾ãã
ãµã¼ãã¹ã¯ã¼ã«ã¼ã¯ãæå®ãããã¹ã³ã¼ãå
ã®ãã¼ã¸ã«å¯¾ãã¦ããµã¤ãã®ä»£çã¨ã㦠fetch()
ã¤ãã³ããå¦çãã¾ãã ã¦ã¼ã¶ã¼ããµã¼ãã¹ã¯ã¼ã«ã¼ã使ç¨ãããã¼ã¸ã«ç§»åããã¨ããã©ã¦ã¶ã¼ã¯ï¼ã¾ã å®è¡ãã¦ããªããã°ï¼ã¯ã¼ã«ã¼ãèµ·åãããã§ããã¤ãã³ããéä¿¡ãã¦çµæãå¾
ã¡ã¾ãã ã¤ãã³ããåä¿¡ããã¨ããã£ãã·ã¥ã«ãªã½ã¼ã¹ãåå¨ããå ´åã¯ãããè¿ãã¾ããåå¨ããªãå ´åã¯ãªã¢ã¼ããµã¼ãã¼ãããªã½ã¼ã¹ãåå¾ãã¾ãï¼å°æ¥ã®ãªã¯ã¨ã¹ãã§è¿ãããã®ã³ãã¼ãä¿åãã¾ãï¼ã
ãµã¼ãã¹ã¯ã¼ã«ã¼ã¯ãèµ·åããã¾ã§ãã©ã¦ã¶ã¼ããã®ã¤ãã³ããå¦çã§ãã¾ããã ããã¯é¿ãããã¾ããããé常ã¯å¤§ããªå½±é¿ã¯ããã¾ããã ãµã¼ãã¹ã¯ã¼ã«ã¼ã¯ãå¤ãã®å ´åããã§ã«éå§ããã¦ãã¾ãï¼ä»ã«ããªã¯ã¨ã¹ããããå¦çãå®äºããæç¹ã¾ã§ã¢ã¯ãã£ããªç¶æ ãç¶ãã¾ãï¼ã ãµã¼ãã¹ã¯ã¼ã«ã¼ãèµ·åããªããã°ãªããªãå ´åã§ããå¤ãã®å ´åããã£ãã·ã¥ããå¤ãè¿ããããããé常ã«é«éã§ãã ãããããªã¢ã¼ããªã½ã¼ã¹ãåå¾ãå§ããåã«ã¯ã¼ã«ã¼ãèµ·åããªããã°ãªããªãå ´åãé å»¶ã¯èãããªãå¯è½æ§ãããã¾ãã
NavigationPreloadManager
ã«ã¯ããµã¼ãã¹ã¯ã¼ã«ã¼ã®èµ·åæã«ãªã½ã¼ã¹ã並åãã¦åå¾ããã¡ã«ããºã ãç¨æããã¦ãããããã«ãããã¯ã¼ã«ã¼ããã©ã¦ã¶ã¼ããã®ãã§ãããªã¯ã¨ã¹ããå¦çã§ããã¾ã§ã«ããªã½ã¼ã¹ããã§ã«å®å
¨ã«ãã¾ãã¯é¨åçã«ãã¦ã³ãã¼ãããã¦ããç¶æ
ã«ãããã¨ãã§ãã¾ãã ããã«ãããã¯ã¼ã«ã¼ããã§ã«éå§ããã¦ããå ´åã¨ãåç¨åº¦ãã«æªãç¶æ
ã§éå§ãããå ´åãå ´åã«ãã£ã¦ã¯ãããããè¯ãç¶æ
ã§éå§ãããå ´åãããã¾ãã
äºåèªã¿è¾¼ã¿ããã¼ã¸ã£ã¼ã¯ãäºåèªã¿è¾¼ã¿ãªã¯ã¨ã¹ãã« HTTP ã® Service-Worker-Navigation-Preload
ãããã¼ãéä¿¡ããäºåèªã¿è¾¼ã¿ãªã¯ã¨ã¹ãã«å¯¾ããã¬ã¹ãã³ã¹ãã«ã¹ã¿ãã¤ãºã§ããããã«ãã¾ãã ä¾ãã°ãå
ã®ãã¼ã¸ã®ä¸é¨ã ãã«éä¿¡ããããã¼ã¿ã忏ããããã¦ã¼ã¶ã¼ã®ãã°ã¤ã³ç¶æ
ã«åºã¥ãã¦ã¬ã¹ãã³ã¹ãã«ã¹ã¿ãã¤ãºãããããããã«ä½¿ç¨ã§ãã¾ãã
ãã®ä¾ã¯ Speed up Service Worker with Navigation Preloads (developer.chrome.com) ããåã£ããã®ã§ãã
ããã²ã¼ã·ã§ã³ã®äºåèªã¿è¾¼ã¿ã®æ©è½ãæ¤åºãã¦æå¹åä¸è¨ã§ã¯ãæåã® ServiceWorkerRegistration.navigationPreload
ã使ç¨ãã¦ããã®æ©è½ã«å¯¾å¿ãã¦ãã¦ãããã©ããã夿ããå¾ããµã¼ãã¹ã¯ã¼ã«ã¼ã® activate ã¤ãã³ããã³ãã©ã¼ã§ããã²ã¼ã·ã§ã³ã®äºåèªã¿è¾¼ã¿ãæå¹ã«ãã¦ãã¾ãï¼ãã®é¢æ°ã¯ããµã¼ãã¹ã¯ã¼ã«ã¼ç¨ã® NavigationPreloadManager
ãè¿ãããæ©è½ã«å¯¾å¿ãã¦ããªãå ´å㯠undefined
ãè¿ãã¾ãï¼ã
addEventListener("activate", (event) => {
event.waitUntil(
(async () => {
if (self.registration.navigationPreload) {
// ããã²ã¼ã·ã§ã³ã®äºåèªã¿è¾¼ã¿ãæå¹ã«ãã¾ãï¼
await self.registration.navigationPreload.enable();
}
})(),
);
});
äºåèªã¿è¾¼ã¿ãããã¬ã¹ãã³ã¹ã®ä½¿ç¨
次ã®ã³ã¼ãã¯ãäºåèªã¿è¾¼ã¿ãããã¬ã¹ãã³ã¹ (FetchEvent.preloadResponse
) ã使ç¨ãããµã¼ãã¹ã¯ã¼ã«ã¼ã®ãã§ããã¤ãã³ããã³ãã©ã¼ã示ãã¦ãã¾ãã
fetch
ã¤ãã³ããã³ãã©ã¼ã¯ãFetchEvent.respondWith()
ãå¼ã³åºãã¦ãã³ã³ããã¼ã«ãããã¼ã¸ã«ãããã¹ã渡ãã¨ããã®ãããã¹ã¯ãªã¯ã¨ã¹ãããããªã½ã¼ã¹ã§è§£æ±ºããã¾ãããªã½ã¼ã¹ã¯ããã£ãã·ã¥ãäºåèªã¿è¾¼ã¿ããããã§ãããªã¯ã¨ã¹ããã¾ãã¯æ°ãããããã¯ã¼ã¯ãªã¯ã¨ã¹ãããåå¾ããã¾ãã
ãã® Cache
ãªãã¸ã§ã¯ãã«ä¸è´ãã URL ãªã¯ã¨ã¹ããããå ´åãã³ã¼ãã¯ãã£ãã·ã¥ããã¬ã¹ãã³ã¹ãåå¾ããããã®è§£æ±ºæ¸ã¿ã®ãããã¹ãè¿ãã¾ãã ãã£ãã·ã¥ã«ä¸è´ãããã®ããªãã£ãå ´åãã³ã¼ãã¯è§£æ±ºæ¸ã¿ã®äºåèªã¿è¾¼ã¿ã¬ã¹ãã³ã¹ (FetchEvent.preloadResponse
) ãè¿ãã¾ãã ä¸è´ãããã£ãã·ã¥é
ç®ã¾ãã¯äºåèªã¿è¾¼ã¿ã¬ã¹ãã³ã¹ããªãã£ãå ´åãã³ã¼ãã¯ãããã¯ã¼ã¯ããæ°ããèªã¿åãæä½ãéå§ãããã®èªã¿åãæä½ã®ããã®ï¼æªè§£æ±ºã®ï¼ãããã¹ãè¿ãã¾ãã
addEventListener("fetch", (event) => {
event.respondWith(
(async () => {
// å¯è½ãªãããã£ãã·ã¥ããå¿çãã¾ã
const cachedResponse = await caches.match(event.request);
if (cachedResponse) return cachedResponse;
// ããããªããäºåèªã¿è¾¼ã¿ãããã¬ã¹ãã³ã¹ãããã°ãããã使ç¨ãã¾ã
const response = await event.preloadResponse;
if (response) return response;
// ããããªããã°ããããã¯ã¼ã¯ã試ãã¾ãã
return fetch(event.request);
})(),
);
});
ç¬èªã®ã¬ã¹ãã³ã¹
ãã©ã¦ã¶ã¼ã¯ãäºåèªã¿è¾¼ã¿ãªã¯ã¨ã¹ãã« HTTP ã® Service-Worker-Navigation-Preload
ãããã¼ããæ¢å®ã§ true
ã®ãã£ã¬ã¯ãã£ãå¤ã§éä¿¡ãã¾ãã ããã«ããããµã¼ãã¼ã¯é常ã®ãã§ãããªã¯ã¨ã¹ãã¨äºåèªã¿è¾¼ã¿ãã§ãããªã¯ã¨ã¹ããåºå¥ããå¿
è¦ã«å¿ãã¦ããããç°ãªãã¬ã¹ãã³ã¹ãéä¿¡ãããã¨ãã§ãã¾ãã
ã¡ã¢: äºåèªã¿è¾¼ã¿ã¨é常ã®ãã§ããæä½ã§ç°ãªãã¬ã¹ãã³ã¹ãè¿ããã¨ãã§ããå ´åããµã¼ãã¼ã¯ç¢ºå®ã«ç°ãªãã¬ã¹ãã³ã¹ããã£ãã·ã¥ãããããã« Vary: Service-Worker-Navigation-Preload
ãè¨å®ããå¿
è¦ãããã¾ãã
NavigationPreloadManager.setHeaderValue()
ã使ç¨ãã¦ãããã¼å¤ã夿´ããå
èªã¿æä½ã«è¿½å ã®ã³ã³ããã¹ããæä¾ãããã¨ãã§ãã¾ãã ä¾ãã°ãæè¿ãã£ãã·ã¥ããããªã½ã¼ã¹ã® ID ãå¤ã¨ãã¦è¨å®ããã¨ããµã¼ãã¼ã¯å®éã«å¿
è¦ã¨ãããã¾ã§ãªã½ã¼ã¹ãè¿ããªããªãã¾ãã åæ§ã«ãCookie ã使ç¨ãã代ããã«ãèªè¨¼ã¹ãã¼ã¿ã¹ã«åºã¥ãã¦è¿å¤ãæ§æãããã¨ãã§ãã¾ãã
ä¸è¨ã®ã³ã¼ãã¯ããããã¼ãã£ã¬ã¯ãã£ãã®å¤ãã夿° newValue
ã«è¨å®ããæ¹æ³ã示ãã¦ãã¾ãã
navigator.serviceWorker.ready
.then((registration) =>
registration.navigationPreload.setHeaderValue(newValue),
)
.then(() => {
console.log("Done!");
});
Speed up Service Worker with Navigation Preloads > Custom responses for preloads ã¯ãè¨äºã®ã¦ã§ããã¼ã¸ã®ã¬ã¹ãã³ã¹ããã£ãã·ã¥ããããããã¼ã¨ããã¿ã¼ããæ§ç¯ããããµã¤ãã®ãããå®å ¨ãªä¾ãæä¾ãã¾ããããã«ãããè¨äºã³ã³ãã³ãã®ã¿ãå èªã¿ãããããã«è¿ããã¾ãã
ç¶æ ã®åå¾NavigationPreloadManager.getState()
ã使ç¨ããã¨ãããã²ã¼ã·ã§ã³ã®äºåèªã¿è¾¼ã¿ãæå¹ã«ãªã£ã¦ãããã©ããã調ã¹ãäºåèªã¿è¾¼ã¿ãªã¯ã¨ã¹ãã«å¯¾ã㦠HTTP ã® Service-Worker-Navigation-Preload
ãããã¼ã«ã©ã®ãããªãã£ã¬ã¯ãã£ãå¤ãéä¿¡ããã¦ãããã夿ãããã¨ãã§ãã¾ãã
ä¸è¨ã³ã¼ãã¯ãç¶æ ãªãã¸ã§ã¯ãã«è§£æ±ºãããããã¹ãåå¾ããçµæããã°åºåããæ¹æ³ã示ãã¦ãã¾ãã
navigator.serviceWorker.ready
.then((registration) => registration.navigationPreload.getState())
.then((state) => {
console.log(state.enabled); // boolean
console.log(state.headerValue); // string
});
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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