作为一个在前端领域摸爬滚打了八年的老开发,我经历过各种技术栈的迭代,也踩过数不清的坑。但最让我崩溃的,莫过于两年前负责的一个旅游类项目 —— 要同时开发微信小程序、iOS 端和安卓端三个版本,代码重复写了三遍不说,改一个按钮颜色都要同步改三个地方,测试小姐姐天天举着 BUG 单追着我跑。直到接触到 FinClip,我才真正实现了「一处写处处跑」的梦想,今天就来跟大家聊聊这个让我少加了无数班的技术重构过程。
那个旅游项目要求我们在三个月内上线三个端,团队里一共四个前端开发,两个写微信小程序,一个搞 iOS H5,一个弄安卓适配。最让人头疼的是用户登录模块:
有一次后端改了用户信息的接口,我们三个前端分别改各自的代码,结果安卓端漏改了一个字段,导致线上 300 多个用户登录失败。运维半夜打电话把我叫醒,那滋味简直酸爽。
项目进行到第二个月,我们就陷入了效率低下的泥潭。一个简单的功能迭代,三个端加起来要写近万行代码,测试也要分别测三遍。有次产品经理说要改一个日期选择器的样式,我们三个前端花了整整两天才改完,结果还因为安卓和 iOS 的渲染差异出了 BUG。当时我就在想,要是有个东西能让小程序脱离微信,在自有 APP 里跑就好了。
到项目中期,我们就发现成本已经严重失控。原本计划三个月的项目,眼看就要延期到五个月,人力成本超支了 60%。老板找我谈话,问我有没有什么技术方案能解决这个问题。我当时虽然心里没底,但还是硬着头皮接下了这个任务,开始疯狂调研各种跨端方案。
我先后调研了 Flutter、React Native 等跨端方案,但都不太满意。Flutter 需要重写代码,学习成本太高;React Native 性能又达不到我们的要求。直到有一天,一个做车载系统的朋友给我推荐了 FinClip,他说:"你试试这个,能让微信小程序直接在自有 APP 里跑。"
我半信半疑地下载了 FinClip 的开发者工具,试着把我们的微信小程序导入进去。让我惊讶的是,几乎没怎么改代码,就在 iOS 模拟器里跑起来了!最让我惊喜的是:
· 不用改一行代码,连wx.requestPayment都能直接用;
· FinClip 的 SDK 只有 1.8MB,比微信小程序的 runtime 还轻;
· 支持离线缓存,弱网环境下也能保持良好的用户体验。
为了确保方案可行,我做了一个小型的技术验证项目。我选了我们项目中最复杂的酒店预订模块,用 FinClip 进行适配。整个过程比我想象的还要顺利:
测试结果让我喜出望外,这个模块在三个端上的表现都很出色,用户体验几乎和原生应用无异。
有了技术验证的成功,我开始着手整个项目的重构。我采用了 "核心功能小程序化,原生功能插件化" 的架构设计:
· 把公共的业务逻辑和 UI 组件放在小程序里,实现一次开发多端复用;
· 把各端的原生功能封装成插件,供小程序调用;
· 设计统一的接口层,屏蔽各端的差异。
这种架构设计让我们既能享受小程序开发的高效率,又能获得原生应用的高性能。
在重构过程中,我们遇到了一些关键技术问题:
我们通过 FinClip 的自定义插件功能,实现了统一的登录体系。具体做法是:
· 开发一个登录插件,封装各端的登录逻辑;
· 小程序通过统一的接口调用登录功能;
· 插件根据运行环境选择合适的登录方式,并返回统一的用户信息。
支付是电商类应用的核心功能,我们需要确保在三个端上都能正常工作。我们的解决方案是:
为了确保应用的性能,我们做了以下优化:
重构过程中,我们的团队协作方式也发生了很大的变化:
这种协作方式的调整,让整个团队的效率得到了显著提升。
重构完成后,我们做了一组数据对比,结果让所有人都感到震撼:
这次重构不仅提升了开发效率,还带来了很多技术价值:
这次重构经历让我对自己的职业发展有了新的认识:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。