AI 辅助的设计系统健康报告:自动生成组件使用率与弃用分析
AI 辅助的设计系统健康报告自动生成组件使用率与弃用分析一、这个组件三年前写的现在还有人在用吗设计系统维护者常见困境组件数量持续增长300但没人知道哪些组件还在用、哪些已经死了、哪些被滥用了。删除一个组件需要手动调研三周最后发现不敢删万一有人用呢。健康报告就是解决组件库的未知债务问题自动扫描全量业务代码统计每个组件的使用频率、使用方式Props 组合、最近使用时间生成一份量化的组件健康度报告。二、健康度评分模型健康度评分模型通过全量代码扫描启动自动提取组件引用并构建组件使用矩阵。基于该矩阵系统从五个关键维度量化组件状态使用频率0-100 分、Props 使用广度0-100 分、最近使用时间30 天内满分半年以上为 0 分、使用趋势增长/稳定/下降以及兼容性问题违反设计规范次数。上述维度数据将汇聚为综合健康分并依据分数区间进行状态判定健康 80 分广泛使用状态良好。注意50-80 分使用率下降需关注。危险 50 分考虑弃用或重构。死亡0 分可安全删除。三、健康报告生成器// health-report/component-health-analyzer.ts // 组件健康度分析器 interface ComponentHealth { componentName: string; /** 总使用次数 */ usageCount: number; ---/** 使用该组件的页面/模块数量/usageScope: number;/* 最后使用日期/lastUsedDate: string;/* Props 使用率被使用的 Props / 总 Props/propsUsageRate: number;/* 僵尸 Props定义了但从未被使用的 Props/zombieProps: string[];/* 使用趋势最近 3 个月 vs 前 3 个月/trend: growing | stable | declining | new | dead;/* 设计规范违规次数不推荐用法/designViolations: number;/* 综合健康分 0-100/healthScore: number;/* 建议操作 */recommendation: keep | monitor | refactor | deprecate | remove;}/**设计系统健康报告生成器扫描整个 monorepo分析每个组件的使用情况/class HealthReportGenerator {/*生成全量健康报告*/async generateReport(projectRoots: string[]): PromiseComponentHealth[] {const allUsages await this.scanAllProjects(projectRoots);const componentDefs await this.loadComponentDefinitions();const healths: ComponentHealth[] [];for (const [name, def] of Object.entries(componentDefs)) {const usage allUsages.filter(u u.componentName name);// 计算 Props 使用率const usedProps new Set();usage.forEach(u {Object.keys(u.props).forEach(p usedProps.add(p));});const totalDefinedProps def.props.length;const propsUsageRate totalDefinedProps 0? usedProps.size / totalDefinedProps: 1;// 僵尸 Propsconst zombieProps def.props.filter(p !usedProps.has(p.name)).map(p p.name);// 使用趋势const trend this.calcTrend(usage, name);// 健康分计算const healthScore this.calcHealthScore({usageCount: usage.length,usageScope: new Set(usage.map(u u.file)).size,propsUsageRate,zombiePropCount: zombieProps.length,trend,violations: 0});// 建议const recommendation this.getRecommendation(healthScore, usage.length, trend);healths.push({componentName: name,usageCount: usage.length,usageScope: new Set(usage.map(u u.file)).size,lastUsedDate: this.getLastUsedDate(usage),propsUsageRate: Math.round(propsUsageRate * 100) / 100,zombieProps,trend,designViolations: 0,healthScore,recommendation});}return healths.sort((a, b) b.usageCount - a.usageCount);}/**健康分计算权重分配使用频率: 30%使用广度: 20%Props 使用率: 20%近期活跃度: 15%趋势: 10%违规扣分: 5%*/private calcHealthScore(params: {usageCount: number;usageScope: number;propsUsageRate: number;zombiePropCount: number;trend: string;violations: number;}): number {let score 0;// 使用频率0-30分 if (params.usageCount 0) { score 0; } else if (params.usageCount 5) { score 10; } else if (params.usageCount 20) { score 20; } else { score 30; } // 使用广度0-20分 if (params.usageScope 20) score 20; else if (params.usageScope 10) score 15; else if (params.usageScope 3) score 10; else if (params.usageScope 0) score 5; // Props 使用率0-20分 score Math.round(params.propsUsageRate * 20); // 近期活跃度0-15分 // 由 calcTrend 内部赋值 // 趋势分数0-10分 switch (params.trend) { case growing: score 10; break; case stable: score 7; break; case new: score 5; break; case declining: score 2; break; case dead: score 0; break; } // 违规扣分-5分上限 score - Math.min(5, params.violations); // 僵尸 Props 扣分 score - Math.min(5, params.zombiePropCount * 2); return Math.max(0, Math.min(100, score));}/**使用趋势计算*/private calcTrend(usages: any[],componentName: string): growing | stable | declining | new | dead {if (usages.length 0) return dead;const threeMonthsAgo Date.now() - 90 * 24 * 60 * 60 * 1000; const sixMonthsAgo Date.now() - 180 * 24 * 60 * 60 * 1000; const recent usages.filter(u u.date threeMonthsAgo).length; const older usages.filter( u u.date sixMonthsAgo u.date threeMonthsAgo ).length; if (older 0 recent 0) return new; if (recent older * 1.2) return growing; if (recent older * 0.8) return declining; return stable;}private getRecommendation(score: number,usageCount: number,trend: string): ComponentHealth[recommendation] {if (usageCount 0) return remove;if (score 30) return deprecate;if (score 50) return refactor;if (score 70) return monitor;return keep;}private getLastUsedDate(usages: any[]): string {if (usages.length 0) return 从未使用;const latest Math.max(...usages.map(u u.date));return new Date(latest).toISOString().split(T)[0];}private async scanAllProjects(roots: string[]): Promiseany[] {// 扫描所有项目的代码文件提取组件使用记录return [];}private async loadComponentDefinitions(): PromiseRecordstring, any {// 加载组件库的组件定义文件return {};}}/**生成 Markdown 格式的健康报告*/function generateMarkdownReport(healths: ComponentHealth[]): string {const total healths.length;const healthy healths.filter(h h.recommendation keep).length;const atRisk healths.filter(h [monitor, refactor].includes(h.recommendation)).length;const deprecated healths.filter(h [deprecate, remove].includes(h.recommendation)).length;let report # 设计系统健康报告\n\n;report - 总组件数: ${total}\n;report - 健康: ${healthy} | 关注: ${atRisk} | 危险: ${deprecated}\n\n;report ## 危险组件建议弃用或删除\n\n;report | 组件 | 使用次数 | 健康分 | 建议 |\n;report |------|---------|--------|------|\n;for (const h of healths.filter(h h.recommendation deprecate || h.recommendation remove)) {report | ${h.componentName} | ${h.usageCount} | ${h.healthScore} | ${h.recommendation} |\n;}report \n## 僵尸 Props定义了但从未使用的 Props\n\n;for (const h of healths.filter(h h.zombieProps.length 0)) {report ### ${h.componentName}\n;for (const prop of h.zombieProps) {report - \${prop}\n;}report \n;}return report;}## 四、健康报告的时效性与可信度 **代码扫描的覆盖率**。如果只扫描 src/ 目录遗漏了测试文件、Storybook Stories 等间接使用场景报告的使用次数会低估。建议扫描范围包括.tsx、.jsx、.ts 文件中所有 JSX 标签和 createElement 调用。 **使用频率不反映重要性**。一个只在首页用了一次的关键 CTA 按钮组件比一个在 50 个后台页面使用的普通表单字段更重要。健康分需要加入使用位置的权重——首页使用权重高于设置页。 **Git 历史提供趋势数据**。仅扫描当前代码只能得到现状结合 Git 历史可以分析过去半年的使用趋势——这是健康报告中trend字段的价值来源。 ## 五、总结 设计系统健康报告将组件库的维护从凭感觉变成看数据 1. **使用矩阵**——每个组件被多少个页面/模块使用 2. **Props 分析**——哪些 Props 是僵尸属性定义但从未使用 3. **趋势判断**——使用量在增长还是下降 4. **操作建议**——删除 / 弃用 / 重构 / 监控 / 保持 这份报告应该**每周自动生成**发布到团队 Slack 频道或维护者 Dashboard 中。不是为了让谁去读而是当某个组件的健康分持续下降时自动触发是否需要重构的讨论。

