- SignalDesk3 hr ago
小程序叫「口袋百宝集」,纯离线,54 个页面。我自己写的,免费,无广告无内购。发在这儿主要是想听批评,不是来求下载的。 起因 本来就是写给自己用的。我要的东西很杂:算房贷、查农历、记两笔账、临时压一张图,偶尔还想找个短点的句子发朋友圈。这些小事单独装个 App 都不值当,我就全做进一个小程序里。数据只存本机也是因为这个——里面有账本和私密笔记,我不想让它们离开手机。 先说离线这块 因为这块最好验证,也最容易被怀疑。 会打进包里的运行时源文件一共 331 个,扫下面这些 API ,全部 0 命中: wx.request wx.uploadFile wx.downloadFile wx.connectSocket wx.cloud wx.serviceMarket 顺带把 wx.login 、wx.getUserProfile 、wx.checkSession 也扫了,同样是 0 。 所以没有后端、没有云开发、没有账号体系。记账、待办、密码笔记、日记只写 wx.storage ,不出本机。农历和节气用的是内置的农历库,不调任何日期接口。二维码、条形码都是本地算出来的。 内容也全在包里:解梦 3000 多条词条按 10 类拆文件,文案素材 60 条,心理测试 7 套题,笑话 24 条,谜语 29 条,歇后语 30 条,绕口令 33 条。 2MB 主包逼出来的几个决定 主包 2MB 是硬上限,这个数比我想的更早咬人。 第一次上传直接被拒,报 main package source size 11183KB exceed max limit 2048KB 。我以为是依赖装错了,查了半天才发现是 packOptions.ignore 里写的 .png / .jpg 这种 glob 只匹配项目根目录,不往下递归 。我那几张设计稿放在 assets 的子目录里,一条规则都没命中,整个打包进去。挪走就正常了。 第二件事,分包之间不能互相 require 。我一开始把 rng 和音效两个模块放在分包里,结果 text 分包的编码工具要生成 UUID ,也得用 rng ,就引不到了。最后只能把这类公共模块全部上提到主包,让各个分包各自引主包。为了不改老的引用,原来那个路径留成一个转出口文件,只写一行 require 。音效模块也是这么被拉到主包的。 第三件事,几千条数据不能放主包。解梦和农历两个分包加起来 2.2MB 出头,占全包七成,主包反而压到 169,235 B 。解梦那 3000 多条不可能是手打的,做法是维护一份种子文件加一个生成器脚本,批量跑出来之后先校验,主要查新词条会不会跟已有的词和别名撞车,过了才倒进数据目录。扩量就改种子重跑。 几个不太常见的选择 全程不让用 Math.random(),需要随机的地方一律注入一个可复现的 rng ( xorshift32 )。理由很实际:随机的东西没法写断言。所以转盘抽什么、骰子掷几点、抛硬币正反面,测试里都能用固定种子复现出来,出了问题能回放。 音效是 WebAudio 现场合成的,零音频文件。木鱼的敲击、硬币落桌、转盘的刻度声和最后那声中奖,全是振荡器加包络算出来的。这样包体积不涨,也不请求任何资源。连击的时候还要防削波,敲太快会自动把峰值打折。 转盘的刻度声费了点劲。每根扇区边界被指针跨过的时候响一下,但转速是变速的(一条 cubic-bezier 缓动),刻度又密,JS 里挨个 setTimeout 一定会飘。最后的做法是用跟 wxss 里完全相同的缓动曲线去反解每个边界被跨过的时刻,直接算出相邻两声之间的间隔,再交给一条时间轴排。间隔还刻意不取整,取整会把几十段的误差累到十几毫秒。 汉字转拼音的字典是自动生成的,不是手抄的。基本区汉字按码位偏移存最常用读音,再单独配一份常用多音词组表,查的时候先做最长词组匹配、匹配不到再逐字兜底。所以「的士」这种能查对,但整句的分词没做,多音字只到词这一级,页面上也写明了要自己核对。 编码工具里手写了 MD5 / SHA-1 / SHA-256 ,零依赖。MD5 那张 K 表是按 floor(|sin(i+1)| · 2^32) 现算的,不手抄常量表。写完跟 Node 的 crypto 对拍了 16 组输入,专门覆盖分块边界那几档。 测试是 Jest ,47 套 857 条。 还有一次审核 提审被驳回两次,理由都是运营规范 3.2 条的 UGC 内容安全,指向 security.msgSecCheck ,点名的是图片类功能。 这个产品没有 UGC 。用户选一张图,本地压缩,存回自己相册,全程不上传、不分享,也没有评论区。全仓连一个网络请求都没有。 第一次的处理是给图片页补「仅本机处理」的显式声明,同步改用户协议和后台隐私指引里的权限用途。第二次驳回了具体的图片压缩功能。 最后整体下线了图片工具箱:app.json 里摘掉注册,packOptions.ignore 排掉目录,提审版本只留二维码生成。image 分包从 111,044 B 降到 93,924 B 。 说不上什么感受,就是有点可惜,那功能我自己平时也在用。 局限 提前说清楚,比被人指出来强: 只能在微信里用,没有独立 App 数据只存本机,换手机或清缓存就没了。这是设计取舍不是 bug ,后面再考虑上服务器 不联网的代价是内容没法热更新,加一条词条也得重新发版 wx.storage 容量有限,不适合塞大量数据 房贷、个税、退休、安全期这些是估算,结果仅供参考,站内每条都挂了免责声明 想问的 两个分包吃掉全包七成体积,这种数据型分包还有没有更省的做法 分包之间不能互相 require 这条,除了往主包上提,还有别的组织方式吗 手写摘要算法这种事,你们项目里允许吗,还是宁可多一个依赖 欢迎拍。
- 情报分类:服务器与云资源
- 分类依据:内容涉及服务器、云资源或网络线路
- 信息来源:服务器 / V2EX
- 发布时间:2026/10/9 14:39:43
- No replies yet