Files
npm-tool/.qoder/repowiki/zh/content/API 参考手册/通用工具 API.md

937 lines
24 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 通用工具 API
<cite>
**本文档引用的文件**
- [README.md](file://README.md)
- [package.json](file://package.json)
- [index.js](file://index.js)
- [TsCommon.js](file://src/utils/TsCommon.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
这是一个功能丰富的 JavaScript 工具包,提供了多种实用的工具函数和组件,主要用于 Web 应用开发中的常见需求。该工具包包含了字符串处理、数据类型检查、URL 操作、加密解密、存储管理、HTTP 请求等功能模块。
主要特性:
- **字符串处理工具**URL 参数解析、空值判断、JSON 解析、字符串替换、结尾判断等
- **加密解密功能**:基于 SM4 算法的加密解密工具
- **存储管理**:本地存储封装,支持对象序列化
- **HTTP 请求工具**:基于 umi-request 的网络请求封装
- **全局配置管理**:统一的配置管理和环境检测
## 项目结构
该项目采用模块化的组织方式,主要分为以下目录结构:
```mermaid
graph TB
subgraph "项目根目录"
Root[index.js<br/>主入口文件]
Package[package.json<br/>项目配置]
Readme[README.md<br/>使用说明]
end
subgraph "src/ 工具源码目录"
Utils[src/utils/<br/>通用工具模块]
Https[src/https/<br/>HTTP 工具模块]
end
subgraph "Utils 模块"
Common[TsCommon.js<br/>通用工具]
Crypto[TsCrypto.js<br/>加密工具]
SM4[TsSM4.js<br/>SM4 算法实现]
Storage[TsStorage.js<br/>存储工具]
Config[TsGlobalConfig.js<br/>全局配置]
end
subgraph "Https 模块"
HttpUtil[TsHttpUtil.js<br/>HTTP 请求工具]
end
Root --> Utils
Root --> Https
Utils --> Common
Utils --> Crypto
Utils --> SM4
Utils --> Storage
Utils --> Config
Https --> HttpUtil
```
**图表来源**
- [index.js:1-16](file://index.js#L1-L16)
- [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98)
- [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34)
- [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456)
- [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55)
- [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34)
- [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171)
**章节来源**
- [index.js:1-16](file://index.js#L1-L16)
- [package.json:1-24](file://package.json#L1-L24)
## 核心组件
该工具包的核心由六个主要模块组成,每个模块都提供特定的功能领域:
### 主要模块概览
| 模块名称 | 文件路径 | 功能描述 |
|---------|----------|----------|
| TsCommon | src/utils/TsCommon.js | 通用工具函数集合 |
| TsCrypto | src/utils/TsCrypto.js | 加密解密工具 |
| TsSM4 | src/utils/TsSM4.js | SM4 算法实现 |
| TsStorage | src/utils/TsStorage.js | 本地存储管理 |
| TsGlobalConfig | src/utils/TsGlobalConfig.js | 全局配置管理 |
| TsHttpUtil | src/https/TsHttpUtil.js | HTTP 请求封装 |
### 模块依赖关系
```mermaid
graph LR
subgraph "外部依赖"
Umi[umi-request<br/>网络请求库]
Base64[base64-js<br/>Base64 编解码]
end
subgraph "内部模块"
Common[TsCommon]
Crypto[TsCrypto]
SM4[TsSM4]
Storage[TsStorage]
Config[TsGlobalConfig]
HttpUtil[TsHttpUtil]
end
HttpUtil --> Storage
HttpUtil --> Common
HttpUtil --> Crypto
HttpUtil --> Config
Crypto --> SM4
Crypto --> Config
Storage --> Common
SM4 --> Base64
HttpUtil --> Umi
```
**图表来源**
- [package.json:19-22](file://package.json#L19-L22)
- [TsHttpUtil.js:1-5](file://src/https/TsHttpUtil.js#L1-L5)
- [TsCrypto.js:1-3](file://src/utils/TsCrypto.js#L1-L3)
**章节来源**
- [package.json:19-22](file://package.json#L19-L22)
- [index.js:8-15](file://index.js#L8-L15)
## 架构概览
该工具包采用了分层架构设计,将不同功能领域的工具函数分离到独立的模块中,通过清晰的依赖关系实现松耦合的设计。
### 整体架构图
```mermaid
graph TB
subgraph "应用层"
App[业务应用]
end
subgraph "工具层"
HttpLayer[HTTP 层<br/>TsHttpUtil]
CryptoLayer[加密层<br/>TsCrypto + TsSM4]
StorageLayer[存储层<br/>TsStorage]
CommonLayer[通用层<br/>TsCommon]
end
subgraph "基础设施层"
Network[umi-request]
CryptoLib[SM4 算法]
StorageAPI[localStorage]
Encoding[base64-js]
end
App --> HttpLayer
HttpLayer --> CryptoLayer
HttpLayer --> StorageLayer
HttpLayer --> CommonLayer
CryptoLayer --> CryptoLib
CryptoLayer --> Encoding
StorageLayer --> StorageAPI
HttpLayer --> Network
```
**图表来源**
- [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171)
- [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34)
- [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55)
- [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98)
### 数据流处理流程
```mermaid
sequenceDiagram
participant Client as 应用客户端
participant HttpUtil as HTTP 工具
participant Crypto as 加密模块
participant Storage as 存储模块
participant Server as 服务器
Client->>HttpUtil : 发送请求
HttpUtil->>Storage : 获取用户令牌
Storage-->>HttpUtil : 返回令牌
HttpUtil->>HttpUtil : 处理请求参数
HttpUtil->>Crypto : 加密数据(可选)
Crypto-->>HttpUtil : 返回加密结果
HttpUtil->>Server : 发送 HTTP 请求
Server-->>HttpUtil : 返回响应
HttpUtil->>Crypto : 解密响应(可选)
Crypto-->>HttpUtil : 返回解密结果
HttpUtil-->>Client : 返回处理后的数据
```
**图表来源**
- [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134)
- [TsCrypto.js:19-30](file://src/utils/TsCrypto.js#L19-L30)
- [TsStorage.js:13-15](file://src/utils/TsStorage.js#L13-L15)
## 详细组件分析
### TsCommon 通用工具模块
TsCommon 模块提供了基础的工具函数涵盖了字符串处理、数据类型检查、URL 操作等多个方面。
#### 核心 API 接口
##### getParamFormUrl - URL 参数解析
**方法签名**: `getParamFormUrl(key, host)`
**参数说明**:
- `key`: string - 要获取的 URL 参数键名
- `host`: string (可选) - 目标 URL 字符串,默认使用当前页面 URL
**返回值**: string - 匹配参数的值,未找到时返回空字符串
**使用场景**:
- 从 URL 中提取查询参数
- 处理页面分享链接中的参数
- 解析路由参数
**参数验证规则**:
- 支持任意字符串作为参数键
- host 参数可选,不传入时使用当前页面 URL
**边界条件处理**:
- URL 中无问号或无查询参数时返回空字符串
- 参数值包含特殊字符时自动解码
- URL 格式不正确时捕获异常并返回空字符串
##### isEmpty - 空值判断
**方法签名**: `isEmpty(value)`
**参数说明**:
- `value`: any - 要检查的值
**返回值**: boolean - 值为 undefined、null 或空字符串时返回 true
**使用场景**:
- 表单验证
- 数据预处理
- 条件判断
**参数验证规则**:
- 接受任意类型的参数
- 严格比较空值类型
##### parseJSON - JSON 解析
**方法签名**: `parseJSON(value, def)`
**参数说明**:
- `value`: string - 要解析的 JSON 字符串
- `def`: any (可选) - 默认返回值,默认为空对象 {}
**返回值**: any - 解析后的对象或默认值
**使用场景**:
- 安全地解析 JSON 字符串
- 处理可能损坏的 JSON 数据
- 提供默认值机制
**参数验证规则**:
- 第二个参数为可选,默认值为空对象
- 解析失败时返回默认值
**边界条件处理**:
- JSON 格式错误时捕获异常
- 解析结果为空时使用默认值
##### split - 字符串分割
**方法签名**: `split(obj, seq)`
**参数说明**:
- `obj`: string - 要分割的字符串
- `seq`: string (可选) - 分隔符,默认为逗号
**返回值**: string[] - 分割后的字符串数组
**使用场景**:
- 处理逗号分隔的列表
- 解析配置字符串
- 数据格式转换
**参数验证规则**:
- 支持任意字符串作为输入
- 分隔符可自定义
**边界条件处理**:
- 输入为 falsy 值时返回空数组
- 空字符串返回包含空字符串的数组
##### isDevelopment - 环境检测
**方法签名**: `isDevelopment()`
**参数说明**: 无
**返回值**: boolean - 当前环境为 development 时返回 true
**使用场景**:
- 开发模式下的调试输出
- 环境相关的功能开关
- 测试环境配置
**参数验证规则**:
- 依赖 Node.js 的环境变量
##### replaceAll - 全部替换
**方法签名**: `replaceAll(string, s1, s2)`
**参数说明**:
- `string`: string - 原始字符串
- `s1`: string - 要替换的子字符串
- `s2`: string - 替换后的字符串
**返回值**: string - 替换后的字符串
**使用场景**:
- 批量字符串替换
- 文本格式化
- 数据清洗
**参数验证规则**:
- 支持正则表达式的特殊字符
- 使用全局标志进行完全替换
##### endWith - 结尾判断
**方法签名**: `endWith(string, endStr)`
**参数说明**:
- `string`: string - 要检查的字符串
- `endStr`: string - 结尾字符串
**返回值**: boolean - 字符串以指定结尾时返回 true
**使用场景**:
- 文件扩展名检查
- URL 路径处理
- 字符串格式验证
**参数验证规则**:
- 支持空字符串作为输入
- 不区分大小写
**章节来源**
- [TsCommon.js:4-18](file://src/utils/TsCommon.js#L4-L18)
- [TsCommon.js:25-27](file://src/utils/TsCommon.js#L25-L27)
- [TsCommon.js:34-44](file://src/utils/TsCommon.js#L34-L44)
- [TsCommon.js:51-56](file://src/utils/TsCommon.js#L51-L56)
- [TsCommon.js:63-65](file://src/utils/TsCommon.js#L63-L65)
- [TsCommon.js:74-76](file://src/utils/TsCommon.js#L74-L76)
- [TsCommon.js:84-87](file://src/utils/TsCommon.js#L84-L87)
### TsCrypto 加密工具模块
TsCrypto 模块提供了基于 SM4 算法的加密解密功能,封装了底层的加密细节。
#### 核心 API 接口
##### 构造函数
**方法签名**: `new TsCrypto()`
**参数说明**: 无
**初始化过程**:
- 从全局配置获取 Base64 密钥
- 创建 SM4 实例ECB 模式)
- 设置密文类型为 Base64
##### encrypt - 数据加密
**方法签名**: `encrypt(content)`
**参数说明**:
- `content`: string | any - 要加密的内容
**返回值**: string - 加密后的 Base64 字符串
**使用场景**:
- 敏感数据传输加密
- API 请求体加密
- 数据安全存储
**参数验证规则**:
- 自动将非字符串内容转换为 JSON 字符串
- 依赖 SM4 算法进行加密
##### decrypt - 数据解密
**方法签名**: `decrypt(base64)`
**参数说明**:
- `base64`: string - Base64 编码的密文
**返回值**: string - 解密后的原始内容
**使用场景**:
- 解密服务器返回的加密数据
- 数据恢复和验证
- 安全通信
**参数验证规则**:
- 接收 Base64 编码的密文
- 返回原始明文内容
**章节来源**
- [TsCrypto.js:5-34](file://src/utils/TsCrypto.js#L5-L34)
### TsSM4 SM4 算法实现
TsSM4 是一个完整的 SM4 对称加密算法实现,支持 ECB 和 CBC 两种工作模式。
#### 核心 API 接口
##### 构造函数
**方法签名**: `new TsSM4(config)`
**参数说明**:
- `config`: object - 配置对象
- `keyBuffer`: Uint8Array - 16 字节密钥缓冲区
- `mode`: string - 加密模式,'cbc' 或 'ecb',默认 'cbc'
- `outType`: string - 输出类型,'base64' 或 'text',默认 'base64'
**参数验证规则**:
- 密钥长度必须为 16 字节
- IV初始化向量长度必须为 16 字节CBC 模式)
- 支持的模式:'cbc'、'ecb'
- 支持的输出类型:'base64'、'text'
##### encrypt - 数据加密
**方法签名**: `encrypt(plaintext)`
**参数说明**:
- `plaintext`: string - 要加密的明文
**返回值**: string - 加密后的密文
**使用场景**:
- 数据加密传输
- 密钥生成和管理
- 安全通信协议
**参数验证规则**:
- 自动进行 PKCS#7 填充
- 支持 UTF-8 编码
- 根据模式选择加密算法
##### decrypt - 数据解密
**方法签名**: `decrypt(ciphertext)`
**参数说明**:
- `ciphertext`: string - 要解密的密文
**返回值**: string - 解密后的明文
**使用场景**:
- 数据解密和验证
- 安全通信解码
- 数据恢复
**参数验证规则**:
- 支持 Base64 和文本两种输入格式
- 自动移除 PKCS#7 填充
- 支持 UTF-8 编码
#### SM4 算法流程图
```mermaid
flowchart TD
Start([开始加密]) --> Prepare["准备明文字节流<br/>UTF-8 编码"]
Prepare --> Padding["PKCS#7 填充<br/>16 字节对齐"]
Padding --> Mode{"选择模式"}
Mode --> |CBC| CBCInit["CBC 模式初始化<br/>IV = 16 字节"]
Mode --> |ECB| ECBInit["ECB 模式初始化<br/>无 IV"]
CBCInit --> BlockLoop["按块处理<br/>16 字节/块"]
ECBInit --> BlockLoop
BlockLoop --> XOR["与前一块密文异或<br/>(CBC)"]
XOR --> Round["32 轮加密循环"]
Round --> Output["输出密文字节流"]
Output --> Type{"输出类型"}
Type --> |Base64| Base64["Base64 编码"]
Type --> |Text| Text["UTF-8 解码"]
Base64 --> End([结束])
Text --> End
```
**图表来源**
- [TsSM4.js:338-387](file://src/utils/TsSM4.js#L338-L387)
- [TsSM4.js:395-452](file://src/utils/TsSM4.js#L395-L452)
**章节来源**
- [TsSM4.js:96-156](file://src/utils/TsSM4.js#L96-L156)
- [TsSM4.js:338-387](file://src/utils/TsSM4.js#L338-L387)
- [TsSM4.js:395-452](file://src/utils/TsSM4.js#L395-L452)
### TsStorage 存储工具模块
TsStorage 模块提供了本地存储的封装,支持对象的序列化和反序列化。
#### 核心 API 接口
##### save - 保存数据
**方法签名**: `save(key, value)`
**参数说明**:
- `key`: string - 存储键名
- `value`: any - 要保存的值
**返回值**: void
**使用场景**:
- 用户偏好设置保存
- 临时数据缓存
- 应用状态持久化
**参数验证规则**:
- 键名必须为字符串
- 值会被 JSON 序列化
##### get - 获取数据
**方法签名**: `get(key, def)`
**参数说明**:
- `key`: string - 存储键名
- `def`: any (可选) - 默认返回值,默认为空字符串
**返回值**: any - 存储的值或默认值
**使用场景**:
- 用户数据读取
- 应用状态恢复
- 配置信息获取
**参数验证规则**:
- 键名必须为字符串
- 支持默认值机制
##### saveUserToken - 保存用户令牌
**方法签名**: `saveUserToken(token)`
**参数说明**:
- `token`: string - 用户令牌
**返回值**: void
**使用场景**:
- 用户登录状态管理
- 认证信息存储
- 会话管理
##### getUserToken - 获取用户令牌
**方法签名**: `getUserToken()`
**参数说明**: 无
**返回值**: string - 用户令牌或空字符串
**使用场景**:
- 请求头认证
- 用户状态检查
- 权限验证
##### saveEncryptBody - 设置加密开关
**方法签名**: `saveEncryptBody(bool)`
**参数说明**:
- `bool`: boolean - 加密开关,默认 true
**返回值**: void
**使用场景**:
- 加密功能配置
- 安全策略设置
- 性能权衡
##### getEncryptBody - 获取加密开关
**方法签名**: `getEncryptBody()`
**参数说明**: 无
**返回值**: boolean - 加密开关状态
**使用场景**:
- 加密功能状态检查
- 请求前状态确认
- 安全策略验证
**章节来源**
- [TsStorage.js:31-43](file://src/utils/TsStorage.js#L31-L43)
- [TsStorage.js:9-23](file://src/utils/TsStorage.js#L9-L23)
### TsGlobalConfig 全局配置模块
TsGlobalConfig 模块提供了统一的配置管理功能,支持运行时配置更新。
#### 核心 API 接口
##### getConfig - 获取配置
**方法签名**: `getConfig()`
**参数说明**: 无
**返回值**: object - 当前配置对象
**配置项说明**:
- `base64Key`: string - Base64 编码的密钥,默认值为 "WmdUzPJXbngVNiaSsQrihg=="
- `prefix`: string | function - API 前缀,可以是字符串或函数
- `onHttpError`: function - HTTP 错误回调函数
- `httpParams`: function - HTTP 参数处理器
##### setConfig - 设置配置
**方法签名**: `setConfig(obj)`
**参数说明**:
- `obj`: object - 要合并的配置对象
**返回值**: void
**使用场景**:
- 应用启动时的配置初始化
- 运行时配置动态更新
- 环境相关的配置切换
**参数验证规则**:
- 支持部分配置项的更新
- 使用对象合并的方式更新配置
**章节来源**
- [TsGlobalConfig.js:5-29](file://src/utils/TsGlobalConfig.js#L5-L29)
### TsHttpUtil HTTP 请求工具
TsHttpUtil 模块基于 umi-request 提供了增强的 HTTP 请求功能,集成了加密解密、参数处理、错误处理等功能。
#### 核心 API 接口
##### req - 通用请求方法
**方法签名**: `req(url, options)`
**参数说明**:
- `url`: string - 请求地址
- `options`: object - 请求选项
- `method`: string - HTTP 方法,默认 'GET'
- `params`: object - 查询参数
- `data`: object - 请求体数据
- `headers`: object - 请求头
- `rawResponse`: boolean - 是否返回原始响应
**返回值**: Promise<object> - 处理后的响应数据
**使用场景**:
- 统一的 HTTP 请求入口
- 复杂请求的参数处理
- 响应数据的统一格式化
##### get - GET 请求
**方法签名**: `get(url, params, options)`
**参数说明**:
- `url`: string - 请求地址
- `params`: object - 查询参数,默认 {}
- `options`: object - 请求选项,默认 {}
**返回值**: Promise<object> - 响应数据
**使用场景**:
- 数据获取请求
- 列表查询
- 资源读取
##### post - POST 请求
**方法签名**: `post(url, data, options)`
**参数说明**:
- `url`: string - 请求地址
- `data`: object - 请求体数据,默认 {}
- `options`: object - 请求选项,默认 {}
**返回值**: Promise<object> - 响应数据
**使用场景**:
- 数据创建
- 表单提交
- 资源更新
##### form - 表单提交
**方法签名**: `form(url, data, options)`
**参数说明**:
- `url`: string - 请求地址
- `data`: object - 表单数据,默认 {}
- `options`: object - 请求选项,默认 {}
**返回值**: Promise<object> - 响应数据
**使用场景**:
- 文件上传
- 表单数据提交
- 多部分数据传输
#### HTTP 请求处理流程
```mermaid
sequenceDiagram
participant Client as 客户端
participant HttpUtil as HTTP 工具
participant Config as 配置管理
participant Storage as 存储模块
participant Crypto as 加密模块
participant Request as 网络请求
Client->>HttpUtil : 发送请求
HttpUtil->>Config : 获取配置前缀
Config-->>HttpUtil : 返回前缀
HttpUtil->>HttpUtil : 处理分页参数
HttpUtil->>HttpUtil : 处理相等条件
HttpUtil->>Config : 获取额外参数
Config-->>HttpUtil : 返回额外参数
HttpUtil->>Storage : 获取用户令牌
Storage-->>HttpUtil : 返回令牌
HttpUtil->>Crypto : 加密请求体(可选)
Crypto-->>HttpUtil : 返回加密结果
HttpUtil->>Request : 发送网络请求
Request-->>HttpUtil : 返回响应
HttpUtil->>HttpUtil : 检查响应状态
HttpUtil->>Crypto : 解密响应(可选)
Crypto-->>HttpUtil : 返回解密结果
HttpUtil-->>Client : 返回处理后的数据
```
**图表来源**
- [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134)
- [TsHttpUtil.js:50-91](file://src/https/TsHttpUtil.js#L50-L91)
**章节来源**
- [TsHttpUtil.js:99-171](file://src/https/TsHttpUtil.js#L99-L171)
## 依赖分析
该工具包的依赖关系相对简单,主要依赖于两个外部库和内部模块间的协作。
### 外部依赖
| 依赖名称 | 版本 | 用途 |
|---------|------|------|
| base64-js | 1.5.1 | Base64 编解码 |
| umi-request | 1.4.0 | HTTP 请求封装 |
### 内部模块依赖
```mermaid
graph TD
subgraph "主入口"
Index[index.js]
end
subgraph "工具模块"
Common[TsCommon]
Crypto[TsCrypto]
SM4[TsSM4]
Storage[TsStorage]
Config[TsGlobalConfig]
end
subgraph "HTTP 模块"
HttpUtil[TsHttpUtil]
end
Index --> Common
Index --> Crypto
Index --> SM4
Index --> Storage
Index --> Config
Index --> HttpUtil
HttpUtil --> Storage
HttpUtil --> Common
HttpUtil --> Crypto
HttpUtil --> Config
Crypto --> SM4
Crypto --> Config
Storage --> Common
```
**图表来源**
- [index.js:1-16](file://index.js#L1-L16)
- [TsHttpUtil.js:1-5](file://src/https/TsHttpUtil.js#L1-L5)
### 依赖关系分析
该工具包采用了清晰的模块化设计,各模块职责明确:
1. **TsCommon** 作为基础工具模块,被其他所有模块依赖
2. **TsCrypto** 依赖 **TsSM4****TsGlobalConfig** 进行加密操作
3. **TsStorage** 依赖 **TsCommon** 进行 JSON 解析
4. **TsHttpUtil** 依赖所有其他模块进行完整的 HTTP 请求处理
**章节来源**
- [package.json:19-22](file://package.json#L19-L22)
- [index.js:1-16](file://index.js#L1-L16)
## 性能考虑
在使用该工具包时,需要考虑以下几个方面的性能影响:
### 字符串处理性能
- **URL 参数解析**: 使用正则表达式进行匹配,对于大量参数的 URL 可能影响性能
- **字符串替换**: `replaceAll` 使用全局正则表达式,复杂字符串可能影响性能
- **JSON 解析**: 大对象的序列化和反序列化可能成为性能瓶颈
### 加密解密性能
- **SM4 算法**: 32 轮加密循环,对于大文本加密会有明显的时间开销
- **Base64 编解码**: 大数据量的编码解码会影响性能
- **内存使用**: 加密解密过程中会产生中间缓冲区
### 存储性能
- **localStorage 操作**: 大对象序列化会影响存储性能
- **频繁读写**: 高频的存储操作可能影响页面响应性
### HTTP 请求优化
- **请求合并**: 合理设计 API 接口,避免不必要的请求
- **缓存策略**: 利用浏览器缓存减少重复请求
- **批量操作**: 将多个小请求合并为批量请求
## 故障排除指南
### 常见问题及解决方案
#### 1. 加密密钥错误
**问题症状**: 加密或解密时报错,提示密钥长度不正确
**解决方案**:
- 确保密钥长度为 16 字节
- 检查 Base64 编码是否正确
- 验证密钥格式符合要求
#### 2. URL 参数解析失败
**问题症状**: `getParamFormUrl` 返回空字符串
**解决方案**:
- 检查 URL 格式是否正确
- 确认参数键名拼写正确
- 验证 URL 中是否包含查询参数
#### 3. JSON 解析异常
**问题症状**: `parseJSON` 抛出异常或返回默认值
**解决方案**:
- 检查 JSON 字符串格式
- 验证字符编码是否正确
- 确认字符串不是 null 或 undefined
#### 4. HTTP 请求失败
**问题症状**: 网络请求返回错误状态
**解决方案**:
- 检查网络连接状态
- 验证 API 地址和参数
- 查看服务器响应状态码
- 检查跨域配置
#### 5. 存储数据丢失
**问题症状**: `get` 方法返回默认值而非预期数据
**解决方案**:
- 检查浏览器存储容量限制
- 验证键名是否一致
- 确认数据格式正确
- 检查浏览器隐私模式设置
### 调试技巧
1. **启用开发模式**: 使用 `isDevelopment()` 检测当前环境
2. **日志输出**: 在关键位置添加调试信息
3. **错误捕获**: 使用 try-catch 包装敏感操作
4. **单元测试**: 为关键函数编写测试用例
**章节来源**
- [TsSM4.js:103-122](file://src/utils/TsSM4.js#L103-L122)
- [TsCommon.js:34-44](file://src/utils/TsCommon.js#L34-L44)
- [TsHttpUtil.js:28-35](file://src/https/TsHttpUtil.js#L28-L35)
## 结论
该通用工具包提供了完整的 JavaScript 工具函数集合,具有以下特点:
### 优势
1. **模块化设计**: 清晰的功能划分,便于维护和扩展
2. **安全性**: 内置加密解密功能,支持敏感数据保护
3. **易用性**: 简洁的 API 设计,易于集成到现有项目
4. **完整性**: 覆盖了 Web 开发中的常见需求
### 使用建议
1. **合理选择加密模式**: 根据安全需求选择合适的加密算法和模式
2. **注意性能影响**: 大数据量处理时要考虑性能开销
3. **错误处理**: 建立完善的错误处理机制
4. **版本兼容**: 关注依赖库的版本更新和兼容性
### 扩展方向
1. **更多加密算法**: 可以添加 AES、RSA 等其他加密算法
2. **缓存机制**: 实现更高效的缓存策略
3. **监控功能**: 添加性能监控和错误追踪
4. **国际化支持**: 支持多语言错误消息
该工具包为 JavaScript 开发提供了坚实的基础工具集,能够有效提升开发效率和代码质量。