Page Visibility API๋ฅผ ๋ง์คํฐํ์ฌ ๋ค์ํ ๊ธฐ๊ธฐ์ ๋ธ๋ผ์ฐ์ ์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ , ๋ฆฌ์์ค ์๋น๋ฅผ ์ค์ด๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ์ธ์.
Page Visibility API: ์ ์ธ๊ณ ์น ์ฑ๋ฅ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ ์ต์ ํ
์ค๋๋ ์ ์ญ๋์ ์ธ ์น ํ๊ฒฝ์์ ์ฌ์ฉ์๋ค์ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ํญ์ ๋์์ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ ํนํ ๊ณผ์ ๋ฅผ ์ ์ํฉ๋๋ค. ํญ์ด ํ๋ฐํ๊ฒ ๋ณด์ด์ง ์์ ๋์๋ ์ด๋ป๊ฒ ์ต์ ์ ์น์ฌ์ดํธ ์ฑ๋ฅ๊ณผ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ ์ ์์๊น์? Page Visibility API๋ ์ด ๋ฌธ์ ์ ๋ํ ๊ฐ๋ ฅํ ํด๊ฒฐ์ฑ ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ฐ์๋ค์ด ์นํ์ด์ง์ ๊ฐ์์ฑ ์ํ์ ๋ฐ๋ผ ๋ฆฌ์์ค ์๋น๋ฅผ ์ง๋ฅ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์น์ฌ์ดํธ ๋์์ ๋ง์ถคํํ ์ ์๊ฒ ํด์ค๋๋ค.
Page Visibility API๋ ๋ฌด์์ธ๊ฐ?
Page Visibility API๋ ์น ๊ฐ๋ฐ์๊ฐ ์นํ์ด์ง๊ฐ ํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ด๋์ง ์ฌ๋ถ๋ฅผ ๊ฐ์งํ ์ ์๊ฒ ํด์ฃผ๋ ๋ธ๋ผ์ฐ์ API์ ๋๋ค. ํ์ด์ง๊ฐ ์ ๊ฒฝ ํญ์ด๋ ์ฐฝ์ ์์ ๋ ๋ณด์ด๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ฐ๋๋ก, ํ์ด์ง๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ํญ, ์ต์ํ๋ ์ฐฝ ๋๋ ์ ๊ธ ํ๋ฉด์ ์์ ๋๋ ์จ๊ฒจ์ง ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ด API๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
- `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();
}
// ๊ฐ์์ฑ ๋ณ๊ฒฝ ์ด๋ฒคํธ ์์
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 ์น ๋ฌธ์ ์น์ฌ์ดํธ์ ํธํ์ฑ ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
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์ ํ์ ํ์ฉํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฐ์ด๋ ์น ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.