# auto-refresh-jsheap
**Repository Path**: sdh-2017/auto-refresh-jsheap
## Basic Information
- **Project Name**: auto-refresh-jsheap
- **Description**: 自动刷新js堆栈程序auto-refresh-heap,当js堆栈快达到堆栈上限时自动刷新浏览器
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-10-21
- **Last Updated**: 2025-10-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 自动刷新机制 - 内存泄露应对方案
## 概述
这是一个用于应对页面内存泄露问题的自动刷新机制。当页面内存使用接近限制时,会自动刷新页面以防止内存无限增长。
## 功能特性
- 🔍 **实时内存监控**: 监控页面内存使用情况
- 🔄 **自动刷新**: 达到阈值时自动刷新页面
- 👤 **用户确认**: 刷新前询问用户确认,避免意外刷新
- ⚙️ **灵活配置**: 支持自定义阈值和策略
- 📊 **详细日志**: 提供详细的内存使用日志
- 🎯 **用户友好**: 提供系统原生对话框和全局API
## 使用方法
### 基本使用
```html
内存监控页面
```
### 高级配置
```javascript
// 创建自定义配置的实例
const customManager = new AutoRefreshManager({
memoryThreshold: 0.7, // 内存使用率达到70%时刷新
checkInterval: 3000, // 每3秒检查一次
maxMemoryMB: 150, // 最大内存限制150MB
askUserConfirmation: true, // 询问用户确认
enableLogging: true, // 启用日志
beforeRefresh: function() {
// 刷新前的清理工作
console.log('执行清理工作...');
// 保存用户数据等
}
});
```
### 全局API
```javascript
// 手动刷新页面
AutoRefresh.refresh();
// 获取当前状态
const status = AutoRefresh.getStatus();
console.log('监控状态:', status);
// 更新配置
AutoRefresh.updateConfig({
memoryThreshold: 0.9,
checkInterval: 10000
});
// 启用/禁用监控
AutoRefresh.enable();
AutoRefresh.disable();
// 停止/开始监控
AutoRefresh.stop();
AutoRefresh.start();
```
## 配置选项
| 选项 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `memoryThreshold` | number | 0.8 | 内存使用率阈值(0-1) |
| `checkInterval` | number | 5000 | 检查间隔(毫秒) |
| `enabled` | boolean | true | 是否启用自动刷新 |
| `askUserConfirmation` | boolean | true | 是否询问用户确认刷新 |
| `enableLogging` | boolean | true | 是否启用日志 |
| `maxMemoryMB` | number | 100 | 最大内存限制(MB) |
| `beforeRefresh` | function | null | 刷新前清理函数 |
## 用户确认机制
### 确认对话框功能
当内存使用率过高时,系统会使用浏览器原生的确认对话框:
- **系统原生**: 使用浏览器自带的 `confirm()` 对话框
- **简洁明了**: 清楚说明内存使用率过高的情况
- **重要提示**: 提醒用户刷新将清除未保存数据
- **用户选择**: 提供"确定"和"取消"两个选项
- **无需样式**: 自动适配系统主题和语言
### 用户操作流程
1. 检测到内存使用率过高
2. 弹出系统确认对话框
3. 用户选择操作:
- 点击"确定" → 立即刷新页面
- 点击"取消" → 关闭对话框,稍后重新检查
### 配置选项
```javascript
// 启用用户确认(默认)
askUserConfirmation: true
// 禁用用户确认,直接刷新
askUserConfirmation: false
```
## 内存监控机制
### 精确监控(Chrome等现代浏览器)
- 使用 `performance.memory` API
- 提供精确的内存使用数据
- 包括已使用、总计、限制等信息
### 估算监控(其他浏览器)
- 基于页面元素数量估算
- 使用启发式算法计算内存使用
- 提供相对准确的内存使用比例
## 使用场景
1. **大数据可视化页面**: 处理大量图表和数据时
2. **长时间运行的SPA**: 单页应用长时间运行后
3. **内存泄露暂时无法修复**: 作为临时解决方案
4. **监控页面**: 需要持续监控的页面
## 注意事项
1. **浏览器兼容性**: 精确监控需要支持 `performance.memory` 的浏览器
2. **用户体验**: 自动刷新会中断用户操作,建议设置合理的阈值
3. **数据保存**: 刷新前记得保存用户数据
4. **性能影响**: 监控本身有轻微性能开销
## 示例页面
### 基础示例
查看 `a.html` 文件了解完整的使用示例,该页面包含:
- 内存泄露测试代码
- 自动刷新机制集成
- 实时内存监控显示
### 完整测试页面
查看 `test-auto-refresh.html` 文件了解完整的测试和演示页面,该页面包含:
- 实时状态监控面板
- 内存使用情况显示
- 控制面板(启动/停止内存泄露测试)
- 控制台日志显示
- 各种配置选项测试
### 用户确认功能演示
查看 `demo-confirmation.html` 文件了解用户确认功能的演示页面,该页面包含:
- 用户确认对话框界面展示
- 模拟内存警告功能
- 确认功能开关控制
- 实时状态显示
## 调试和监控
启用日志后,可以在控制台查看详细的内存使用情况:
```
[AutoRefresh 14:30:25] 自动刷新管理器已启动 {memoryThreshold: 0.8, checkInterval: 5000, maxMemoryMB: 100}
[AutoRefresh 14:30:30] 内存使用情况 {usedMB: 45.2, totalMB: 67.8, limitMB: 2048, usageRatio: 0.022}
[AutoRefresh 14:30:35] 内存使用情况 {usedMB: 89.4, totalMB: 134.2, limitMB: 2048, usageRatio: 0.044}
```
## 故障排除
### 常见问题
1. **监控不工作**: 检查浏览器是否支持 `performance.memory`
2. **频繁刷新**: 降低 `memoryThreshold` 值
3. **警告不显示**: 检查 `showWarning` 配置
4. **日志不输出**: 检查 `enableLogging` 配置
### 调试模式
```javascript
// 启用详细日志
AutoRefresh.updateConfig({ enableLogging: true });
// 查看当前状态
console.log(AutoRefresh.getStatus());
// 手动触发刷新测试
AutoRefresh.refresh();
```