Page Visibility APIãç¿åŸãã倿§ãªããã€ã¹ããã©ãŠã¶ã§ãŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžããããªãœãŒã¹æ¶è²»ãåæžãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæ¹åããŸãã
Page Visibility APIïŒã°ããŒãã«ãªãŠã§ãããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®æé©å
仿¥ã®ãã€ãããã¯ãªãŠã§ãç°å¢ã§ã¯ããŠãŒã¶ãŒã¯é »ç¹ã«è€æ°ã®ãã©ãŠã¶ã¿ããåæã«æ±ããŸããããã¯éçºè ã«ãšã£ãŠãŠããŒã¯ãªèª²é¡ãæç€ºããŸããã¿ããã¢ã¯ãã£ãã«è¡šç€ºãããŠããªããšãã§ãããæé©ãªãŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãšã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãããã«ããŠç¢ºä¿ããããšããåé¡ã§ããPage Visibility APIã¯ããã®èª²é¡ã«å¯Ÿãã匷åãªãœãªã¥ãŒã·ã§ã³ãæäŸããéçºè ããŠã§ãããŒãžã®è¡šç€ºç¶æ ã«åºã¥ããŠãªãœãŒã¹æ¶è²»ãã€ã³ããªãžã§ã³ãã«ç®¡çãããŠã§ããµã€ãã®åäœã調æŽã§ããããã«ããŸãã
Page Visibility APIãšã¯äœãïŒ
Page Visibility APIã¯ããŠã§ãããŒãžãçŸåšãŠãŒã¶ãŒã«è¡šç€ºãããŠãããã©ããããŠã§ãéçºè ãæ€åºã§ããããã«ãããã©ãŠã¶APIã§ããããŒãžã¯ãã©ã¢ã°ã©ãŠã³ãã®ã¿ããŸãã¯ãŠã£ã³ããŠã«ãããšãã«è¡šç€ºãããŠãããšèŠãªãããŸããéã«ãããŒãžã¯ããã¯ã°ã©ãŠã³ãã®ã¿ããæå°åããããŠã£ã³ããŠããŸãã¯ããã¯ç»é¢ã«ãããšãã«é衚瀺ãšèŠãªãããŸãã
ãã®APIã¯äž»ã«2ã€ã®æ©èœãæäŸããŸãïŒ
- `document.visibilityState` ããããã£ïŒ ããã¥ã¡ã³ãã®çŸåšã®è¡šç€ºç¶æ ãè¿ããŸããåãããå€ã¯ä»¥äžã®éãã§ãïŒ
- `visible`ïŒããŒãžã¯ãã©ã¢ã°ã©ãŠã³ãã®ã¿ããŸãã¯ãŠã£ã³ããŠã«ãããŸãã
- `hidden`ïŒããŒãžã¯ããã¯ã°ã©ãŠã³ãã®ã¿ããæå°åããããŠã£ã³ããŠããŸãã¯ããã¯ç»é¢ã«ãããŸãã
- `prerender`ïŒããŒãžã¯ããªã¬ã³ããªã³ã°äžã§ããããŸã 衚瀺ãããŠããŸããã
- `unloaded`ïŒããŒãžã¯ã¡ã¢ãªããã¢ã³ããŒããããŠããŸãã
- `visibilitychange` ã€ãã³ãïŒ ããã¥ã¡ã³ãã®è¡šç€ºç¶æ ãå€åãããã³ã«çºçããã€ãã³ãã§ãã
ãªãPage Visibility APIã¯éèŠãªã®ãïŒ
Page Visibility APIã¯ããŠãŒã¶ãŒãšéçºè ã®äž¡æ¹ã«å€§ããªå©ç¹ããããããŸãïŒ
ãŠã§ãããã©ãŒãã³ã¹ã®åäž
ããŒãžã衚瀺ãããŠãããšããçè§£ããããšã§ãéçºè ã¯ãªãœãŒã¹æ¶è²»ãæé©åã§ããŸããããŒãžãé衚瀺ã®å Žåã以äžã®ãããªãªãœãŒã¹ã倧éã«æ¶è²»ããã¿ã¹ã¯ãç¶ç¶ããå¿ èŠã¯ã»ãšãã©ãããŸããïŒ
- é »ç¹ãªããŒã¿ããŒãªã³ã°ïŒ ãµãŒããŒãžã®AJAXãªã¯ãšã¹ãã忢ãŸãã¯é »åºŠãæžãããŸãã
- ã¢ãã¡ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°ïŒ ã¢ãã¡ãŒã·ã§ã³ãäžæåæ¢ãããããã¬ãŒã ã¬ãŒããäžããŸãã
- åç»ã®åçïŒ åç»ã®åçãäžæåæ¢ããããç»è³ªãäžããŸãã
- éãèšç®ïŒ è€éãªèšç®ãããŒã¿åŠçãäžæããŸãã
ããã«ãããCPU䜿çšçãã¡ã¢ãªæ¶è²»ããããã¯ãŒã¯åž¯åå¹ ãåæžãããç¹ã«ã¢ãã€ã«ããã€ã¹ã§ã®èªã¿èŸŒã¿æéã®ççž®ãããã©ãŒãã³ã¹ã®åäžãããããªãŒå¯¿åœã®æ¹åã«ã€ãªãããŸãã
ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäž
ãã®APIã«ãããéçºè ã¯è¡šç€ºç¶æ ã«åºã¥ããŠãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã調æŽã§ããŸããäŸãã°ïŒ
- éç¥ïŒ é衚瀺ã®ã¿ããåã³è¡šç€ºããããšãã«éç¥ã衚瀺ããŸãã
- 鲿ã€ã³ãžã±ãŒã¿ãŒïŒ è¡šç€ºç¶æ ã«åºã¥ããŠé²æã€ã³ãžã±ãŒã¿ãŒãäžæåæ¢ãŸãã¯åéããŸãã
- ãŠãŒã¶ãŒã®é²æãä¿åïŒ ããŒãžãé衚瀺ã«ãªã£ããšãã«ãŠãŒã¶ãŒã®é²æãèªåçã«ä¿åããããŒã¿æå€±ãé²ããŸãã
ãããã®æ¹åã¯ããŠãŒã¶ãŒã®ããã€ã¹ããããã¯ãŒã¯ç¶æ³ã«é¢ããããããå¿çæ§ãé«ããŠãŒã¶ãŒãã¬ã³ããªãŒãªãŠã§ããµã€ãã«è²¢ç®ããŸãã
ãªãœãŒã¹ã®æé©å
Page Visibility APIã¯ãç¹ã«ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãå®è¡ãããŠã§ãã¢ããªã±ãŒã·ã§ã³ã«ãããŠãå¹ççãªãªãœãŒã¹ç®¡çã«äžå¯æ¬ ã§ããã¿ããé衚瀺ã®ãšãã«äžèŠãªæäœãäžæããããšã§ãAPIã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ãã¿ã¹ã¯ã®ããã«ã·ã¹ãã ãªãœãŒã¹ãè§£æŸããã·ã¹ãã å šäœã®ããã©ãŒãã³ã¹ãåäžãããŸãã
Page Visibility APIã®äœ¿ç𿹿³
Page Visibility APIã®äœ¿çšã¯ç°¡åã§ãã以äžã«åºæ¬çãªäŸã瀺ããŸãïŒ
// åæã®è¡šç€ºç¶æ
ã確èª
if (document.visibilityState === "visible") {
// ããŒãžã衚瀺ãããŠããã®ã§ãã¿ã¹ã¯ãéå§ãŸãã¯åé
startTasks();
} else {
// ããŒãžãé衚瀺ãªã®ã§ãã¿ã¹ã¯ãäžæåæ¢
pauseTasks();
}
// visibilitychangeã€ãã³ãããªãã¹ã³
document.addEventListener("visibilitychange", function() {
if (document.visibilityState === "visible") {
// ããŒãžã衚瀺ãããŠããã®ã§ãã¿ã¹ã¯ãéå§ãŸãã¯åé
startTasks();
} else {
// ããŒãžãé衚瀺ãªã®ã§ãã¿ã¹ã¯ãäžæåæ¢
pauseTasks();
}
});
function startTasks() {
console.log("ã¿ã¹ã¯ãéå§ããŠããŸã...");
// ãªãœãŒã¹ã倧éã«æ¶è²»ããã¿ã¹ã¯ãéå§ããã³ãŒããããã«èšè¿°
}
function pauseTasks() {
console.log("ã¿ã¹ã¯ãäžæåæ¢ããŠããŸã...");
// ãªãœãŒã¹ã倧éã«æ¶è²»ããã¿ã¹ã¯ãäžæåæ¢ããã³ãŒããããã«èšè¿°
}
ãã®ã³ãŒãã¹ããããã¯ãåæã®è¡šç€ºç¶æ ã確èªãã`visibilitychange`ã€ãã³ãããªãã¹ã³ããŠãã¿ã¹ã¯ãé©å®éå§ãŸãã¯äžæåæ¢ããæ¹æ³ã瀺ããŠããŸãã
å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
ããŸããŸãªã·ããªãªã§Page Visibility APIãã©ã®ããã«äœ¿çšã§ããããããã€ãã®å®è·µçãªäŸãèŠãŠã¿ãŸãããïŒ
äŸ1ïŒåç»åçã®æé©å
åç»ã¹ããªãŒãã³ã°ãµã€ããèããŠã¿ãŸãããããŠãŒã¶ãŒãå¥ã®ã¿ãã«åãæ¿ãããšããããã¯ã°ã©ãŠã³ãã§åç»ã®ãããã¡ãªã³ã°ãåçãç¶ããå¿ èŠã¯ãããŸããã
const videoElement = document.getElementById("myVideo");
document.addEventListener("visibilitychange", function() {
if (document.visibilityState === "visible") {
// ããŒãžã衚瀺ãããŠããã®ã§ãåç»ã®åçãåé
videoElement.play();
} else {
// ããŒãžãé衚瀺ãªã®ã§ãåç»ã®åçãäžæåæ¢
videoElement.pause();
}
});
ãã®ã³ãŒãã¯ãã¿ããé衚瀺ã®ãšãã«åç»ãäžæåæ¢ãã垯åå¹ ãšCPUãªãœãŒã¹ãç¯çŽããŸãã
äŸ2ïŒããŒã¿ããŒãªã³ã°é »åºŠã®åæž
å€ãã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãææ°ã®æ å ±ãç¶æããããã«é »ç¹ãªããŒã¿ããŒãªã³ã°ã«äŸåããŠããŸãããããããŠãŒã¶ãŒãã¢ã¯ãã£ãã«ããŒãžãèŠãŠããªãå Žåãããã¯ç¡é§ã«ãªãå¯èœæ§ããããŸãã
let pollingInterval;
function startPolling() {
pollingInterval = setInterval(function() {
// ãµãŒããŒããããŒã¿ãååŸããã³ãŒã
fetchData();
}, 5000); // 5ç§ããšã«ããŒãªã³ã°
}
function stopPolling() {
clearInterval(pollingInterval);
}
document.addEventListener("visibilitychange", function() {
if (document.visibilityState === "visible") {
// ããŒãžã衚瀺ãããŠããã®ã§ãããŒãªã³ã°ãéå§
startPolling();
} else {
// ããŒãžãé衚瀺ãªã®ã§ãããŒãªã³ã°ã忢
stopPolling();
}
});
// ããŒãžãæåãã衚瀺ãããŠããå Žåã¯ããŒãªã³ã°ãéå§
if (document.visibilityState === "visible") {
startPolling();
}
function fetchData() {
// å®éã®ããŒã¿ååŸããžãã¯ã«çœ®ãæããŠãã ãã
console.log("ããŒã¿ãååŸããŠããŸã...");
}
ãã®ã³ãŒãã¯ãã¿ããé衚瀺ã®ãšãã«ããŒã¿ããŒãªã³ã°ã忢ããã¿ããåã³è¡šç€ºããããšãã«åéããŸãã
äŸ3ïŒã²ãŒã ã«ãŒãã®äžæåæ¢
ãŠã§ãããŒã¹ã®ã²ãŒã ã§ã¯ãäžèŠãªCPU䜿çšçãšããããªãŒæ¶è²»ãé²ãããã«ããŠãŒã¶ãŒãå¥ã®ã¿ãã«åãæ¿ãããšãã«ã²ãŒã ã«ãŒããäžæåæ¢ããããšãäžå¯æ¬ ã§ãã
let gameLoopInterval;
function startGameLoop() {
gameLoopInterval = setInterval(gameLoop, 16); // 60 FPS
}
function stopGameLoop() {
clearInterval(gameLoopInterval);
}
function gameLoop() {
// ã²ãŒã ããžãã¯ãããã«èšè¿°
console.log("ã²ãŒã ã«ãŒãå®è¡äž...");
}
document.addEventListener("visibilitychange", function() {
if (document.visibilityState === "visible") {
// ããŒãžã衚瀺ãããŠããã®ã§ãã²ãŒã ã«ãŒããéå§
startGameLoop();
} else {
// ããŒãžãé衚瀺ãªã®ã§ãã²ãŒã ã«ãŒãã忢
stopGameLoop();
}
});
// ããŒãžãæåãã衚瀺ãããŠããå Žåã¯ã²ãŒã ã«ãŒããéå§
if (document.visibilityState === "visible") {
startGameLoop();
}
ãã®ã³ãŒãã¯ãã¿ããé衚瀺ã®ãšãã«ã²ãŒã ã«ãŒããäžæåæ¢ããã²ãŒã ãããã¯ã°ã©ãŠã³ãã§ãªãœãŒã¹ãæ¶è²»ããã®ãé²ããŸãã
äŸ4ïŒãŠãŒã¶ãŒããŒã¿ã®èªåä¿å
ããŒã¿æå€±ãé²ããããã¢ããªã±ãŒã·ã§ã³ã¯ããŒãžãé衚瀺ã«ãªã£ããšãã«ãŠãŒã¶ãŒããŒã¿ãèªåçã«ä¿åã§ããŸãã
document.addEventListener("visibilitychange", function() {
if (document.visibilityState === "hidden") {
// ããŒãžãé衚瀺ã«ãªã£ãã®ã§ããŠãŒã¶ãŒããŒã¿ãä¿å
saveUserData();
}
});
function saveUserData() {
// ãŠãŒã¶ãŒããŒã¿ãããŒã«ã«ã¹ãã¬ãŒãžããµãŒããŒã«ä¿åããã³ãŒã
console.log("ãŠãŒã¶ãŒããŒã¿ãä¿åããŠããŸã...");
}
ããã«ããããŠãŒã¶ãŒã誀ã£ãŠã¿ããéããããããŒãžããç§»åãããããå Žåã§ãããŠãŒã¶ãŒã®é²æãä¿åãããããšãä¿èšŒãããŸãã
ãã©ãŠã¶ã®äºææ§
Page Visibility APIã¯ãChromeãFirefoxãSafariãEdgeãOperaãå«ãçŸä»£ã®ãã©ãŠã¶ã§åºããµããŒããããŠããŸããææ°æ å ±ã«ã€ããŠã¯ãMDN Web Docsãµã€ãã®äºææ§ããŒãã«ã確èªã§ããŸãã
APIããµããŒãããŠããªãå€ããã©ãŠã¶ã«ã¯ããã©ãŒã«ããã¯å®è£ ãæäŸããããã«ããªãã£ã«ã䜿çšã§ããŸãããã ããããªãã£ã«ã¯ãã€ãã£ãAPIã»ã©æ£ç¢ºãŸãã¯å¹ççã§ã¯ãªãå ŽåããããŸãã
Page Visibility APIã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
Page Visibility APIã䜿çšããéã«çæãã¹ãããã€ãã®ãã¹ããã©ã¯ãã£ã¹ã以äžã«ç€ºããŸãïŒ
- éå°ãªæé©åãé¿ããïŒ è¡šç€ºç¶æ ã«åºã¥ããŠã³ãŒããæ©ãŸã£ãŠæé©åããªãã§ãã ãããã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããŠãæããªãœãŒã¹ãæ¶è²»ããã¿ã¹ã¯ãç¹å®ããããããæåã«æé©åããããšã«éäžããŠãã ããã
- è¡šç€ºå€æŽã®ãããŠã³ã¹ãŸãã¯ã¹ãããã«ïŒ éå°ãªã€ãã³ãåŠçãé¿ããããã«ã`visibilitychange`ã€ãã³ãã®ãããŠã³ã¹ãŸãã¯ã¹ãããã«ãæ€èšããŠãã ããã
- 培åºçã«ãã¹ãããïŒ Page Visibility APIãæ£ããæ©èœããŠããããšã確èªããããã«ãããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŠãã ããã
- ã¢ã¯ã»ã·ããªãã£ãèæ ®ããïŒ Page Visibility APIã®äœ¿çšãã¢ã¯ã»ã·ããªãã£ã«æªåœ±é¿ãäžããªãããã«ããŠãã ãããäŸãã°ãããŒãžãé衚瀺ã®ãšãã«äžæåæ¢ãŸãã¯ç¡å¹ã«ãããæ å ±ãæ©èœã«ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããä»£æ¿æ¹æ³ãæäŸããŠãã ããã
- æç¢ºãªãã£ãŒãããã¯ãæäŸããïŒ è¡šç€ºç¶æ ã«åºã¥ããŠã¿ã¹ã¯ãäžæåæ¢ãŸãã¯åéãããããšããŠãŒã¶ãŒã«ç¥ãããŠãã ãããããã«ãããæ··ä¹±ãé²ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸããäŸãã°ãããã°ã¬ã¹ããŒã¯ã¿ããé衚瀺ã®ãšãã«äžæåæ¢ãã衚瀺ããããšåéããããã«ã§ããŸãã
ãŠã§ãããã©ãŒãã³ã¹ãšPage Visibility APIã®æªæ¥
ãŠã§ãã¢ããªã±ãŒã·ã§ã³ããŸããŸãè€éã§ãªãœãŒã¹ã倧éã«æ¶è²»ããããã«ãªãã«ã€ããŠãPage Visibility APIã¯ãŠã§ãããã©ãŒãã³ã¹ã®æé©åãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžã«ãããŠåŒãç¶ãéèŠãªåœ¹å²ãæãããŸããå°æ¥ã®éçºã«ã¯ä»¥äžãå«ãŸããå¯èœæ§ããããŸãïŒ
- ãã詳现ãªè¡šç€ºç¶æ ïŒ APIãæ¡åŒµãããããŒãžãéšåçã«é ããŠããããä»ã®èŠçŽ ã«ãã£ãŠèŠãããŠããããªã©ãããŒãžã®è¡šç€ºç¶æ ã«é¢ããããè©³çŽ°ãªæ å ±ãæäŸã§ããããã«ãªãå¯èœæ§ããããŸãã
- ä»ã®APIãšã®çµ±åïŒ APIãIdle Detection APIãªã©ã®ä»ã®ãã©ãŠã¶APIãšçµ±åãããããã«æŽç·ŽããããªãœãŒã¹ç®¡çæ©èœãæäŸã§ããããã«ãªãå¯èœæ§ããããŸãã
- ããªãã£ã«ã®æ¹åïŒ å€ããã©ãŠã¶ã®ãµããŒããæäŸããããã«ãããæ£ç¢ºã§å¹ççãªããªãã£ã«ãéçºãããå¯èœæ§ããããŸãã
çµè«
Page Visibility APIã¯ããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãæé©åãããªãœãŒã¹æ¶è²»ãåæžãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããŠã§ãéçºè ã«ãšã£ãŠè²ŽéãªããŒã«ã§ããããŒãžã衚瀺ãããŠãããé衚瀺ããçè§£ããããšã§ãéçºè ã¯ãªãœãŒã¹ã倧éã«æ¶è²»ããã¿ã¹ã¯ãã€ã³ããªãžã§ã³ãã«ç®¡çãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã調æŽãããŠãŒã¶ãŒã®ããã€ã¹ããããã¯ãŒã¯ç¶æ³ã«é¢ãããããŠã§ããµã€ããå¿çæ§ãé«ãå¹ççã§ããããšãä¿èšŒã§ããŸããPage Visibility APIãæ¡çšããããšã§ããã¹ãŠã®äººã®ããã«ããæç¶å¯èœã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãŠã§ããåµé ã§ããŸãã
äžè²«ããåäœãšæé©ãªããã©ãŒãã³ã¹ã確ä¿ããããã«ãããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§å®è£ ããã¹ãããããšãå¿ããªãã§ãã ããããã¹ããã©ã¯ãã£ã¹ã«åŸãããŠã§ãããã©ãŒãã³ã¹æé©åã®ææ°ååã«ã€ããŠæ å ±ãåŸãããšã§ãPage Visibility APIã®åãæŽ»çšããŠãäžçäžã®ãŠãŒã¶ãŒã«åè¶ãããŠã§ããšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã