haidii
V2EX  ›  微信

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

  •  
  •   haidii · Sep 29 · 399 views

    小程序名称 口袋百宝集

    二维码

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

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

    起因

    起因挺土的。有天想算个房贷,下了个计算器 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 主包限制下还有别的做法吗
    • 哪些工具你觉得该加、哪些该砍

    欢迎拍。

    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   812 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:12 · PVG 06:12 · LAX 15:12 · JFK 18:12
    ♥ Do have faith in what you're doing.