电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何使用JavaScript檢測空閑的瀏覽器選項卡

瀏覽:3日期:2023-06-20 17:54:29

在某些情況下,當用戶與我們的最終產品或應用程序進行交互時,我們發現自己會執行許多密集的,占用大量CPU的任務。啟動輪詢器,建立WebSocket連接,甚至加載視頻或圖片等媒體,都有可能成為性能障礙,尤其是當這些任務在不需要的情況下消耗資源的時候。

在用戶沒有主動與界面交互的同時,從不必要的工作負載或網絡請求中釋放主線程是一個非常好的和有意義的實踐。換一種方式,在大多數主機提供商都在引入基于配額的定價模式的行業中,減少網絡請求也可以降低運行應用程序或服務的成本。

如何使用JavaScript檢測空閑的瀏覽器選項卡

頁面可見性(Page Visibility) API

所有現代的網頁瀏覽器都加入了頁面可見性API,它允許我們檢測瀏覽器的標簽頁何時被隱藏,此外,我們還可以注冊一個事件監聽器,以檢測可見性變化時的信號。

document.visibilityState

當頁面處于前臺時,document.visibilityState 可能是 visible ,最小化窗口的“標簽”或隱藏。

我們可以通過以下方式直接訪問 document.visibilityState:

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);

在后臺異步加載

但有時我們可以通過反其道而行之,加速用戶的終端體驗。我們可以異步加載外部依賴或資產,而不是取消所有的作業和請求。這樣,當用戶回來時,他們的最終體驗將更加“充實”并且豐富。

如何使用JavaScript檢測空閑的瀏覽器選項卡

/ Webpack /

使用ES2015動態導入建議和適當的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預加載 /

除了使用捆綁器,我們還可以僅使用幾行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);

總結

到此這篇關于如何使用JavaScript檢測空閑的瀏覽器選項卡的文章就介紹到這了,更多相關js瀏覽器選項卡內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 海南在线 海南一家| 创绿家招商加盟网-除甲醛加盟-甲醛治理加盟-室内除甲醛加盟-创绿家招商官网 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 周口风机|周风风机|河南省周口通用风机厂 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 深圳法律咨询【24小时在线】深圳律师咨询免费 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 短信营销平台_短信群发平台_106短信发送平台-河南路尚 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 塑钢课桌椅、学生课桌椅、课桌椅厂家-学仕教育设备首页 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 风淋室生产厂家报价_传递窗|送风口|臭氧机|FFU-山东盛之源净化设备 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 |