美文网首页让前端飞
【JS】监控网页帧时间

【JS】监控网页帧时间

作者: 来一斤BUG | 来源:发表于2024-02-21 10:17 被阅读0次

代码

// 性能警报时间,单位:毫秒,超过这个时间会打印警报,可自定义
const ALARM_TIME = 200;
// requestAnimationFrame的id
let monitorFrameTimeId = null;

/**
 * 开始监控帧耗时
 */
function startMonitorFrameTime() {
    stopMonitorFrameTime();

    // 由于启动监控时当前帧可能已经过了一段时间了,所以等到下一帧开始再启动性能监控
    // 如果优先启动监控,也可以去掉外面这一层requestAnimationFrame
    monitorFrameTimeId = requestAnimationFrame(() => {
        console.log("启动性能监控");
        // performance.now()拿到的时间比Date精度更高
        let lastTime = performance.now();
        monitorFrameTimeId = requestAnimationFrame(callback);

        function callback() {
            const now = performance.now();
            const delta = now - lastTime;
            lastTime = now;
            if (delta >= ALARM_TIME) {
                console.warn(`性能警报,当前帧耗时:${delta.toFixed(2)}ms`);
            }
            monitorFrameTimeId = requestAnimationFrame(callback);
        }
    });
}

/**
 * 停止监控当前帧耗时
 */
function stopMonitorFrameTime() {
    if (monitorFrameTimeId != null) {
        console.log("停止性能监控");
        cancelAnimationFrame(monitorFrameTimeId);
        monitorFrameTimeId = null;
    }
}

// 监听切换到后台
// 由于切换到后台会暂停网页绘制,导致两次requestAnimationFrame回调的时间被拉长,所以切后台的时候停止箭头
document.addEventListener("visibilitychange", function () {
    // 判断当前页面是否隐藏
    // this指向了document,this.hidden等价于document.hidden,如果用了箭头函数这里就不能用this了
    if (this.hidden) {
        console.log("切换到后台");
        stopMonitorFrameTime();
    } else {
        console.log("切换到前台");
        startMonitorFrameTime();
    }
});

startMonitorFrameTime();

预览

性能警报
前后台切换

日志样式也可以根据自己的喜好修改一下:

const titleStyle = [
    `background: #d35400`,
    "padding: 0.2em 0.2em 0.2em 0.2em",
    `color: #ffffff`,
    "font-size: 1em",
    "border-radius: 0.2em 0 0 0.2em",
    "font-family: SimHei",
].join("; ");
const contentStyle = [
    `background: #e67e22`,
    "padding: 0.2em 0.2em 0.2em 0.2em",
    `color: #ffffff`,
    "font-size: 1em",
    "border-radius: 0 0.2em 0.2em 0",
    "font-family: SimHei",
].join("; ");
console.log("%c%s%c%s", titleStyle, "性能管理器", contentStyle, `性能警报,当前帧耗时:${delta.toFixed(2)}ms`);
性能警报
前后台切换

相关文章

  • 前端工程化——监控

    监控有四个点: 网页崩溃(crashes) JavaScript 执行出错 网页卡顿 首屏渲染 网页崩溃的监控 使...

  • Android卡顿监控

    实现思路 卡顿监控主要监控:慢方法的监控、ANR的监控、掉帧的监控。其实现方案主要有三种: Looper的Prin...

  • js基础

    1.网页 网页=html+css+js html:网页元素内容 css:控制网页样式 js:操作网页内容,实现功能...

  • 自动化SEO,页面监控应用场景

    网页监控是指监控网页标题、内容、链接、页面摘要和网站访问状态的变更,当以上内容信息发生了变更,意味着监控对象做出了...

  • 页面监控之监控页面报错

    监控js报错 错误示例 监控js报错的同时监控资源加载失败,即加上捕获选项即可 错误示例 监听ajax请求 监听未...

  • framemonitor原理分析

    最近写了一个开源项目叫framemonitor, 相当于SDK版的Systrace,可以监控App的帧绘制时间,接...

  • 利用网页监控优势,做百度自动推送

    网页监控是什么?WEB视界网页监控是指利用自动化服务来扫描监控网站页面,当发现网站页面有变化时,就立即作出响应的服...

  • Android framework学习之Android11.0

    掉帧监控,函数插桩,慢函数检测,ANR监控,启动监控……这些让Android开发者们头皮发麻的内容,如今可都成为了...

  • 前端监控体系建设

    前端监控体系主要分为错误监控、性能监控、业务监控及安全监控三个方面。 一、错误监控 (一)监控范围 js语法错误、...

  • Js 延迟加载的办法

    使用setTimeout延迟方法的加载时间 (延迟加载js代码,给网页加载留出更多时间) 让js最后加载例如引入外...

网友评论

    本文标题:【JS】监控网页帧时间

    本文链接:https://www.haomeiwen.com/subject/ivpiadtx.html