자 바스 크 립 트 를 사용 하여 남 은 브 라 우 저 옵션 을 검사 하 는 방법
사용자 가 주동 적 으로 인터페이스 와 상호작용 을 하지 않 는 동시에 불필요 한 작업 부하 나 네트워크 요청 에서 메 인 스 레 드 를 방출 하 는 것 은 매우 좋 고 의미 있 는 실천 이다.다른 방식 으로 대부분의 호스트 제공 업 체 가 할당량 을 바탕 으로 하 는 가격 책 정 모델 을 도입 하 는 업계 에서 네트워크 요 구 를 줄 이 는 것 도 응용 프로그램 이나 서 비 스 를 운영 하 는 원 가 를 낮 출 수 있다.
페이지 가시 성(페이지 가시 성)API
모든 현대 웹 브 라 우 저 는 페이지 의 가시 적 API 를 추 가 했 습 니 다.브 라 우 저의 탭 페이지 가 언제 숨겨 졌 는 지 확인 할 수 있 습 니 다.또한,가시 적 인 변 화 를 감지 하기 위해 이벤트 감청 기 를 등록 할 수 있 습 니 다.
document.visibilityState
페이지 가 프론트 에 있 을 때 document.visibility State 는 visible 일 수 있 습 니 다.창의'태그'를 최소 화하 거나 숨 길 수 있 습 니 다.
우 리 는 다음 과 같은 방식 으로 document.visibility State 를 직접 방문 할 수 있 습 니 다.
console.log(document.visibilityState);
// => “visible” “hidden”
visibilitychange Event우 리 는 또한 사건 탐지 기 를 사용 하여 가시 성 속성의 변경 사항 을 쉽게 검사 할 수 있다.
const onVisibilityChange = () => {
if (document.visibilityState === 'hidden') {
console.log('> .');
} else {
console.log('> .');
}
};
document.addEventListener('visibilitychange', onVisibilityChange, false);
폴 링 예시이러한 상황 에서 저 희 는 API 에 문의 하여 업 데 이 트 를 받 고 있 으 며,남 은 사용자 에 게 불필요 한 호출 을 피하 기 를 바 랍 니 다.간단 한 예 는 다음 과 같다.
const poll = () => {
const interval = 1500;
let _poller = null;
const repeat = () => {
console.log(`~ Polling: ${Date.now()}.`);
};
return {
start: () => {
_poller = setInterval(repeat, interval);
},
stop: () => {
console.log('~ Poller stopped.');
clearInterval(_poller);
}
};
};
const poller = poll();
poller.start();
const onVisibilityChange = () => {
if (document.visibilityState === 'hidden') {
poller.stop();
} else {
poller.start();
}
};
document.addEventListener('visibilitychange', onVisibilityChange, false);
배경 에서 비동기 로 불 러 오기그러나 때때로 우 리 는 그 반대 방향 을 통 해 사용자 의 단말기 체험 을 가속 화 할 수 있다.모든 작업 과 요청 을 취소 하 는 것 이 아니 라 외부 의존 이나 자산 을 비동기 로 불 러 올 수 있 습 니 다.이렇게 하면 사용자 가 돌아 올 때 그들의 최종 체험 은 더욱 충실 하고 풍부 해 질 것 이다.
/ Webpack /
ES 2015 동적 가 져 오기 제안 과 적당 한 Webpack 설정 목록 을 사용 하면 배경 에 추가 모듈 이나 자산 을 쉽게 불 러 올 수 있 습 니 다.
let loaded = false;
const onVisibilityChange = () => {
if (document.visibilityState === 'hidden') {
// Aggresively preload external assets ans scripts
if (loaded) {
return;
}
Promise.all([
import('./async.js'),
import('./another-async.js'),
import(/* webpackChunkName: "bar-module" */ 'modules/bar'),
import(/* webpackPrefetch: 0 */ 'assets/images/foo.jpg')
]).then(() => {
loaded = true;
});
}
};
document.addEventListener('visibilitychange', onVisibilityChange, false);
/ Rollup /Rollup 은 상 자 를 열 때 사용 하 는 동적 가 져 오기 도 지원 합 니 다.
let loaded = false;
const onVisibilityChange = () => {
if (document.visibilityState === 'hidden') {
// Aggresively preload external assets ans scripts
if (loaded) {
return;
}
Promise.all([
import('./modules.js').then(({default: DefaultExport, NamedExport}) => {
// do something with modules.
})
]).then(() => {
loaded = true;
});
}
};
document.addEventListener('visibilitychange', onVisibilityChange, false);
/자 바스 크 립 트 로 미리 불 러 오기/묶음 기 를 사용 하 는 것 외 에 정적 자원(예 를 들 어 그림)을 미리 불 러 오 는 데 몇 줄 의 JavaScript 만 사용 할 수 있 습 니 다.
let loaded = false;
const preloadImgs = (...imgs) => {
const images = [];
imgs.map(
url =>
new Promise((resolve, reject) => {
images[i] = new Image();
images[i].src = url;
img.onload = () => resolve();
img.onerror = () => reject();
})
);
};
const onVisibilityChange = () => {
if (document.visibilityState === 'hidden') {
// Aggresively preload external assets ans scripts
if (loaded) {
return;
}
Promise.all(
preloadImgs(
'https://example.com/foo.jpg',
'https://example.com/qux.jpg',
'https://example.com/bar.jpg'
)
)
.then(() => {
loaded = true;
})
.catch(() => {
console.log('> Snap.');
});
}
};
document.addEventListener('visibilitychange', onVisibilityChange, false);
작은 상호작용마지막 으로 사용자 의 주 의 를 끄 는 교묘 한 방법 은 아이콘 을 동적 으로 바 꾸 는 것 이다.몇 개의 픽 셀 만 사용 하면 상호작용 을 유지 할 수 있다.
const onVisibilityChange = () => {
const favicon = document.querySelector('[rel="shortcut icon"]');
if (document.visibilityState === 'hidden') {
favicon.href = '/come-back.png';
} else {
favicon.href = '/example.png';
}
};
document.addEventListener('visibilitychange', onVisibilityChange, false);
총결산자 바스 크 립 트 를 사용 하여 남 은 브 라 우 저 옵션 카드 를 검색 하 는 방법 에 대한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 js 브 라 우 저 옵션 카드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.