Skip to content

质量与性能保障体系

1. Jest 单元测试覆盖

采用 Jest 作为单元测试框架,构建了全面的测试体系:

1.1 测试配置

javascript
// jest.config.js
module.exports = {
  preset: "ts-jest",
  testEnvironment: "node",
  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, {
    prefix: "<rootDir>/../../",
  }),
};

这个配置支持:

  • TypeScript 测试文件处理
  • 路径别名映射
  • Node.js 测试环境

1.2 测试脚本集成

在 package.json 中,测试集成到 Turbo 构建系统:

json
"scripts": {
  "test": "turbo run test"
}

这种集成允许:

  • 并行测试执行
  • 增量测试运行
  • 缓存测试结果以提高效率

1.3 测试目录结构

测试文件组织在各个包的 tests 目录中,如:

2. 性能指标监控系统

框架内置了强大的性能指标监控系统,主要通过审计工具插件实现。

2.1 核心监控模块 CoreAudit

typescript
export class CoreAudit {
  private static readonly PLUGIN_ID = "CoreAudit";
  private datas: AuditSourceData[];
  private config: AuditConfig;
  private config: AuditConfig;

  // 监控各类性能数据
  public addPerformanceData<K extends keyof TaskDetails>(
    data: AuditSourceData<K>,
    options?: {
      unique?: (item: TaskDetails[K], data: TaskDetails[K]) => boolean;
    }
  ): void {
    /_ ... _/;
  }

  // 收集 setData 调用情况
  public addSetDataQueue(params: { page: string; data: any }): void {
    /_ ... _/;
  }

  // 收集网络请求情况
  public addRequestQueue(params: { api: string }): void {
    /_ ... _/;
  }

  // 收集数据变更情况
  public addOnDpDataChangeQueue(params: {
    deviceId: string;
    dps: Record<number | string, any>;
  }): void {
    /_ ... _/;
  }
}

2.2 监控指标范围

该系统监控的关键指标包括:

  • 渲染性能指标
    • setData 调用频率: 监控页面状态更新频率
    • setData 数据大小: 监控状态更新的数据量
    • 页面渲染耗时: 跟踪页面渲染完成时间
    • 网络性能指标
    • 请求并发数: 监控同时发起的网络请求数量
    • 请求响应时间: 跟踪网络请求的完成时间
    • 请求成功率: 记录网络请求的成功/失败状态
  • 设备交互指标
    • DP 数据变更频率: 监控设备状态数据变更频率
    • 设备交互延迟: 分析用户操作到设备响应的时间
  • 异常监控
    • JS 错误: 捕获并记录 JavaScript 运行时错误
    • Promise 异常: 监听未捕获的 Promise 拒绝
    • API 调用异常: 记录 API 调用失败情况

2.3 评分触发机制

typescript
// 评分结束处理
const experienceRateEnd = (
  res: Record<string, any>,
  { auditInstance }: { auditInstance: CoreAudit }
) => {
  const nativeDatas =
    typeof res?.source === "string" ? JSON.parse(res?.source) : [];
  auditInstance.stopAudit();
  const datas = auditInstance.getAuditData();
  const mergedData = [...datas, ...nativeDatas];

  // 收集基础信息
  const accountInfo = appApi.getAccountInfoSync?.();
  const systemInfo = appApi.getSystemInfoSync?.() || {};

  // 构建评分报告
  const basicInfo = {
    miniprogramId: accountInfo?.miniProgram?.appId || "",
    miniprogramName: accountInfo?.miniProgram?.appName || "",
    versionCode: accountInfo?.miniProgram?.version || "",
    versionType: versionType,
    brand: systemInfo.brand || "",
    model: systemInfo.model || "",
    network: auditInstance.networkType,
    jssdkVersion: systemInfo.SDKVersion || "",
  };

  return { mergedData, basicInfo };
};

2.4 数据收集与监听

审计工具通过 API 拦截和事件监听收集数据:

typescript
// 监听体验评分结束事件
appApi.onExperienceRateEnd?.((res: Record<string, any>) => {
  const { mergedData, basicInfo } = experienceRateEnd(res, { auditInstance });
  appApi.navigateToMiniProgram({
    appId: "tyraytkqpysspn7jv7",
    extraData: {
      source: mergedData,
      basicInfo: basicInfo,
    },
  });
});

// IDE 评分结束处理
appApi.onIDERateEnd = (callback) => {
  auditInstance.stopAudit();
  const datas = auditInstance.getAuditData();
  callback?.({ source: datas });
};

3. 集成工程化质量工具

3.1 代码质量工具

json
"devDependencies": {
  "@eslint/eslintrc": "^2.1.4",
  "@typescript-eslint/eslint-plugin": "^6.21.0",
  "@typescript-eslint/parser": "^6.21.0",
  "prettier": "^3.4.2",
  "husky": "^8.0.3"
}

提供:

  • ESLint 代码规范检查
  • TypeScript 类型检查
  • Prettier 代码格式化
  • Husky Git 钩子集成

3.2 依赖分析工具

json
"devDependencies": {
  "dpdm": "^3.14.0"
}

用于:

  • 分析依赖关系
  • 检测循环依赖
  • 优化包体积

4. 总结

建立全面的质量与性能保障体系:

  • 测试驱动质量:使用 Jest 实现单元测试覆盖,保证代码质量
  • 实时性能监控:通过 CoreAudit 系统监控关键性能指标
  • 用户体验评分:建立评分机制,定量评估应用性能
  • 代码规范保障:集成多种工程化工具,确保代码质量
  • 依赖优化工具:分析依赖关系,优化包体积和加载性能

基于 MIT 许可发布