相关新闻

Xplique与TensorFlow/PyTorch无缝集成教程:5分钟上手模型解释

Xplique与TensorFlow/PyTorch无缝集成教程:5分钟上手模型解释

Xplique与TensorFlow/PyTorch无缝集成教程:5分钟上手模型解释 【免费下载链接】xplique 👋 Xplique is a Neural Networks Explainability Toolbox 项目地址: https://gitcode.com/gh_mirrors/xp/xplique Xplique是一款功能强大的神经网络可解释性…

2026/10/13 10:15:08 阅读更多 →
基于MFC和WinSock的简易聊天室程序(附完整源码)

基于MFC和WinSock的简易聊天室程序(附完整源码)

本文使用Windows C网络编程和多线程编程实现一个简单的聊天室程序。该程序由服务器端和客户端两部分组成。服务器端负责客户端的上线、离线,以及转发各个客户端发来的消息。客户端向服务器发送信息,从服务器接收信息,以及显示信息到客户端界面…

2026/10/12 0:36:50 阅读更多 →
如何在Windows上优雅地管理Android应用?APK Installer场景化使用指南

如何在Windows上优雅地管理Android应用?APK Installer场景化使用指南

如何在Windows上优雅地管理Android应用?APK Installer场景化使用指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否经常需要在Windows电脑上测试An…

