Page Visibility API, 사용자가 배터리 수명과 데이터를 절약하도록 도와줍시다 😀
이유
사용자가 몇 개의 탭을 열어 놓고 하나는 무거운 애니메이션을 실행하고 다른 하나는 서버에서 많은 데이터를 가져오고 다른 하나는 YouTube에서 비디오를 실행한다고 상상해 보십시오. 이것들은 모두 사용자 컴퓨터의 리소스를 필요로 하기 때문에 때때로 몇 개의 탭을 열면 갑자기 배터리가 부족하거나 데이터 허용량이 종료되고 있음을 깨닫게 됩니다.
💡 What if you could pause the current operation on a tab/window if the user isn't looking at it?
Page Visibility API
를 사용하면 그렇게 할 수 있습니다.페이지 가시성 API
이 API를 통해 개발자는 사용자가 페이지에서 포커스를 잃었는지 또는 다시 돌아왔는지 알 수 있습니다. 사용자가 최소화하거나 다른 탭/창으로 전환하면 API는
visibilitychange
이벤트를 전송하여 리스너가 페이지 상태를 알 수 있도록 합니다.Page Visibility API는 페이지가 사용자에게 보이지 않을 때 불필요한 작업을 수행하지 않도록 하는 도구 상자의 매우 유용한 도구입니다.
이 API는 다음 속성을
Document
인터페이스에 추가합니다.hidden
: 읽기 전용 속성이며 페이지가 사용자에게 숨겨진 상태인 경우 true를 반환합니다. visibilityState
: 문서의 현재 가시성 상태를 나타내는 DOMString
입니다. visible
, hidden
, prerender
및 unloaded
의 네 가지 값을 가질 수 있습니다. 가시성이 변경될 때마다 콜백 함수를 트리거하는
visibilitychange
이벤트를 수신할 수도 있습니다.function handleVisibilityChange () {
if (document.hidden) {
// stop that task 🛑
} else {
// you can start it again go ▶️
}
}
document.addEventListener('visibilitychange', handleVisibilityChange, false);
가시성 상태
앞에서 언급했듯이 이 속성은 각각 다른 탭/창 상태를 나타내는 네 가지 값을 가질 수 있습니다.
visible: 이것은 탭/창이 보이거나 부분적으로 보인다는 것을 의미합니다. 즉, 페이지가 최소화되지 않은 창의 전경 탭임을 의미합니다.
숨김: 기기의 화면이 꺼져 있거나 최소화되어 페이지가 보이지 않습니다.
prerender: 페이지가 현재 사전 렌더링 중이며 사용자에게 표시되지 않습니다.
unloaded: 이것은 사용자가 현재 페이지를 닫으려 한다는 것을 의미합니다.
⚠️ You need to know that not all browsers support the last two states.
데모
가장 간단한 시나리오는 페이지에서 비디오를 재생하는 것이므로 이를 예로 사용하겠습니다. 사용자가 다른 탭에 초점을 맞출 때 일시 중지되는 페이지의 간단한 비디오 요소를 사용해 봅시다.
<body>
<h1>Demo: Page Visibility API</h1>
<main>
<video id="videoElement"
poster="http://media.w3.org/2010/05/sintel/poster.png" width="400"
controls="" >
<source id='mp4' src="http://media.w3.org/2010/05/sintel/trailer.mp4" type='video/mp4'/>
<source id='webm' src="http://media.w3.org/2010/05/sintel/trailer.webm" type='video/webm'/>
<source id='ogv' src="http://media.w3.org/2010/05/sintel/trailer.ogv" type='video/ogg'/>
<p>Sorry, there's a problem playing this video. Please try using a different browser</p>
</video>
</main>
<script>
(function() {
'use strict';
// Set the name of the "hidden" property and the change event for visibility
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") {
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (typeof document.mozHidden !== "undefined") { // Firefox up to v17
hidden = "mozHidden";
visibilityChange = "mozvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") { // Chrome up to v32, Android up to v4.4, Blackberry up to v10
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}
var videoElement = document.getElementById("videoElement");
// If the page is hidden, pause the video;
// if the page is shown, play the video
function handleVisibilityChange() {
if (document[hidden]) {
videoElement.pause();
} else {
videoElement.play();
}
}
// Warn if the browser doesn't support addEventListener or the Page Visibility API
if (typeof document.addEventListener === "undefined" || typeof document[hidden] === "undefined") {
alert("This demo requires a modern browser that supports the Page Visibility API.");
} else {
// Handle page visibility change
document.addEventListener(visibilityChange, handleVisibilityChange, false);
// When the video pauses and plays, change the title.
videoElement.addEventListener("pause", function(){
document.title = 'Paused';
}, false);
videoElement.addEventListener("play", function(){
document.title = 'Playing'
}, false);
}
})();
</script>
</body>
우리가 할 일은 비디오 요소에 대한 참조를 가져오고
visibilitychange
이벤트에 연결하는 것뿐입니다. 페이지가 숨겨지면 비디오를 일시 중지하기만 하면 됩니다. 포커스가 돌아오면 재생합니다.live version on Glitch을 만들어 봤습니다. 비디오를 재생하고 다른 탭을 클릭하십시오. 동영상이 일시 중지되고 돌아오면 다시 재생됩니다.
요약
좋은 웹 애플리케이션에 반드시 핫 기능과 인상적인 UX가 필요한 것은 아닙니다. 때로는 성능이 뛰어난 웹 애플리케이션이 다른 어떤 것보다 사용자에게 어필할 수 있습니다. 이 작은 기사가 여러 가지 방법으로 사용자를 돕는 데 도움이 되기를 바랍니다.
즐거운 탐험 😊.
Reference
이 문제에 관하여(Page Visibility API, 사용자가 배터리 수명과 데이터를 절약하도록 도와줍시다 😀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yashints/page-visibility-api-let-s-help-users-save-their-battery-life-and-data-2moa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)