小程序基础库探究:说说formid生成的实现

本文探讨了小程序中已下线的模板消息功能,重点分析了formId的生成过程。formId是通过在视图层基础库中结合当前时间戳和随机数生成的一段32位的UUID字符串,用于发送订阅消息。生成方法基于JavaScript,确保了全局唯一性和7天的有效期。基础库中的其他功能和代码实现也令人感兴趣,为开发者提供了更多学习素材。
摘要由CSDN通过智能技术生成

小程序基础库部分功能的探究学习

熟悉小程序的都知道,模板消息于2020年1月10日下线了,官方推荐用户使用订阅消息。现在已经是1202年了,探讨一下一个已经下线的功能的实现应该问题不大吧。

然后之前很多老的小程序发送消息给用户都是使用的模板消息,说到模板消息就不得不提一个叫做formId的东西了,记得当初在公司开发小程序的时候曾经为了获取这个ID基本上在小程序的每个页面都加了伪装的表单去尽可能多的收集用户产生的formid,为了给用户发送提醒消息,煞费苦心,详见之前写的一篇小程序formid埋点

那么formid是如何生成的呢,带着疑问我们最终在视图层基础库中找到了答案,因为这个功能是大家都会使用的,所以这个基础的功能当然会放在基础库里去实现了。
因为小程序的双线程架构设计,基础库分为视图层基础库及逻辑层基础库,因为id是在用户点击画面上的表单时生成,处在视图层的作用范围,所以这个生成要加在webview基础库里比较高效一些,这样子就避免了与逻辑层线程消息通讯的消耗。
然后我们来看代码吧,以2.8.3版本的基础库为例,格式化之后大概在8600行左右的位置,我们会发现一个名叫 generateFormId 的函数,函数的核心方法如下:

return ((i = Date.now()),
            'undefined' != typeof performance &&
              'function' == typeof performance.now &&
              (i += performance.now()),
            'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
              /[xy]/g,
              function (e) {
                var t = (i + 16 * Math.random()) % 16 | 0;
                return (
                  (i = Math.floor(i / 16)),
                  ('x' === e ? t : (3 & t) | 8).toString(16)
                );
              }
            )).replace(/-/g, '');
            var i;

这个大家应该很熟悉了,就是生成唯一uuid的JS代码,所以我们可以得出结论,所说的formid就是结合当前时间随机生成的一串32位uuid字符串。formid只能使用一次且有效期只有7天,所以基础库里基于时间生成的uuid完全可以满足这个需求,可以保证在全球范围的唯一性。
当然基础库里还存在着其它一些有意思的东西,js的写法也是令人大开眼界。后面有机会再探讨吧。

# 参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定喵君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值