feat: 创建 TypeScript 类型定义
This commit is contained in:
349
src/types/metrics.ts
Normal file
349
src/types/metrics.ts
Normal file
@@ -0,0 +1,349 @@
|
|||||||
|
/**
|
||||||
|
* 性能指标相关的 TypeScript 类型定义
|
||||||
|
* @module types/metrics
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Web Vitals 指标
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web Vitals 评级
|
||||||
|
*/
|
||||||
|
export type MetricRating = 'good' | 'needs-improvement' | 'poor';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单个 Web Vitals 指标
|
||||||
|
*/
|
||||||
|
export interface WebVitalMetric {
|
||||||
|
/** 指标名称 (如 'LCP', 'FCP') */
|
||||||
|
name: string;
|
||||||
|
/** 指标值(毫秒或分数) */
|
||||||
|
value: number;
|
||||||
|
/** 评级 (good/needs-improvement/poor) */
|
||||||
|
rating: MetricRating;
|
||||||
|
/** 与上周对比的差值 */
|
||||||
|
delta?: number;
|
||||||
|
/** 测量时间戳 */
|
||||||
|
timestamp: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 完整的 Web Vitals 指标集合
|
||||||
|
*/
|
||||||
|
export interface WebVitalsMetrics {
|
||||||
|
/** Largest Contentful Paint - 最大内容绘制时间 */
|
||||||
|
LCP: WebVitalMetric;
|
||||||
|
/** First Contentful Paint - 首次内容绘制时间 */
|
||||||
|
FCP: WebVitalMetric;
|
||||||
|
/** Cumulative Layout Shift - 累积布局偏移 */
|
||||||
|
CLS: WebVitalMetric;
|
||||||
|
/** First Input Delay - 首次输入延迟 */
|
||||||
|
FID: WebVitalMetric;
|
||||||
|
/** Time to First Byte - 首字节时间 */
|
||||||
|
TTFB: WebVitalMetric;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// 资源加载指标
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资源类型
|
||||||
|
*/
|
||||||
|
export type ResourceType = 'script' | 'stylesheet' | 'image' | 'font' | 'document' | 'other';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单个资源加载指标
|
||||||
|
*/
|
||||||
|
export interface ResourceTiming {
|
||||||
|
/** 资源名称 */
|
||||||
|
name: string;
|
||||||
|
/** 资源类型 */
|
||||||
|
type: ResourceType;
|
||||||
|
/** 资源大小(字节) */
|
||||||
|
size: number;
|
||||||
|
/** 加载耗时(毫秒) */
|
||||||
|
duration: number;
|
||||||
|
/** 开始时间 */
|
||||||
|
startTime: number;
|
||||||
|
/** 是否来自缓存 */
|
||||||
|
fromCache: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资源加载统计
|
||||||
|
*/
|
||||||
|
export interface ResourceStats {
|
||||||
|
/** JS 文件总大小(字节) */
|
||||||
|
totalJsSize: number;
|
||||||
|
/** CSS 文件总大小(字节) */
|
||||||
|
totalCssSize: number;
|
||||||
|
/** 图片总大小(字节) */
|
||||||
|
totalImageSize: number;
|
||||||
|
/** 字体总大小(字节) */
|
||||||
|
totalFontSize: number;
|
||||||
|
/** 总加载时间(毫秒) */
|
||||||
|
totalLoadTime: number;
|
||||||
|
/** 缓存命中率(0-1) */
|
||||||
|
cacheHitRate: number;
|
||||||
|
/** 详细的资源列表 */
|
||||||
|
resources: ResourceTiming[];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// 首屏指标
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首屏性能指标
|
||||||
|
*/
|
||||||
|
export interface FirstScreenMetrics {
|
||||||
|
/** Web Vitals 指标 */
|
||||||
|
webVitals: Partial<WebVitalsMetrics>;
|
||||||
|
/** 资源加载统计 */
|
||||||
|
resourceStats: ResourceStats;
|
||||||
|
/** 首屏可交互时间(毫秒) */
|
||||||
|
timeToInteractive: number;
|
||||||
|
/** 骨架屏展示时长(毫秒) */
|
||||||
|
skeletonDisplayDuration: number;
|
||||||
|
/** API 请求统计 */
|
||||||
|
apiStats: ApiRequestStats;
|
||||||
|
/** 测量时间戳 */
|
||||||
|
measuredAt: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API 请求统计
|
||||||
|
*/
|
||||||
|
export interface ApiRequestStats {
|
||||||
|
/** 总请求数 */
|
||||||
|
totalRequests: number;
|
||||||
|
/** 平均响应时间(毫秒) */
|
||||||
|
avgResponseTime: number;
|
||||||
|
/** 最慢的请求耗时(毫秒) */
|
||||||
|
slowestRequest: number;
|
||||||
|
/** 失败的请求数 */
|
||||||
|
failedRequests: number;
|
||||||
|
/** 详细的请求列表 */
|
||||||
|
requests: ApiRequestTiming[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单个 API 请求时序
|
||||||
|
*/
|
||||||
|
export interface ApiRequestTiming {
|
||||||
|
/** 请求 URL */
|
||||||
|
url: string;
|
||||||
|
/** 请求方法 */
|
||||||
|
method: string;
|
||||||
|
/** 响应时间(毫秒) */
|
||||||
|
duration: number;
|
||||||
|
/** HTTP 状态码 */
|
||||||
|
status: number;
|
||||||
|
/** 是否成功 */
|
||||||
|
success: boolean;
|
||||||
|
/** 开始时间 */
|
||||||
|
startTime: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// 业务指标
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能卡片点击统计
|
||||||
|
*/
|
||||||
|
export interface FeatureCardMetrics {
|
||||||
|
/** 卡片 ID */
|
||||||
|
cardId: string;
|
||||||
|
/** 卡片标题 */
|
||||||
|
cardTitle: string;
|
||||||
|
/** 点击次数 */
|
||||||
|
clicks: number;
|
||||||
|
/** 点击率(CTR) */
|
||||||
|
clickRate: number;
|
||||||
|
/** 平均点击时间(距离页面加载的毫秒数) */
|
||||||
|
avgClickTime: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首页业务指标
|
||||||
|
*/
|
||||||
|
export interface HomePageBusinessMetrics {
|
||||||
|
/** 页面浏览次数(PV) */
|
||||||
|
pageViews: number;
|
||||||
|
/** 独立访客数(UV) */
|
||||||
|
uniqueVisitors: number;
|
||||||
|
/** 平均停留时长(秒) */
|
||||||
|
avgSessionDuration: number;
|
||||||
|
/** 跳出率(0-1) */
|
||||||
|
bounceRate: number;
|
||||||
|
/** 登录转化率(0-1) */
|
||||||
|
loginConversionRate: number;
|
||||||
|
/** 功能卡片点击统计 */
|
||||||
|
featureCards: FeatureCardMetrics[];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// PostHog 事件属性
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PostHog 性能事件通用属性
|
||||||
|
*/
|
||||||
|
export interface PerformanceEventProperties {
|
||||||
|
/** 页面类型 */
|
||||||
|
page_type: string;
|
||||||
|
/** 设备类型 */
|
||||||
|
device_type?: string;
|
||||||
|
/** 网络类型 */
|
||||||
|
network_type?: string;
|
||||||
|
/** 浏览器 */
|
||||||
|
browser?: string;
|
||||||
|
/** 是否已登录 */
|
||||||
|
is_authenticated?: boolean;
|
||||||
|
/** 测量时间戳 */
|
||||||
|
measured_at: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web Vitals 事件属性
|
||||||
|
*/
|
||||||
|
export interface WebVitalsEventProperties extends PerformanceEventProperties {
|
||||||
|
/** 指标名称 */
|
||||||
|
metric_name: 'LCP' | 'FCP' | 'CLS' | 'FID' | 'TTFB';
|
||||||
|
/** 指标值 */
|
||||||
|
metric_value: number;
|
||||||
|
/** 评级 */
|
||||||
|
metric_rating: MetricRating;
|
||||||
|
/** 与上周对比 */
|
||||||
|
delta?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资源加载事件属性
|
||||||
|
*/
|
||||||
|
export interface ResourceLoadEventProperties extends PerformanceEventProperties {
|
||||||
|
/** JS 总大小(KB) */
|
||||||
|
js_size_kb: number;
|
||||||
|
/** CSS 总大小(KB) */
|
||||||
|
css_size_kb: number;
|
||||||
|
/** 图片总大小(KB) */
|
||||||
|
image_size_kb: number;
|
||||||
|
/** 总加载时间(秒) */
|
||||||
|
total_load_time_s: number;
|
||||||
|
/** 缓存命中率(百分比) */
|
||||||
|
cache_hit_rate_percent: number;
|
||||||
|
/** 资源总数 */
|
||||||
|
resource_count: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首屏可交互事件属性
|
||||||
|
*/
|
||||||
|
export interface FirstScreenInteractiveEventProperties extends PerformanceEventProperties {
|
||||||
|
/** 可交互时间(秒) */
|
||||||
|
tti_seconds: number;
|
||||||
|
/** 骨架屏展示时长(秒) */
|
||||||
|
skeleton_duration_seconds: number;
|
||||||
|
/** API 请求数 */
|
||||||
|
api_request_count: number;
|
||||||
|
/** API 平均响应时间(毫秒) */
|
||||||
|
api_avg_response_time_ms: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Hook 配置
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* useFirstScreenMetrics Hook 配置选项
|
||||||
|
*/
|
||||||
|
export interface UseFirstScreenMetricsOptions {
|
||||||
|
/** 页面类型(用于区分不同页面) */
|
||||||
|
pageType: string;
|
||||||
|
/** 是否启用控制台日志 */
|
||||||
|
enableConsoleLog?: boolean;
|
||||||
|
/** 是否自动上报到 PostHog */
|
||||||
|
trackToPostHog?: boolean;
|
||||||
|
/** 自定义事件属性 */
|
||||||
|
customProperties?: Record<string, any>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* useFirstScreenMetrics Hook 返回值
|
||||||
|
*/
|
||||||
|
export interface UseFirstScreenMetricsResult {
|
||||||
|
/** 是否正在测量 */
|
||||||
|
isLoading: boolean;
|
||||||
|
/** 首屏指标(测量完成后) */
|
||||||
|
metrics: FirstScreenMetrics | null;
|
||||||
|
/** 手动触发重新测量 */
|
||||||
|
remeasure: () => void;
|
||||||
|
/** 导出指标为 JSON */
|
||||||
|
exportMetrics: () => string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// 性能阈值配置
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单个指标的阈值配置
|
||||||
|
*/
|
||||||
|
export interface MetricThreshold {
|
||||||
|
/** good 阈值(小于此值为 good) */
|
||||||
|
good: number;
|
||||||
|
/** needs-improvement 阈值(小于此值为 needs-improvement,否则 poor) */
|
||||||
|
needsImprovement: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所有性能指标的阈值配置
|
||||||
|
*/
|
||||||
|
export interface PerformanceThresholds {
|
||||||
|
LCP: MetricThreshold;
|
||||||
|
FCP: MetricThreshold;
|
||||||
|
CLS: MetricThreshold;
|
||||||
|
FID: MetricThreshold;
|
||||||
|
TTFB: MetricThreshold;
|
||||||
|
TTI: MetricThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// 调试面板
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调试面板配置
|
||||||
|
*/
|
||||||
|
export interface DebugPanelConfig {
|
||||||
|
/** 是否启用 */
|
||||||
|
enabled: boolean;
|
||||||
|
/** 默认是否展开 */
|
||||||
|
defaultExpanded?: boolean;
|
||||||
|
/** 刷新间隔(毫秒) */
|
||||||
|
refreshInterval?: number;
|
||||||
|
/** 位置 */
|
||||||
|
position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调试面板数据
|
||||||
|
*/
|
||||||
|
export interface DebugPanelData {
|
||||||
|
/** Web Vitals 指标 */
|
||||||
|
webVitals: Partial<WebVitalsMetrics>;
|
||||||
|
/** 资源统计 */
|
||||||
|
resources: ResourceStats;
|
||||||
|
/** API 统计 */
|
||||||
|
api: ApiRequestStats;
|
||||||
|
/** 首屏时间 */
|
||||||
|
firstScreen: {
|
||||||
|
tti: number;
|
||||||
|
skeletonDuration: number;
|
||||||
|
};
|
||||||
|
/** 最后更新时间 */
|
||||||
|
lastUpdated: number;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user