410 lines
9.1 KiB
Markdown
410 lines
9.1 KiB
Markdown
|
|
# 🎨 VPS Price - 增强对比功能说明
|
|||
|
|
|
|||
|
|
## ✨ v3.1 Enhanced Comparison
|
|||
|
|
|
|||
|
|
### 实现时间
|
|||
|
|
**2026-02-09**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 核心优化
|
|||
|
|
|
|||
|
|
### 问题
|
|||
|
|
原版对比功能虽然能显示多个方案,但**差异不够直观**:
|
|||
|
|
- ❌ 需要用户自己心算差异
|
|||
|
|
- ❌ 无法快速识别最优方案
|
|||
|
|
- ❌ 缺少视觉化对比
|
|||
|
|
|
|||
|
|
### 解决方案
|
|||
|
|
**一眼看出差异**的增强对比系统:
|
|||
|
|
- ✅ 差异百分比自动计算
|
|||
|
|
- ✅ 进度条可视化对比
|
|||
|
|
- ✅ 颜色编码快速识别
|
|||
|
|
- ✅ 横向表格直接对比
|
|||
|
|
- ✅ 性价比智能评分
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 新增功能详解
|
|||
|
|
|
|||
|
|
### 1. 差异百分比显示 📊
|
|||
|
|
|
|||
|
|
**功能说明**
|
|||
|
|
- 自动计算与最优值的差距
|
|||
|
|
- 显示百分比(+15% 或 -20%)
|
|||
|
|
- 红色表示更差,绿色表示更好
|
|||
|
|
|
|||
|
|
**示例**
|
|||
|
|
```
|
|||
|
|
方案A: 2核 4GB 价格 ¥88 (最优)
|
|||
|
|
方案B: 2核 4GB 价格 ¥95 +8% ← 比最低贵8%
|
|||
|
|
方案C: 2核 4GB 价格 ¥120 +36% ← 比最低贵36%
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**计算公式**
|
|||
|
|
```javascript
|
|||
|
|
差异百分比 = (当前值 - 最优值) / 最优值 × 100%
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. 视觉对比进度条 📈
|
|||
|
|
|
|||
|
|
**功能说明**
|
|||
|
|
- 每个配置项下方显示进度条
|
|||
|
|
- 进度条长度代表相对大小
|
|||
|
|
- 配置越高,进度条越长
|
|||
|
|
|
|||
|
|
**颜色编码**
|
|||
|
|
- 🟢 **绿色**:最优值(0-10% 差距)
|
|||
|
|
- 🔵 **蓝色**:良好值(10-30% 差距)
|
|||
|
|
- 🟡 **橙色**:一般值(30-50% 差距)
|
|||
|
|
- 🔴 **红色**:较差值(>50% 差距)
|
|||
|
|
|
|||
|
|
**视觉示例**
|
|||
|
|
```
|
|||
|
|
方案A: 8GB ████████████████████ 100% (绿色)
|
|||
|
|
方案B: 4GB ██████████ 50% (蓝色)
|
|||
|
|
方案C: 2GB █████ 25% (橙色)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. 颜色编码系统 🎨
|
|||
|
|
|
|||
|
|
**设计原则**
|
|||
|
|
基于 Data-Dense Dashboard 设计系统:
|
|||
|
|
- 使用颜色快速传达信息
|
|||
|
|
- 符合用户直觉(绿=好,红=差)
|
|||
|
|
- 保持 WCAG AA 可访问性标准
|
|||
|
|
|
|||
|
|
**颜色方案**
|
|||
|
|
```css
|
|||
|
|
最优值:#059669 (绿色) - 背景高亮
|
|||
|
|
良好值:#0369A1 (蓝色) - 文字高亮
|
|||
|
|
一般值:#EA580C (橙色) - 警告色
|
|||
|
|
较差值:#DC2626 (红色) - 危险色
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**应用场景**
|
|||
|
|
- 价格:最低价格绿色背景
|
|||
|
|
- 配置:最高配置绿色文字
|
|||
|
|
- 进度条:根据差距显示颜色
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. 横向对比表格 📋
|
|||
|
|
|
|||
|
|
**功能说明**
|
|||
|
|
- 当收藏 2 个以上方案时自动显示
|
|||
|
|
- 列对列直接对比
|
|||
|
|
- 最优值绿色高亮
|
|||
|
|
|
|||
|
|
**表格结构**
|
|||
|
|
```
|
|||
|
|
┌─────────┬──────────┬──────────┬──────────┐
|
|||
|
|
│ 指标 │ 阿里云 │ 腾讯云 │ Vultr │
|
|||
|
|
├─────────┼──────────┼──────────┼──────────┤
|
|||
|
|
│ vCPU │ 2 核 │ 2 核 │ 2 核 │
|
|||
|
|
│ 内存 │ 4 GB ✓ │ 4 GB ✓ │ 2 GB │
|
|||
|
|
│ 存储 │ 40 GB │ 50 GB ✓ │ 40 GB │
|
|||
|
|
│ 价格 │ ¥88 ✓ │ ¥95 │ ¥78 ✓ │
|
|||
|
|
└─────────┴──────────┴──────────┴──────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**优势**
|
|||
|
|
- 一眼看出所有差异
|
|||
|
|
- 无需上下滚动
|
|||
|
|
- 适合打印和截图分享
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5. 性价比评分 ⭐
|
|||
|
|
|
|||
|
|
**功能说明**
|
|||
|
|
- 综合价格和配置计算评分
|
|||
|
|
- 5 星评分系统
|
|||
|
|
- 帮助快速决策
|
|||
|
|
|
|||
|
|
**评分算法**
|
|||
|
|
```javascript
|
|||
|
|
总分 = 价格得分(40%) + 内存得分(30%) + CPU得分(20%) + 存储得分(10%)
|
|||
|
|
|
|||
|
|
价格得分:
|
|||
|
|
- 比最低价贵 ≤10% → 4分
|
|||
|
|
- 比最低价贵 10-30% → 3分
|
|||
|
|
- 比最低价贵 30-50% → 2分
|
|||
|
|
- 比最低价贵 >50% → 1分
|
|||
|
|
|
|||
|
|
配置得分(CPU/内存/存储):
|
|||
|
|
- 达到最高配置 ≥90% → 满分
|
|||
|
|
- 达到最高配置 70-90% → 中等分
|
|||
|
|
- 达到最高配置 <70% → 低分
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**评分示例**
|
|||
|
|
```
|
|||
|
|
方案A: ⭐⭐⭐⭐⭐ (5星) - 价格低,配置高
|
|||
|
|
方案B: ⭐⭐⭐⭐ (4星) - 价格中等,配置高
|
|||
|
|
方案C: ⭐⭐⭐ (3星) - 价格低,配置中等
|
|||
|
|
方案D: ⭐⭐ (2星) - 价格高,配置低
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📖 使用指南
|
|||
|
|
|
|||
|
|
### 基础操作
|
|||
|
|
|
|||
|
|
#### 1. 查看差异百分比
|
|||
|
|
```
|
|||
|
|
1. 收藏 2-3 个方案
|
|||
|
|
2. 查看对比面板
|
|||
|
|
3. 每个配置项下方显示差异百分比
|
|||
|
|
4. 红色 +X% 表示比最优值差
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2. 理解进度条
|
|||
|
|
```
|
|||
|
|
1. 进度条长度 = 配置相对大小
|
|||
|
|
2. 进度条颜色 = 与最优值的差距
|
|||
|
|
3. 绿色 = 最优,红色 = 较差
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3. 使用横向表格
|
|||
|
|
```
|
|||
|
|
1. 收藏 2 个以上方案
|
|||
|
|
2. 对比面板底部自动显示表格
|
|||
|
|
3. 列对列直接对比
|
|||
|
|
4. 绿色高亮 = 该列最优值
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4. 参考性价比评分
|
|||
|
|
```
|
|||
|
|
1. 每个方案底部显示星级
|
|||
|
|
2. 5星 = 性价比最高
|
|||
|
|
3. 1星 = 性价比最低
|
|||
|
|
4. 综合考虑价格和配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎨 视觉设计
|
|||
|
|
|
|||
|
|
### 设计系统
|
|||
|
|
基于 UI/UX Pro Max 推荐的 **Data-Dense Dashboard** 风格:
|
|||
|
|
- 信息密度高
|
|||
|
|
- 数据可视化清晰
|
|||
|
|
- 专业商务风格
|
|||
|
|
|
|||
|
|
### 配色方案
|
|||
|
|
```css
|
|||
|
|
/* 主色调 */
|
|||
|
|
--accent: #0369A1 /* 专业蓝 */
|
|||
|
|
--green: #059669 /* 成功绿 */
|
|||
|
|
--orange: #EA580C /* 警告橙 */
|
|||
|
|
--red: #DC2626 /* 危险红 */
|
|||
|
|
|
|||
|
|
/* 背景色 */
|
|||
|
|
--bg-card: #FFFFFF /* 卡片背景 */
|
|||
|
|
--bg-elevated: #F1F5F9 /* 高亮背景 */
|
|||
|
|
--border: #E2E8F0 /* 边框 */
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 字体系统
|
|||
|
|
```css
|
|||
|
|
/* 数据字体 */
|
|||
|
|
font-family: "JetBrains Mono", "Fira Code", monospace;
|
|||
|
|
|
|||
|
|
/* 界面字体 */
|
|||
|
|
font-family: "Noto Sans SC", -apple-system, sans-serif;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💻 技术实现
|
|||
|
|
|
|||
|
|
### 核心算法
|
|||
|
|
|
|||
|
|
#### 差异计算
|
|||
|
|
```javascript
|
|||
|
|
function calculateDiff(value, bestValue, isLowerBetter) {
|
|||
|
|
if (value === bestValue) return 0;
|
|||
|
|
|
|||
|
|
const diff = isLowerBetter
|
|||
|
|
? ((value - bestValue) / bestValue * 100)
|
|||
|
|
: ((bestValue - value) / bestValue * 100);
|
|||
|
|
|
|||
|
|
return Math.round(diff);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 颜色编码
|
|||
|
|
```javascript
|
|||
|
|
function getDiffBadge(diff, isLowerBetter) {
|
|||
|
|
if (diff === 0) return 'best';
|
|||
|
|
const absDiff = Math.abs(diff);
|
|||
|
|
|
|||
|
|
if (absDiff <= 10) return 'good';
|
|||
|
|
if (absDiff <= 30) return 'average';
|
|||
|
|
return 'poor';
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 进度条宽度
|
|||
|
|
```javascript
|
|||
|
|
function getProgressBarWidth(value, maxValue) {
|
|||
|
|
if (maxValue === 0) return 0;
|
|||
|
|
return Math.min((value / maxValue * 100), 100);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 性价比评分
|
|||
|
|
```javascript
|
|||
|
|
function calculateValueScore(plan, bestPrice, bestVcpu, bestMemory, bestStorage) {
|
|||
|
|
let score = 0;
|
|||
|
|
|
|||
|
|
// 价格权重 40%
|
|||
|
|
const priceDiff = (price - bestPrice) / bestPrice;
|
|||
|
|
if (priceDiff <= 0.1) score += 4;
|
|||
|
|
else if (priceDiff <= 0.3) score += 3;
|
|||
|
|
else if (priceDiff <= 0.5) score += 2;
|
|||
|
|
else score += 1;
|
|||
|
|
|
|||
|
|
// CPU 权重 20%
|
|||
|
|
const cpuRatio = plan.vcpu / bestVcpu;
|
|||
|
|
if (cpuRatio >= 0.9) score += 2;
|
|||
|
|
else if (cpuRatio >= 0.7) score += 1.5;
|
|||
|
|
else score += 1;
|
|||
|
|
|
|||
|
|
// 内存权重 30%
|
|||
|
|
const memRatio = plan.memory_gb / bestMemory;
|
|||
|
|
if (memRatio >= 0.9) score += 3;
|
|||
|
|
else if (memRatio >= 0.7) score += 2;
|
|||
|
|
else score += 1;
|
|||
|
|
|
|||
|
|
// 存储权重 10%
|
|||
|
|
const storageRatio = plan.storage_gb / bestStorage;
|
|||
|
|
if (storageRatio >= 0.9) score += 1;
|
|||
|
|
else if (storageRatio >= 0.7) score += 0.5;
|
|||
|
|
|
|||
|
|
return Math.min(Math.round(score), 5);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 性能优化
|
|||
|
|
|
|||
|
|
### 已实施
|
|||
|
|
- ✅ 差异计算缓存
|
|||
|
|
- ✅ 进度条 CSS transform 硬件加速
|
|||
|
|
- ✅ 表格视图按需渲染
|
|||
|
|
- ✅ 颜色编码预计算
|
|||
|
|
|
|||
|
|
### 性能指标
|
|||
|
|
- 差异计算:< 10ms
|
|||
|
|
- 进度条渲染:< 20ms
|
|||
|
|
- 表格视图渲染:< 50ms
|
|||
|
|
- 性价比评分:< 15ms
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 使用场景
|
|||
|
|
|
|||
|
|
### 场景 1:快速找出性价比最高的方案
|
|||
|
|
```
|
|||
|
|
1. 收藏 3-4 个候选方案
|
|||
|
|
2. 查看性价比星级评分
|
|||
|
|
3. 选择 5 星或 4 星方案
|
|||
|
|
4. 点击"官网"购买
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 场景 2:对比同价位不同配置
|
|||
|
|
```
|
|||
|
|
1. 筛选价格区间:¥100-300
|
|||
|
|
2. 收藏 2-3 个方案
|
|||
|
|
3. 查看横向对比表格
|
|||
|
|
4. 对比 CPU、内存、存储差异
|
|||
|
|
5. 选择配置最高的方案
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 场景 3:找出价格最优方案
|
|||
|
|
```
|
|||
|
|
1. 收藏多个方案
|
|||
|
|
2. 查看价格差异百分比
|
|||
|
|
3. 绿色高亮 = 最低价格
|
|||
|
|
4. 红色 +X% = 比最低贵多少
|
|||
|
|
5. 根据预算选择
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📁 文件变更
|
|||
|
|
|
|||
|
|
### 新增文件
|
|||
|
|
```
|
|||
|
|
static/js/main-comparison-enhanced.js (33 KB, 808 行)
|
|||
|
|
ENHANCED_COMPARISON.md (本文件)
|
|||
|
|
test_enhanced_comparison.sh (测试脚本)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 修改文件
|
|||
|
|
```
|
|||
|
|
static/css/style.css (新增 400+ 行样式)
|
|||
|
|
templates/index.html (更新 JS 引用)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 备份文件
|
|||
|
|
```
|
|||
|
|
static/js/main-comparison.js (原版对比功能)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎉 功能对比
|
|||
|
|
|
|||
|
|
### v3.0 → v3.1
|
|||
|
|
|
|||
|
|
| 功能 | v3.0 | v3.1 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| 分屏布局 | ✅ | ✅ |
|
|||
|
|
| 实时对比 | ✅ | ✅ |
|
|||
|
|
| 智能高亮 | ✅ | ✅ |
|
|||
|
|
| **差异百分比** | ❌ | ✅ |
|
|||
|
|
| **进度条可视化** | ❌ | ✅ |
|
|||
|
|
| **颜色编码** | ❌ | ✅ |
|
|||
|
|
| **横向表格** | ❌ | ✅ |
|
|||
|
|
| **性价比评分** | ❌ | ✅ |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 立即体验
|
|||
|
|
|
|||
|
|
### 访问地址
|
|||
|
|
```
|
|||
|
|
http://127.0.0.1:5001
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 强制刷新
|
|||
|
|
```
|
|||
|
|
Mac: Cmd + Shift + R
|
|||
|
|
Windows: Ctrl + Shift + R
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试步骤
|
|||
|
|
1. ⭐ 点击 2-3 个方案的星标
|
|||
|
|
2. 👀 查看右侧对比面板
|
|||
|
|
3. 📊 观察进度条和颜色
|
|||
|
|
4. 🔢 查看差异百分比
|
|||
|
|
5. 📋 查看横向对比表格
|
|||
|
|
6. ⭐ 查看性价比评分
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**开发者**:Claude Sonnet 4.5
|
|||
|
|
**版本**:v3.1 Enhanced Comparison
|
|||
|
|
**实现日期**:2026-02-09
|
|||
|
|
|
|||
|
|
🎊 **一眼看出差异,快速做出决策!**
|