嗨大家 — 我开发 UpAlerts,一个Upwork上的兼职工作提醒app(拥有超过50,000名活跃用户)。 刚刚推送了一版更新,这版主要是一个性能/交互重写,Debug过程有点有趣,于是觉得分享给大家。

HOME FEED 是最严重的一个问题。 每次切换底部导航,滑动屏幕时触发重建,或者关闭模态框时,都会悄悄地重新订阅同样的Firestore流。 导致这个问题的根源是Flutter代码中经常见到的模式:直接将 DatabaseAPI.xxxStream() 传入一个 StreamBuilder内,在 build() 函数中。 看似无害,但每次触发重建时都会构建一个新的流对象,这时候 StreamBuilder.didUpdateWidget 则会拆除并重新订阅流。这也意味着每次都被计费。 解决方案是:在 initState 中缓存流,并将用户资料文档整合到一个全局Cubit中,其他界面都从这里读取数据。 结果是 HOME FEED 的读取次数大约减少了 87%。

Persona Hub 的问题则完全不同 — 每次切換時都需要重行請求网络,但我增加了 30 分钟的缓存,樂觀寫入和持久化选择之后,现在它就變得足够快了。 这样的改进不是為了讓网络跑的更快,而是不要把請求發給网络。

上面还有另一个大改动就是paywall。原来版本是通过一个硬限制的方式来展示付费内容,内容弱于当前。现在的是通过一个7天的免費试用來展示付费内容。初步數據比我期望的要有趣的多 — 試用开始时的转化率比之前买_now 界面要高很多,然而重要的是7天试用后會否转化成付费用户,我还没足够的数据来得出结论。

如有任何问题或者想给我一些新的功能建议也不用犹豫了。