做了个全离线的微信小程序, 19 个工具入口,零网络请求

haidii 2026-09-29 15:14 1

小程序名称 口袋百宝集


二维码


这个项目断断续续写了一个多月,今天拿出来说说,也想听听技术上的意见。


先说清楚:是我自己做的,免费,没广告也没内购。发在分享创造,主要是想听批评。


起因


起因挺土的。有天想算个房贷,下了个计算器 App ,填完数字点结果,先弹出一个贷款顾问的咨询框。关了又弹。当时就想,一个除法至于吗。


后来翻了翻手机,装着七八个用完一次就再没打开的工具——农历一个、汇率一个、记账一个。每个都几十兆,每个都要注册,每个都有开屏广告。


就想做一个干净的:打开能用,用完就关,别烦我。


做成了什么样


微信小程序,19 个工具入口,一共 43 个页面。主包 6 页,其余拆成 10 个分包。


体积上,主包 110,403 B (约 108 KB ),全包 2,753,302 B 。2MB 主包限制是硬约束,所以截图、设计稿、报告这类非运行时文件全部走 packOptions.ignore 排掉了,不进包。


最想说的是离线这块。也就是没有后端、没有云开发、没有账号体系。账本、待办、密码笔记这些数据只写 wx.storage,不出本机。农历和节气用的是内置农历库,不调任何日期接口。


内容全部打包在本地:解梦 3052 条词条(按 10 类拆文件)、文案素材 60 条、三套心理测试题库( 28 / 25 / 24 题)、笑话 24 条、谜语 29 条、歇后语 30 条。


测试用 Jest ,32 个套件 528 条用例,跑一遍 36 秒。


几个值得说一下的实现


解梦那三千多条不可能是手打的。做法是维护一份种子文件加一个生成器脚本,批量生成后跑校验,主要查新词条会不会跟已有的 word 和 alias 撞车,通过了再倒进数据目录。要扩量就改种子重跑。


心理测试做成了统一引擎。三套题库共用一个出口,支持两种题型(二选一、五级李克特)和三种计分模式(出类型、出画像、出特质分)。16 型那套的配对是四维全反的镜像规则。


还有个小约束是全程禁 Math.random()。需要随机性的地方都注入可复现的 rng ,不然测试没法断言。


踩的坑:被内容安全审核驳回两次


这部分可能是最有分享价值的。


提审被驳回两次,理由都是《微信小程序平台运营规范》 3.2 条的 UGC 内容安全,指向 security.msgSecCheck,点名的都是图片类功能。


问题是这产品压根没有 UGC 。用户选一张图,本地压缩,存回自己相册,全程不上传、不分享,也没有评论区。全仓连一个网络请求都没有。


第一次的处理,是给图片页补了「仅本机处理」的显式声明,同步改了用户协议。
第二次驳回了具体的图片压缩功能。


最后的选择是把图片工具箱整体下线:从 app.json 摘掉注册,packOptions.ignore 里排除目录,提审版本只留二维码生成。image 分包从 111,044 B 降到 93,924 B 。


局限



  • 只能在微信里用,没有独立 App

  • 数据只存本机,换手机或清缓存就没了

  • 不联网的代价是内容没法热更新,加一条词条也得重新发版

  • wx.storage 容量有限,不适合存大量数据

  • 房贷、个税、退休、安全期这些是估算,结果仅供参考


想问的



  • 分包结构还有没有更优解。我拆了 10 个,但边界划得不一定对

  • 几千条文本这种内容型数据,除了打包进包体,在 2MB 主包限制下还有别的做法吗

  • 哪些工具你觉得该加、哪些该砍


欢迎拍。

最新回复 (3)
  • haidii 楼主 09-29 15:37
    1楼
    ![图 1]( https://raw.giteeusercontent.com/billows/images/raw/master/wechat-1.png?metadata=eyJyIjoibWFzdGVyIiwiZnAiOiJ3ZWNoYXQtMS5wbmciLCJ1aWQiOjI1MjgxLCJwaWQiOjUwNTgyMjQ2LCJzdG8iOiJnaXQtc2hhcmRpbmctc3RvLTEwdC0wNTAiLCJycCI6InJlcG9zLzU2Lzc5LzU2NzlhOTc3MDNmYjdlZDk4M2JkMDI3OTcyNjNkYzFkZGM5NmE5ZTYwNjEyNjRhMGNiNWYyMDI0ZjczMzQ0OWUuZ2l0IiwiaXNwIjp0cnVlLCJleHBpcmVfYXQiOjE3OTA2NjgyMDB9&signature=pc_AsojGbBeieO-HnmZ-Adgi8QhdC5RD5oqlJx4uO9U)
  • haidii 楼主 09-29 15:38
    2楼
    ![图 2]( https://raw.giteeusercontent.com/billows/images/raw/master/wechat-2.png?metadata=eyJyIjoibWFzdGVyIiwiZnAiOiJ3ZWNoYXQtMi5wbmciLCJ1aWQiOjI1MjgxLCJwaWQiOjUwNTgyMjQ2LCJzdG8iOiJnaXQtc2hhcmRpbmctc3RvLTEwdC0wNTAiLCJycCI6InJlcG9zLzU2Lzc5LzU2NzlhOTc3MDNmYjdlZDk4M2JkMDI3OTcyNjNkYzFkZGM5NmE5ZTYwNjEyNjRhMGNiNWYyMDI0ZjczMzQ0OWUuZ2l0IiwiaXNwIjp0cnVlLCJleHBpcmVfYXQiOjE3OTA2NjgyMDB9&signature=wmFNQG8bZ06vaNWVLUHzUDhhbQ2J-2TI_yP7TJu8gqc)
  • haidii 楼主 09-29 15:39
    3楼
    ![图 3]( https://raw.giteeusercontent.com/billows/images/raw/master/wechat-3.png?metadata=eyJyIjoibWFzdGVyIiwiZnAiOiJ3ZWNoYXQtMy5wbmciLCJ1aWQiOjI1MjgxLCJwaWQiOjUwNTgyMjQ2LCJzdG8iOiJnaXQtc2hhcmRpbmctc3RvLTEwdC0wNTAiLCJycCI6InJlcG9zLzU2Lzc5LzU2NzlhOTc3MDNmYjdlZDk4M2JkMDI3OTcyNjNkYzFkZGM5NmE5ZTYwNjEyNjRhMGNiNWYyMDI0ZjczMzQ0OWUuZ2l0IiwiaXNwIjp0cnVlLCJleHBpcmVfYXQiOjE3OTA2NjgyMDB9&signature=_je9U60pZyMuUGw_gwAs8Ihk792iF6FbLoZjSq-zNUQ)
* 帖子来源V2EX
返回