前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序基础库探究:说说formid生成的实现

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

作者头像
薛定喵君
发布2021-02-24 11:10:40
5120
发布2021-02-24 11:10:40
举报
文章被收录于专栏:薛定喵君薛定喵君

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

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

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

那么formid是如何生成的呢,带着疑问我们最终在视图层基础库中找到了答案,因为这个功能是大家都会使用的,所以这个基础的功能当然会放在基础库里去实现了。

因为小程序的双线程架构设计,基础库分为视图层基础库及逻辑层基础库,因为id是在用户点击画面上的表单时生成,处在视图层的作用范围,所以这个生成要加在webview基础库里比较高效一些,这样子就避免了与逻辑层线程消息通讯的消耗。

然后我们来看代码吧,以_1123949441_351版本的基础库为例,格式化之后大概在8600行左右的位置,我们会发现一个名叫 generateFormId 的函数,函数的核心方法如下:

代码语言:javascript
复制
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的写法也是令人大开眼界。后面有机会再探讨吧。

# 参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 参考资料
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档