2026/10/15 18:25:42 阅读更多 →

最新新闻

Android校园论坛App开发实战:从架构设计到毕设答辩全攻略

Android校园论坛App开发实战:从架构设计到毕设答辩全攻略

1. 项目概述:为什么说这是最适合做毕设的Android选题之一校园信息论坛这个题目,几乎是每年计算机毕业设计里“常青树”级别的存在。我见过太多人选电商系统、选点餐App、选运动打卡,最后做到中期答辩才发现业务逻辑复杂到失控——订单状态机、…

2026/10/16 7:38:11 阅读更多 →
Ubuntu 20.04深度学习环境搭建:NVIDIA驱动+CUDA+cuDNN+PyTorch全攻略

Ubuntu 20.04深度学习环境搭建:NVIDIA驱动+CUDA+cuDNN+PyTorch全攻略

1. 深度学习环境搭建的整体思路与方案选型1.1 为什么选择这套组合搞深度学习环境搭建这件事,说简单也简单,说折腾也真折腾。我前后在不下十台机器上装过这套环境,从实验室的塔式工作站到租用的云主机,每次都会遇到不一样的问题。U…

2026/10/16 7:38:11 阅读更多 →
YOLOv10【第九章:模型导出、部署与加速篇·第9节】NCNN 部署 YOLOv10:算子兼容与后处理适配!

YOLOv10【第九章:模型导出、部署与加速篇·第9节】NCNN 部署 YOLOv10:算子兼容与后处理适配!

🏆 本文收录于 《YOLOv10实战:从入门到深度优化》 专栏。 该专栏系统复现并深度梳理全网主流 YOLOv10 改进方法与工程实战案例,覆盖分类、目标检测、实例分割、多目标追踪、关键点检测、旋转目标检测等多个方向,坚持 持续更新 + 深度解析 + 工程验证。 专栏将围绕 YOLOv10…

2026/10/16 7:38:11 阅读更多 →
STM32 HAL库内部Flash操作与固件大小读取方法详解

STM32 HAL库内部Flash操作与固件大小读取方法详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 7:38:11 阅读更多 →
基于MP2642GR-Z与PIC18F8520的两串电池主动均衡系统设计

基于MP2642GR-Z与PIC18F8520的两串电池主动均衡系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 7:38:11 阅读更多 →
手工扒带Grunge:用Ableton与Python构建音乐数据集

手工扒带Grunge:用Ableton与Python构建音乐数据集

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 7:37:11 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →