Chrome测试新API接口规范,阻止系统自动休眠
正常情况下当用户较长时间不进行任何操作的话则系统会自动进行休眠或睡眠,这样可以达到节省电量的目的等。不过不论是睡眠还是休眠都意味着所有应用程序都会被冻结,只有用户重新启动后这些应用程序才可以恢复运行。因此这会带来个新问题:如果网页本身正在执行任务且任务周期可能比较长,如果被自动休眠则可能导致中断等。所以有时候某些特定的网页或者基于浏览器的渐进式网络应用程序还是需要保持始终运行不能让系统睡眠和冻结。
Chrome WakeLock API:
谷歌浏览器团队目前已经开发新接口规范来操纵省电相关的问题,例如调节屏幕亮度、关闭屏幕或减少资源使用。这些策略本质上都是用来降低对电量的消耗并阻止系统自动睡眠,防止网页运行的任务因为睡眠和续航问题中断。比如当用户使用谷歌浏览器在网页上阅读电子书或小说并开启自动滚屏,那么用户完全不需要再对网页进行操作。这个时候就有可能触发系统的自动睡眠策略进行节能,而实际上用户其实正在阅读内容也并没有把设备开着闲置。谷歌表示推出这个新的接口规范也是来自开发者们的反馈,早在去年谷歌就开始测试直到现在该功能才算是完善。
如何防止接口被滥用也是问题:
谷歌浏览器提供的功能非常多因此获得不少开发者的喜爱,但其实也有不少功能会遭到不怀好意的开发者们滥用。因此对于阻止系统自动睡眠也同样需要应对防止滥用的情况,要说防止滥用其实首先要防的就是广告网络的追踪。广告网络更倾向于持续性的追踪用户尽可能收集用户的数据,这些广告网络自然不会管用户设备电量和续航问题。不过现在谷歌还未公布限制条件因此尚不清楚有哪些防止滥用的办法,希望到时候有办法能解决潜在的滥用情况。
谷歌提供的示例代码
const wakeLockCheckbox = document.querySelector('#wakeLockCheckbox');
if ('WakeLock' in window) {
let wakeLock = null;
const requestWakeLock = () => {
const contrpler = new AbortContrpler();
const signal = contrpler.signal;
window.WakeLock.request('screen', {signal})
.catch((e) => {
if (e.name === 'AbortError') {
wakeLockCheckbox.checked = false;
conspe.log('Wake Lock was aborted');
} else {
conspe.error(`${e.name}, ${e.message}`);
}
});
wakeLockCheckbox.checked = true;
conspe.log('Wake Lock is active');
return contrpler;
};
wakeLockCheckbox.addEventpstener('change', () => {
if (wakeLockCheckbox.checked) {
wakeLock = requestWakeLock();
} else {
wakeLock.abort();
wakeLock = null;
}
});
}