跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

前端监控实战:错误追踪与性能分析指南

综述由AI生成介绍前端监控的重要性及实施方案。通过对比无监控的代码风险,阐述了使用 Sentry 进行错误捕获、Web Vitals 进行性能指标监控、Google Analytics 跟踪用户行为以及自定义日志系统的配置方法。旨在帮助开发者建立全方位的前端可观测性,及时发现并解决线上问题。

黑客发布于 2026/4/6更新于 2026/5/2028 浏览

前端监控概述

引言

这应用运行得跟幽灵似的,出了问题都不知道。

前端监控对于保障应用稳定性至关重要。等待用户反馈问题如同在没有监控的仓库里存放贵重物品——虽然可以存放,但丢失时却无从知晓。

为什么你需要前端监控

近期有项目因页面频繁崩溃导致用户体验受损,而开发团队无法定位问题根源。缺乏监控机制会导致故障排查陷入被动。

问题示例
// 反面教材:没有监控
function App() {
  const [data, setData] = React.useState([]);
  useEffect(() => {
    async function fetchData() {
      try {
        const response = await fetch('/api/data');
        const result = await response.json();
        setData(result);
      } catch (error) {
        console.error('Error fetching data:', error);
      }
    }
    fetchData();
  }, []);
  return (
    <div>
      {data.map(item => (
        <div key={item.id}>{item.name}</div>
      ))}
    </div>
  );
}
export default App;

说明:仅依赖 console.error 无法有效上报线上错误,难以追踪生产环境异常。

解决方案

1. Sentry 监控
// 正确姿势:Sentry 监控
// 1. 安装依赖
// npm install @sentry/react @sentry/tracing

// 2. 初始化
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import * as Sentry from '@sentry/react';
import { BrowserTracing } from '@sentry/tracing';

Sentry.init({
  dsn: 'YOUR_SENTRY_DSN',
  integrations: [new BrowserTracing()],
  tracesSampleRate: 1.0,
});

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

// 3. 错误边界
// src/ErrorBoundary.jsx
import React from 'react';
import * as Sentry from '@sentry/react';

class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }
  static getDerivedStateFromError(error) {
    return { hasError: true };
  }
  componentDidCatch(error, errorInfo) {
    Sentry.captureException(error, { extra: errorInfo });
  }
  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }
    return this.props.children;
  }
}
export default ErrorBoundary;

// 4. 使用错误边界
// src/App.jsx
import React from 'react';
import ErrorBoundary from './ErrorBoundary';

function App() {
  return (
    <ErrorBoundary>
      <div>{/* 应用内容 */}</div>
    </ErrorBoundary>
  );
}
export default App;
2. 性能监控
// 正确姿势:性能监控
// 1. 使用 Lighthouse
// npm install -g lighthouse
// lighthouse https://example.com

// 2. 使用 Web Vitals
import { getCLS, getFID, getFCP, getLCP, getTTFB } from 'web-vitals';

function sendToAnalytics({ name, delta, id }) {
  console.log(name, delta, id); // 发送到分析服务
  // navigator.sendBeacon('/analytics', JSON.stringify({ name, delta, id }));
}

getCLS(sendToAnalytics);
getFID(sendToAnalytics);
getFCP(sendToAnalytics);
getLCP(sendToAnalytics);
getTTFB(sendToAnalytics);
3. 用户行为监控
// 正确姿势:用户行为监控
// 1. 使用 Google Analytics
// index.html
// <script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
// <script>
//   window.dataLayer = window.dataLayer || [];
//   function gtag(){dataLayer.push(arguments);}
//   gtag('js', new Date());
//   gtag('config', 'GA_MEASUREMENT_ID');
// </script>

// 2. 自定义事件
function trackEvent(eventName, eventParams) {
  gtag('event', eventName, eventParams);
}
// 使用 <button onClick={() => trackEvent('button_click', { button_name: 'submit' })}> 提交 </button>
4. 日志监控
// 正确姿势:日志监控
// 1. 配置日志级别
const LOG_LEVELS = {
  ERROR: 0,
  WARN: 1,
  INFO: 2,
  DEBUG: 3,
};
let currentLevel = LOG_LEVELS.INFO;

function log(level, message, data) {
  if (level <= currentLevel) {
    const timestamp = new Date().toISOString();
    const logMessage = `[${timestamp}] [${Object.keys(LOG_LEVELS)[level]}] ${message}`;
    switch (level) {
      case LOG_LEVELS.ERROR:
        console.error(logMessage, data); // 发送到监控服务
        break;
      case LOG_LEVELS.WARN:
        console.warn(logMessage, data);
        break;
      case LOG_LEVELS.INFO:
        console.info(logMessage, data);
        break;
      case LOG_LEVELS.DEBUG:
        console.debug(logMessage, data);
        break;
    }
  }
}

// 使用 log(LOG_LEVELS.ERROR, 'Failed to fetch data', { error: 'Network error' });
log(LOG_LEVELS.INFO, 'User logged in', { userId: 123 });

总结:完善的监控体系能让前端应用在阳光下运行,确保任何问题都能被及时捕获和处理。

目录

  1. 前端监控概述
  2. 引言
  3. 为什么你需要前端监控
  4. 问题示例
  5. 解决方案
  6. 1. Sentry 监控
  7. 2. 性能监控
  8. 3. 用户行为监控
  9. 4. 日志监控
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 核心架构解析:本地优先与确定性执行
  • 双指针算法实战:移动零与复写零解析
  • Java 泛型与通配符深度解析
  • 基于 KaiwuDB 与 CodeArts 智能体的智能家居本地化数据处理方案
  • 数据结构:带头双向循环链表详解与实现
  • GitHub 浏览器显示“连接不是专用连接”错误解决方案
  • AIGC 22 个基本概念详解:从原理到应用
  • Spring 依赖注入的三种实现方式
  • 递归算法实战:汉诺塔与合并有序链表详解
  • 网络安全入门教程:从零开始到精通的系统学习路线
  • 天然气管道内检测机器人检测节结构设计与仿真分析
  • 解决 VsCode 远程连接服务器后 GitHub Copilot 无法使用问题
  • 2026 年主流免费 AI 写作工具实测与避坑指南
  • Java 项目 Skill 体系设计方案与实战
  • Midjourney 结合 Photoshop 实现 AI 电商场景合成工作流
  • Python 基础语法入门:常量、变量与运算符详解
  • Streamlit WebUI 实战:适配 Nanbeige、Qwen 与 Llama 大模型的方法
  • Java SE 文件 IO 基础:File 类与文件系统操作
  • Vheer:免费免登录的 AI 绘画与视频生成工具
  • Java 大数据在智能教育在线学习平台用户活跃度提升与留存策略研究

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online