From 3d7b0045b7723315e9d4985784f9e81748731a03 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Wed, 17 Dec 2025 16:34:44 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix(NotificationContext):=20Mock=20?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E8=B7=B3=E8=BF=87=20Socket=20?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 REACT_APP_ENABLE_MOCK 环境变量检查 - Mock 模式下直接 return,避免连接生产服务器失败的错误 - 消除开发环境控制台的 WebSocket 连接错误 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/contexts/NotificationContext.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/contexts/NotificationContext.js b/src/contexts/NotificationContext.js index 0ab4a93b..757e5d8f 100644 --- a/src/contexts/NotificationContext.js +++ b/src/contexts/NotificationContext.js @@ -661,6 +661,12 @@ export const NotificationProvider = ({ children }) => { // ========== 连接到 Socket 服务(⚡ 异步初始化,不阻塞首屏) ========== useEffect(() => { + // ⚡ Mock 模式下跳过 Socket 连接(避免连接生产服务器失败的错误) + if (process.env.REACT_APP_ENABLE_MOCK === 'true') { + logger.debug('NotificationContext', 'Mock 模式,跳过 Socket 连接'); + return; + } + // ⚡ 防止 React Strict Mode 导致的重复初始化 if (socketInitialized) { logger.debug('NotificationContext', 'Socket 已初始化,跳过重复执行(Strict Mode 保护)'); From 9bb9eab92234898c6863bc16f6e0466fb75f29b8 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Wed, 17 Dec 2025 16:41:45 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix(MSW):=20Bytedesk=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=20mock=20=E6=95=B0=E6=8D=AE=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 未读消息数量返回 { count: 0 } - 其他 API 返回通用成功响应 - 解决 mock 模式下 404 错误 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/mocks/handlers/bytedesk.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/mocks/handlers/bytedesk.js b/src/mocks/handlers/bytedesk.js index e716a605..1ac3dc1c 100644 --- a/src/mocks/handlers/bytedesk.js +++ b/src/mocks/handlers/bytedesk.js @@ -1,16 +1,28 @@ // src/mocks/handlers/bytedesk.js /** * Bytedesk 客服 Widget MSW Handler - * 使用 passthrough 让请求通过到真实服务器,消除 MSW 警告 + * Mock 模式下返回模拟数据 */ -import { http, passthrough } from 'msw'; +import { http, HttpResponse, passthrough } from 'msw'; export const bytedeskHandlers = [ - // Bytedesk API 请求 - 直接 passthrough - // 匹配 /bytedesk/* 路径(通过代理访问后端) + // 未读消息数量 + http.get('/bytedesk/visitor/api/v1/message/unread/count', () => { + return HttpResponse.json({ + code: 200, + message: 'success', + data: { count: 0 }, + }); + }), + + // 其他 Bytedesk API - 返回通用成功响应 http.all('/bytedesk/*', () => { - return passthrough(); + return HttpResponse.json({ + code: 200, + message: 'success', + data: null, + }); }), // Bytedesk 外部 CDN/服务请求 From e02cbcd9b766b678391895dcec24a6ddd486ebc5 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Wed, 17 Dec 2025 18:29:35 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(=E6=80=A7=E8=83=BD=E7=9B=91=E6=8E=A7):?= =?UTF-8?q?=20=E8=A1=A5=E5=85=A8=20T0=20=E6=A0=87=E8=AE=B0=20+=20PostHog?= =?UTF-8?q?=20=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - index.js: 添加 html-loaded 标记(T0 监控点) - performanceMonitor.ts: 调用 reportPerformanceMetrics 上报到 PostHog - 现在完整监控 T0-T5 全部阶段并上报性能指标 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/index.js | 11 +++++++++++ src/utils/performanceMonitor.ts | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/src/index.js b/src/index.js index 6324f2db..eff6b9e9 100755 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,17 @@ import { BrowserRouter as Router } from 'react-router-dom'; // ⚡ 性能监控:在应用启动时尽早标记 import { performanceMonitor } from './utils/performanceMonitor'; + +// T0: HTML 加载完成时间点 +if (document.readyState === 'complete') { + performanceMonitor.mark('html-loaded'); +} else { + window.addEventListener('load', () => { + performanceMonitor.mark('html-loaded'); + }); +} + +// T1: React 开始初始化 performanceMonitor.mark('app-start'); // ⚡ 已删除 brainwave.css(项目未安装 Tailwind CSS,该文件无效) diff --git a/src/utils/performanceMonitor.ts b/src/utils/performanceMonitor.ts index 2c4b115f..961e0cc4 100644 --- a/src/utils/performanceMonitor.ts +++ b/src/utils/performanceMonitor.ts @@ -2,6 +2,7 @@ // 性能监控工具 - 统计白屏时间和性能指标 import { logger } from './logger'; +import { reportPerformanceMetrics } from '../lib/posthog'; /** * 性能指标接口 @@ -208,6 +209,9 @@ class PerformanceMonitor { // 性能分析建议 this.analyzePerformance(); + // 上报性能指标到 PostHog + reportPerformanceMetrics(this.metrics); + return this.metrics; }