# @dmhsq_monitor/web

Web监控库，用于捕获浏览器环境下的各类性能指标和错误信息。

## 特性

- 性能监控：页面加载时间、首次渲染、资源加载等
- 错误监控：JS异常、Promise拒绝、资源加载失败等
- 请求监控：捕获XHR和Fetch请求的时间和状态
- 用户行为：点击、滚动等用户交互行为收集
- 页面可见性：统计页面可见性变化（可选）
- 浏览器信息：自动收集浏览器类型、版本、平台等信息
- 数据处理：支持数据去重、错误聚合等高级功能

## 安装

```bash
npm install @dmhsq_monitor/web
```

## 使用方法

### 基础使用

```javascript
import { WebMonitor } from '@dmhsq_monitor/web';

// 创建并初始化监控实例
const monitor = new WebMonitor({
  appId: 'your-app-id',
  appToken: 'your-app-token',  // 新增：应用Token
  serverUrl: 'https://your-monitor-server.com',
  enablePerformance: true,
  enableError: true,
  enablePageVisibility: true  // 新增：启用页面可见性统计
});

// 启动监控
monitor.start();

// 手动上报事件
monitor.report({
  type: 'custom',
  name: 'userAction',
  data: { action: 'buttonClick', page: 'home' }
});

// 停止监控
// monitor.stop();
```

### 配置选项

```javascript
const monitor = new WebMonitor({
  // 基础配置
  appId: 'your-app-id',
  appToken: 'your-app-token',  // 新增：应用Token
  serverUrl: 'https://your-monitor-server.com',
  debug: true,  // 启用调试模式
  
  // 功能开关
  enablePerformance: true,  // 启用性能监控
  enableError: true,  // 启用错误监控
  enableRequestMonitoring: true,  // 监控Ajax/Fetch请求
  enableBehaviorMonitoring: true,  // 监控用户行为
  enablePageVisibility: true,  // 新增：启用页面可见性统计
  
  // 采样率配置
  errorSamplingRate: 1.0,  // 错误信息采样率
  behaviorSamplingRate: 0.5,  // 行为数据采样率
  
  // 过滤配置
  ignoreErrors: [/Script error/i, 'Network error'],  // 忽略特定错误
  ignoreUrls: [/example\.com/i],  // 忽略特定URL的错误
  
  // 数据处理配置
  enableDeduplicate: true,  // 启用数据去重
  collectUserIp: true,  // 收集用户IP
  collectGeoInfo: false,  // 收集地理位置信息
  mergeSimilarErrors: true,  // 合并相似错误
  
  // 自定义上报前处理
  onReport: (events, context) => {
    // 对事件进行自定义处理
    const filteredEvents = events.filter(event => {
      // 根据需要过滤事件
      return true;
    });
    return filteredEvents;
  }
});
```

## 功能模块

### 性能监控

```javascript
const monitor = new WebMonitor({
  appId: 'your-app-id',
  appToken: 'your-app-token',  // 新增：应用Token
  serverUrl: 'https://your-monitor-server.com',
  enablePerformance: true
});

monitor.start();
```

收集的性能指标包括：

- 页面加载时间
- DOM加载时间
- 重定向时间
- DNS解析时间
- TCP连接时间
- 首次字节时间(TTFB)
- 内容下载时间
- 首次渲染时间(FP)
- 首次内容渲染时间(FCP)

### 错误监控

```javascript
const monitor = new WebMonitor({
  appId: 'your-app-id',
  appToken: 'your-app-token',  // 新增：应用Token
  serverUrl: 'https://your-monitor-server.com',
  enableError: true,
  // 错误处理增强
  mergeSimilarErrors: true  // 合并相似错误
});

monitor.start();
```

捕获的错误类型：

- JavaScript错误
- Promise拒绝错误
- 资源加载错误
- AJAX/Fetch请求错误
- 控制台错误

### 页面可见性统计

```javascript
const monitor = new WebMonitor({
  appId: 'your-app-id',
  appToken: 'your-app-token',  // 新增：应用Token
  serverUrl: 'https://your-monitor-server.com',
  enablePageVisibility: true  // 启用页面可见性统计
});

monitor.start();
```

页面可见性统计会记录：
- 页面可见性状态变化（visible/hidden）
- 变化发生的时间戳
- 用户切换标签页或最小化浏览器的行为

### 数据处理能力

Web库现在集成了数据处理器功能，提供更强大的数据处理能力：

- **数据去重**：自动过滤短时间内的重复事件，减少数据传输量
- **错误聚合**：智能合并相似错误，提高分析效率
- **浏览器信息**：自动收集浏览器类型、版本、平台和设备类型
- **数据增强**：自动添加浏览器、设备等环境信息

```javascript
// 获取处理器实例进行高级配置
const processor = monitor.getProcessor();
processor.updateConfig({
  deduplicateWindow: 10 * 60 * 1000,  // 10分钟去重窗口
  customProcessors: [
    // 添加自定义处理逻辑
    (event, context) => {
      // 自定义数据处理
      return event;
    }
  ]
});
```

## 版本说明

### 1.0.3
- 移除 IP 统计功能
- 增加浏览器信息统计
- 优化设备信息收集

### 1.0.2
- 添加数据处理功能，集成processor包
- 支持数据去重和聚合
- 增加地理位置信息收集功能

### 1.0.1
- 完善性能监控模块
- 改进错误监控采样率控制
- 修复错误处理异常问题
- 优化性能和内存占用

### 1.0.0
- 初始版本发布
- 实现基础监控功能
- 支持错误和性能监控

## 配置选项

| 选项 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| appId | string | - | 应用ID（必填） |
| appToken | string | - | 应用Token（可选） |
| serverUrl | string | - | 服务端数据接收地址（必填） |
| debug | boolean | false | 是否开启调试模式 |
| enableError | boolean | true | 是否启用错误监控 |
| enablePerformance | boolean | true | 是否启用性能监控 |
| enableAutoErrorCapture | boolean | true | 是否自动捕获错误 |
| enableConsoleMonitoring | boolean | false | 是否监控控制台错误 |
| errorSamplingRate | number | 1.0 | 错误采样率 (0-1) |
| ignoreErrors | (string\|RegExp)[] | [] | 忽略的错误信息 |
| ignoreUrls | RegExp[] | [] | 忽略的URL |
| reportInterval | number | 5000 | 上报间隔时间(ms) |
| maxCache | number | 100 | 最大缓存条数 |
| enablePageVisibility | boolean | false | 是否启用页面可见性统计 |
| collectGeoInfo | boolean | false | 是否收集地理位置信息 |
| mergeSimilarErrors | boolean | true | 是否合并相似错误 |

## 注意事项

- 建议在页面加载尽可能早的时机初始化监控，以便捕获更多错误和性能数据
- 生产环境建议设置合适的采样率，避免过多数据上报
- 配置合适的忽略规则，过滤不需要关注的错误 