前端技术专家面试-浏览器接口

78 阅读3分钟

核心内容:一些先进的浏览器接口

=========

更新

  • V1.1 添加事件冒泡

=========

  1. IntersectionObserver API
    • 用于异步检测目标元素与视口或特定元素的交叉状态
    • 常用于实现懒加载、无限滚动等功能
  2. ResizeObserver API
    • 用于监听元素大小的变化
    • 对于响应式设计和布局很有用
  3. MutationObserver API
    • 用于监视 DOM 树的变化
    • 可以检测元素属性、子节点等的变化
    • 应用
      • 动态内容加载的检测
      • 自定义元素的行为监控
      • 第三方脚本修改 DOM 的跟踪
      • 无限滚动的实现
      • 表单验证的动态更新
  4. Performance API
    • 提供了访问当前页面性能相关信息的方法
    • 包括 performance.now()、performance.mark() 等方法
  5. PerformanceObserver
    const observer = new PerformanceObserver((list) => {
        list.getEntries().forEach((entry) => {
            if (entry.entryType === 'resource') { 
                log('Resource loaded: ' + entry.name + ' (Duration: ' + entry.duration.toFixed(2) + 'ms)'); 
            } 
        }); 
    }); 
    observer.observe({entryTypes: ['resource']});
    
  6. requestAnimationFrame
    • 浏览器准备刷新之前调用
  7. requestIdleCallback
    • 浏览器空闲时调用
    • 使用方法:将任务切成小块,根据空闲时间的多少执行。
  8. Web Animations API
    • 提供了以编程方式创建和控制动画的能力
    • 可以替代或补充 CSS 动画
    // 获取要进行动画的元素
    const element = document.querySelector('#animatedElement');
    
    // 定义动画关键帧
    const keyframes = [
      { transform: 'translateX(0px)' },
      { transform: 'translateX(300px)' }
    ];
    
    // 定义动画选项
    const options = {
      duration: 1000, // 动画持续时间为1秒
      iterations: Infinity, // 无限循环
      direction: 'alternate', // 交替方向
      easing: 'ease-in-out' // 缓动函数
    };
    
    // 创建并播放动画
    const animation = element.animate(keyframes, options);
    
  9. fetch:用于发起网络请求的API
    • Promise-based:基于Promise设计,支持链式调用和异步操作,使代码更加简洁和易读。
    • 灵活性:可以轻松配置请求头、请求方法、请求体等。
    • 支持流式响应:可以处理大型响应数据,如文件下载。
    • 跨域请求:原生支持跨域资源共享(CORS)。
    • 缓存控制:提供了细粒度的缓存控制选项。
    • 请求中断:支持使用AbortController中断进行中的请求。
    • 简单易用:相比XMLHttpRequest,API设计更加直观和易用。
    • 与其他现代Web API良好集成:如Service Workers等。
  10. Page Visibility API
    • 允许你检测页面是否对用户可见
    • 用于优化后台标签页的资源使用
  11. Pointer Events API
    • 提供了一种处理各种输入设备(如鼠标、触摸屏、笔)的统一方式
  12. Web Workers API
    • 允许脚本在后台线程中运行,不影响用户界面性能
  13. Service Workers API
    • 用于实现离线 Web 应用、后台同步等功能
  14. 事件冒泡机制
    • 浏览器中的事件冒泡机制(Event Bubbling)是指当一个事件触发时,事件会从目标元素开始,沿着DOM树向上逐级冒泡到根节点(通常是document),触发沿途的父元素上绑定的相同事件。冒泡机制的特性对事件处理和控制提供了灵活性,但也需要优化,以确保页面性能。
    • 在浏览器中,事件的传播分为三个阶段:
      1. 捕获阶段(Capturing Phase) :事件从根节点开始向目标元素传播,但此阶段默认不会触发事件处理函数。
      2. 目标阶段(Target Phase) :事件到达目标元素,触发目标元素上绑定的事件处理函数。
      3. 冒泡阶段(Bubbling Phase) :事件从目标元素沿着DOM树向上冒泡到根节点,触发沿途的父元素上绑定的相同事件处理函数。
    • 可以使用 event.stopPropagation() 阻止事件在冒泡阶段进一步传播,以避免一些不必要的触发。
    • 事件性能优化
      • 事件委托(Event Delegation)
      • 节流
      • 移除不必要的事件监听
      • 避免阻塞主线程
        • 尽量避免在事件处理函数中进行耗时操作。可以将复杂逻辑放requestIdleCallback或setTimeout中,以防止阻塞主线程。
      • 使用passive优化滚动性能
        • 对于scroll等滚动事件,使用 { passive: true } 提升性能,让浏览器可以优先执行滚动渲染。
        window.addEventListener('scroll', handleScroll, { passive: true });