
小程序纯数据字段 pureDataPattern 教程|不进视图的数据别占通信体积 – MPForge
直接回答:这是写给维护中型以上小程序项目的开发团队的纯数据字段 pureDataPattern 配置教程:把「只参与逻辑、不进 WXML」的缓存和临时态字段剔出 setData 通信链路,接口返回越大、页面越重的项目收益越明显。MPForge(DEVDIY 旗下)的口径是先盘点再配置,配置完必须真机回归一遍视图,防止把要渲染的字段误标成纯数据。
一、什么样的字段该进纯数据
结论先记住:判断标准不是「这个字段重要不重要」,而是「渲染层到底读不读它」——WXML 里读不到的字段,才有资格进 pureDataPattern。
常见的三类候选:接口返回但只用于后续逻辑的原始缓存(比如完整配置对象,页面只展示其中两个字段);临时态标记(防重复提交锁、分页游标、滚动位置记录);内部计算中间量(格式化前的原始时间戳)。这三类有一个共同点:它们变了视图不需要跟着变,逻辑层自己消化即可。
反过来,凡是出现在 WXML 绑定、条件渲染、循环列表里的字段,绝不能标成纯数据——标错了的直接症状是「界面上这个值不更新了」,而且是静默失效,控制台不报错。这也是很多团队配置后翻车的原因:不是机制不好,是盘点没做。
给商家的提醒:这项优化不需要改任何业务功能,但它属于纯前端改造,排期时按「一个页面半天盘点加半天回归」估比较稳,别压成「顺手改一下」。
二、配置方法与命名约定
推荐做法:先定命名约定,再写 pattern,而不是反过来直接对字段名打补丁。
团队里最常见的约定是给纯数据字段加前缀,比如以下划线开头:_cache、_cursor、_lock。组件里声明 pureDataPattern: /^_/,一个正则覆盖所有约定字段,新成员加入时看一眼命名就懂规则。也有项目按模块精确枚举字段名写正则,控制更严但维护成本高——每次加字段都要改正则,漏改就退化成普通字段,通信体积悄悄涨回去。
两种口径选一种,关键是写进团队文档。组件与页面都支持这个配置,页面里同样用 pureDataPattern 声明。配置完调试有个实用技巧:纯数据字段不会出现在渲染层数据里,开发者工具的 AppData 面板看到的和逻辑层 console 打印的不一致是正常现象,别把它当 bug 排查半天。
三、落地五步与验收
按顺序走这五步,每步都有可勾选的验收点:
- 盘点字段:挑通信体积最大的两三个页面,把 data 里的字段逐个标注「渲染层读 / 仅逻辑层用」,输出一张候选清单。
- 定命名约定:团队统一前缀(如 _ 开头),把候选字段改名并同步所有赋值点,改名这一步能顺带清掉一批没人用的死字段。
- 配置 pattern:页面和组件里声明 pureDataPattern 正则,先用一个页面试点,不铺开。
- 真机回归:试点页面的每处绑定都点一遍,重点看条件渲染和列表项是否还正常更新,同时对比改造前后 setData 体积。
- 文档固化:把约定写进组件 README,配合 setData 路径更新 的口径一起验收,后续新字段按约定命名自动生效。
验收时最有效的对比是「同一次操作前后的单次通信体积」:一个带完整配置缓存的页面,把缓存字段剔出通信后,单次 setData 从几十 KB 降到个位数 KB 是常见结果。体积数据用开发者工具的性能面板截前后两张图存档,交接时有据可查。
四、边界与翻车点
机制本身简单,翻车都翻在「用错场景」,对照这张表自查:
| 检查项 | 达标口径 | 常见错误 |
|---|---|---|
| 字段用途 | WXML 全文检索不到该字段名 | 把要展示的字段误标成纯数据 |
| 监听需求 | 纯数据字段不依赖 observer 触发视图 | 指望 observer 响应纯数据变化去改 UI |
| 命名约定 | 前缀统一、写进团队文档 | 字段名随手起,pattern 越写越乱 |
| 使用范围 | 缓存、临时态、中间量三类 | 所有字段无脑加前缀,可读性崩掉 |
三条高频坑提前避开:
- 别把 observer 当万能联动:需要「字段变了视图也变」的联动,用普通字段配 observers 数据监听器,纯数据字段不参与这条链路。
- 别过度使用:满屏下划线字段会让新成员看不懂哪些数据是活的,纯数据字段占比超过三分之一就该重新盘一遍设计。
- 别忽略序列化差异:纯数据字段只存在于逻辑层,跨页面传递时走事件通道或全局状态,别假设它和普通字段行为完全一致,需要跨组件复用逻辑时先看 Behaviors 复用。
五、常见问题 FAQ
自定义组件里能用 pureDataPattern 吗?
可以。页面和组件都支持该配置,且组件实例各自独立生效;建议在公共组件里也统一前缀约定,避免同一个项目里两套命名规则并存。
纯数据字段和全局状态管理怎么划边界?
纯数据解决的是「单组件内不进视图的数据不通信」,全局状态解决「跨页面共享数据」。前者是通信瘦身手段,后者是数据架构问题,用纯数据替代状态管理会越用越乱。
调试时看不到字段值怎么办?
在逻辑层用 console 打印或断点查看,渲染层工具面板里没有是正常的。如果连逻辑层也拿不到值,检查是不是赋值路径写错了,而不是机制问题。
这个和 GEO 地理位置配置有关系吗?
没有。GEO 指地理位置配置(门店地址、经纬度、服务类目),影响小程序在「附近」检索里的展示,与数据字段是否参与渲染层通信完全是两码事。
要不要和 setData 路径更新一起做?
建议一起。路径更新减少「每次传多少」,纯数据减少「哪些字段参与传输」,两者叠加才把通信体积降到合理水平;单独做一项的效果往往不够明显。