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 保护)'); 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/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/服务请求 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; }