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

前端监控最佳实践:错误追踪与性能优化

综述由AI生成探讨了前端监控的必要性,指出缺乏监控如同在黑暗中运行应用。通过对比未监控的代码示例,引入了 Sentry 进行错误追踪,包括初始化配置与 Error Boundary 组件的使用。此外,还涵盖了利用 Lighthouse 和 Web Vitals 进行性能监控,使用 Google Analytics 跟踪用户行为,以及配置自定义日志级别的方法。这些措施有助于构建可视化的监控体系,确保应用稳定运行并及时发现问题。

暖阳发布于 2026/4/6更新于 2026/5/2228 浏览

前端监控最佳实践:错误追踪与性能优化

引言

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

各位前端同行,咱们今天聊聊前端监控。别告诉我你还在等用户反馈问题,那感觉就像在没有监控的仓库里放贵重物品——能放,但丢了都不知道。

为什么你需要前端监控

最近看到一个项目,用户反映页面经常崩溃,但开发团队根本不知道问题出在哪里。我就想问:你是在做应用还是在做猜谜游戏?

问题示例
// 反面教材:没有监控
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;

解决方案

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. 日志监控
  10. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Ollama 快速部署大模型:Windows/Linux/Mac 通用教程
  • 基于 JavaFX 与腾讯混元大模型的智能桌面应用开发指南
  • LLM 大模型技术实战:Prompt 提示工程策略与技巧总结
  • MacOS 下使用 Docker 部署 OpenClaw 并对接飞书机器人
  • FPGA车牌识别与Modelsim仿真:基于正点原子达芬奇Artix - 7的探索
  • Flutter for OpenHarmony 动态换肤:Material Color Utilities 算法实战
  • 前端 AI 工具实战:Claude Code、OpenCode 与 A2UI 协议解析
  • Llama-2-7B 在昇腾 NPU 上的性能测评与部署指南
  • IntelliJ IDEA 免费 AI 代码提示插件推荐
  • Go 语言开发 AI 智能体实战:字节开源 Eino 框架详解与教程
  • 在线学生成绩综合统计分析系统的设计与实现
  • 飞算 JavaAI:本地化智能代码生成与效能提升实践
  • 使用 Ollama、Open WebUI 和 Docker 本地部署可视化 AI 大语言模型
  • OpenClaw 本地 AI 智能体入门与实战指南
  • 昇腾 NPU 部署 Llama 2 模型的性能测试与优化实践
  • Awesome GitHub Copilot 定制化功能与资源汇总
  • Ubuntu 22.04 LTS 安装向日葵远程桌面黑屏问题修复
  • Elasticsearch 核心概念与 Java 客户端实战
  • OpenClaw 手机端部署与本地 AI 自动化实战
  • Python 虚拟环境底层原理与 Pycharm Anaconda 实战指南

相关免费在线工具

  • 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