观察你的 Web 应用程序 - 快速总结

2025-06-08

观察你的 Web 应用程序 - 快速总结

作为 Web 开发者,我们编写了大量代码来检测 Web 应用中的变更,并根据这些变更进行相应的操作。如今,Web 上有大量 API 可以“观察”你的 Web 应用的各种变更,并允许你根据这些变更执行相应的操作。

以下是简要总结:

1.通过事件监听器观察DOM

最经典的检测变化的方式是使用addEventListener。这可以用来监听原生事件以及自定义事件。

window.addEventListener('scroll', e => { ... });  // user scrolls the page.

el.addEventListener('focus', e => { ... });  // el is focused.

img.addEventListener('load', e => { ... });  // img is done loading.

el.addEventListener('custom-event', e => { ... });  // catch custom event fired on el.

Enter fullscreen mode Exit fullscreen mode

2. 检查 DOM 树的修改

MutationObserver接口提供了监视 DOM 树所发生的变化的能力。

var target = document.querySelector('#div_id');

var observer = new MutationObserver(mutations => {
    mutations.forEach(mutation => {
        console.log(mutation.type);
    });
});

var config = { 
    attributes: true, 
    childList: true, 
    characterData: true 
} 
observer.observe(target, config);
Enter fullscreen mode Exit fullscreen mode

3. 检查元素何时进入视图

Intersection Observer API提供了一种简单的方法来观察和注册回调,以便在页面上的元素进入视图时触发。

const images = document.querySelectorAll('.animate');

observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.intersectionRatio > 0) {
      console.log('in the view');
    } else {
      console.log('out of view');
    }
  });
});

images.forEach(image => {
  observer.observe(image);
});

Enter fullscreen mode Exit fullscreen mode

使用此 API,我们可以在动画、延迟加载图像等出现在视图中时触发它们。


4. 检查 DOM 中的元素何时调整大小

ResizeObserver允许在元素大小发生变化通知元素。

const myObserver = new ResizeObserver(entries => {
  entries.forEach(entry => {
    console.log('width', entry.contentRect.width);
    console.log('height', entry.contentRect.height);
  });
});

const el = document.querySelector('.some-element');
myObserver.observe(el);
Enter fullscreen mode Exit fullscreen mode

对于每个条目,我们都会得到一个具有属性 -contentRect和 的对象target。目标是 DOM 元素本身,contentRect 是一个具有以下属性的对象widthheightxytopbottomleftright


5. 检查你的 Web 应用是否处于全屏模式

使用全屏 API可以实现这一点。

var el = document.getElementById("myvideo");
if (el.requestFullscreen) {
  el.requestFullscreen();
}
Enter fullscreen mode Exit fullscreen mode

此 API 不仅可以检测全屏模式,还允许关闭和打开全屏模式。


6. 检查标签页是否处于焦点

document.addEventListener('visibilitychange', e => {
    if(document.hidden) {
        // .... do something
    } else {
        // .... dome something else
    }
});
Enter fullscreen mode Exit fullscreen mode

即使这不是一个新的 API,而只是一项技术,我仍然会将其添加到列表中。一个用例是将用户的注意力重新吸引到被放弃的标签页上。


7. 检查设备方向变化

屏幕方向 API使这成为可能。


window.addEventListener('orientationchange', e => {
  console.log(screen.orientation.angle, screen.orientatio.type)
});

Enter fullscreen mode Exit fullscreen mode

我们还可以检查当前方向是否与特定方向匹配。

const media = window.matchMedia('(orientation: portrait)');
media.addListener(mql => console.log(mql.matches));
Enter fullscreen mode Exit fullscreen mode

8.检查网络状态和变化

网络信息 API提供有关用户网络连接的信息。利用这些信息可以有条件地加载图像、视频、字体和其他资源。


navigator.connection.addEventListener('change', e => {
  console.log(navigator.connection.effectiveType, navigator.connection.downlink);
});
Enter fullscreen mode Exit fullscreen mode

除了上面提到的属性effectiveType和之外它还downlink提供downlinkMax,,,rttsaveDatatype


9.检查设备电池状态

这可以通过使用电池状态 API 来实现。


navigator.getBattery().then(battery => {
  console.log(
    battery.level * 100 + '%',
    battery.charging,
    battery.chargingTime,
    battery.dischargingTime
    ); 
});

Enter fullscreen mode Exit fullscreen mode

10. 检查你的 Web 应用何时使用了弃用的 API 或触发了浏览器干预

报告API使之成为可能

const observer = new ReportingObserver((reports, observer) => {
  reports.map(report => {
    console.log(report);
    // ..... send report to analytics etc..
  });
}, {buffered: true});

observer.observe();
Enter fullscreen mode Exit fullscreen mode

我相信,目前,该功能ReportingObserver仅在最新的 Chrome 中推出。


11. 检查你的 Web 应用的性能

PerformanceObserver接口用于观察性能测量事件,并在浏览器性能时间线记录新的性能条目时收到通知。

const observer = new window.PerformanceObserver(list => {
    list.getEntries().forEach(({name, startTime}) => {
        console.log({name, startTime});
    });
});
observer.observe({
    entryTypes: [{'paint', 'resource', 'mark', 'measure'}]
});
Enter fullscreen mode Exit fullscreen mode

Web 上竟然有如此众多优秀的 API 供我们使用,真是令人惊叹。利用这些 API,我们可以创建性能更佳、用户体验更佳的 Web 应用。

注意:在使用现代 API 之前,请务必检查浏览器支持情况。


有用的资源

  1. 观看 2018 年最佳网络功能的对决
  2. 使用 Intersection Observer 延迟加载图像以提高性能
  3. 使用网络信息 API 来改善响应式网站
  4. ResizeObserver 示例
  5. PerformanceObserver 和 Paint Timing API
鏂囩珷鏉ユ簮锛�https://dev.to/ananyaneogi/observing-your-web-app---a-quick-round-up-3ji0
PREV
React Context 和 Hooks:一个了解其工作原理的开源项目
NEXT
可访问且富有表现力的 HTML 语义