小程序的安全合规和性能优化
#小程序
#移动端
#跨端
目录
总结
- 安全合规
- 手机号,身份证号等脱密或加密
- 使用 HTTPS
- 用户授权
- 用于完善会员资料
- 必须说明用途
- 内容安全
- 用户生成内容(UGC)需要审核
- 图片、文字等内容需要做敏感词过滤
- 隐私政策和用户协议、营业资质
- 性能优化
- 启动性能优化
- 代码包体积优化
- 首屏加载优化
- 拆包
- 预加载分包
- 渲染优化
- 避免不必要的渲染
- 长列表优化
- 网络优化
- 请求优化
- 请求合并
- 数据缓存
- 图片懒加载
- 内存优化
- 及时清理不需要的事件监听
- 大对象及时释放
- 请求优化
- 体验优化
- 使用骨架屏提升体验
- 加载状态
- 操作结果反馈z
- 启动性能优化
- 监控与统计
- 性能监控及错误上报
- 启动时间
- 页面切换时间
- 内存占用
- 帧率(FPS)
- 页面访问量
一、安全合规
1. 数据安全
- 敏感信息处理
- 手机号、身份证等敏感信息需要加密存储
- 传输过程中使用 HTTPS
- 本地存储(Storage)中不能保存敏感信息
- 用户授权
- 获取用户信息需要明确告知用途
- 遵循最小权限原则
- 提供取消授权的选项
2. 隐私合规
// 获取用户信息示例
wx.getUserProfile({
desc: '用于完善会员资料', // 必须说明用途
success: (res) => {
// 处理用户信息
}
})
3. 内容安全
- 用户生成内容(UGC)需要审核
- 图片、文字等内容需要做敏感词过滤
- 实现内容举报功能
4. 合规要求
- 隐私政策和用户协议
- 备案信息展示
- 营业资质展示(如有)
二、性能优化
1. 启动性能优化
代码包体积优化
// 1. 及时清理无用代码和资源
// 2. 使用分包加载
{
"subpackages": [
{
"root": "pages/secondary/",
"pages": [
"detail/detail"
]
}
]
}
// 3. 图片资源压缩
// 4. 使用 webpack 压缩
首屏加载优化
- 预加载分包
// app.json
{
"preloadRule": {
"pages/index/index": {
"network": "all",
"packages": ["secondary"]
}
}
}
2. 渲染性能优化
避免不必要的渲染
// 使用 pure 组件
Component({
options: {
pureDataPattern: /^_/ // 指定所有 _ 开头的数据字段为纯数据字段
}
})
// 合理使用 setData
// 错误示例
this.data.list.forEach((item, index) => {
this.setData({
[`list[${index}].checked`]: true
})
})
// 正确示例
const { list } = this.data
list.forEach(item => {
item.checked = true
})
this.setData({ list })
长列表优化
// 使用虚拟列表
<scroll-view>
<view wx:for="{{visibleData}}" wx:key="id">
<!-- 只渲染可视区域的数据 -->
</view>
</scroll-view>
3. 网络优化
请求优化
// 1. 请求合并
// 2. 数据缓存
const cacheKey = 'cache_key'
// 获取数据
function getData() {
const cache = wx.getStorageSync(cacheKey)
if (cache && !isExpired(cache.timestamp)) {
return cache.data
}
// 请求新数据
return requestNewData()
}
// 3. 图片懒加载
<image lazy-load src="{{imageUrl}}" />
4. 内存优化
// 1. 及时清理不需要的事件监听
Page({
onLoad() {
wx.onAccelerometerChange(this.handleAccelerometer)
},
onUnload() {
wx.stopAccelerometer() // 记得清理
}
})
// 2. 大对象及时释放
// 3. 避免内存泄漏
5. 体验优化
骨架屏
// 1. 使用骨架屏提升体验
<view wx:if="{{loading}}">
<view class="skeleton-item"></view>
</view>
状态反馈
// 加载状态
wx.showLoading({
title: '加载中'
})
// 操作结果反馈
wx.showToast({
title: '操作成功',
icon: 'success'
})
三、监控与统计
1. 性能监控及错误上报
- 启动时间
- 页面切换时间
- 内存占用
- 帧率(FPS)
// 1. 使用小程序性能监控
const performance = wx.getPerformance()
const observer = performance.createObserver((entryList) => {
console.log(entryList.getEntries())
})
// 2. 内存查看器
wx.getMemoryInfo()
// 3. 错误监控
wx.onError(function(err) {
// 上报错误
})
2. 数据统计
- 页面访问量
- 用户行为跟踪
- 性能指标收集
四、最佳实践建议
- 开发规范
- 统一的代码风格
- 组件化开发
- 模块化管理
- 测试
- 功能测试
- 性能测试
- 兼容性测试
- 持续优化
- 定期代码审查
- 性能指标监控
- 用户反馈收集
- 文档维护
- API 文档
- 组件文档
- 更新日志