现在随着大数据的时代到来,很多公司在原有的数据基础上走上智能化道路,根据用户行为数据,通过AI算法、数据分析等相关工具,然后将相关商品或者文章等推荐给用户,就像抖音,头条那样,同一个界面做到千人千面的效果。
在上面的背景前提下,就出来了微界面,可灵活配置,可智能化推荐等功能需求,当时接到这个需求时,思考了下怎么去实现,
我的思考过程:首先管理后台里微界面的搭建以及各组件的封装肯定是H5完成,然后APP端这边最初的想法是用原生的(网页交互不好),但是后期维护很麻烦,因为APP端也要写对应的组件库与管理后台的组件一一对应,这样下来开发成本太高,组件的话要写三套(iOS,安卓,H5),但凡修改一些东西。三端都是需要发布,而且开发时间更长。然后就基本否定了这种实现方式,打算APP端首页加载H5网页去实现,只需要写一套组件,前端与后台约好数据结构,由H5实现界面配制——后台储存数据——APP根据数据结构与H5做好交互即可;
总结上面两种:
第一种:三端各写各的组件库,根据后台返回数据,在对应的位置展示对应的内容。
优点:交互好,用户体验更佳;缺点:开发时间长,灵活性不高;
第二种:H5写一套组件库,APP webView加载,再根据后台返回的数据结构,与H5端做好交互
优点:开发时间比第一种要快,灵活性更高;缺点:交互没有原生的好
两种优缺点对比,第二种更能满足我们的需求,只要做好用户进入首页加载网页这块处理,基本上就完美了;
确定好了方案后(采用第二种)于是就开始考虑APP加载网页,在弱网情况下怎么能更快的展示首页出来,以及无网络的情况下怎么展示首页出来(带数据展示),很多人想着是做缓存,第一次请求过来后做数据缓存,但是如果是第一次打开APP就没网络呢,这种情况下怎么缓存?
其实针对上面的问题,我这边的想法如下:
第一步:H5这边,需要提前放置一份json数据包在本地,这是属于一份默认的数据展示,再数据请求未完成之前,先用本地的数据包去渲染界面,等网络请求数据完成后,再去重新替换本地数据包后,重新渲染界面。
第二步:APP这边,提前放置一套静态界面包在项目中(dist)同时后台提供一个接口下载最新的H5(dist)包(后台这边是压缩包,需要解压以及另存到手机沙盒中)这两个包单独存储,APP启动时会优先去取手机沙盒中的dist包去加载,如果没有的话,就会去加载项目中的dist包加载
这里加载两种数据包的时候也是有一些要注意的地方,我这里就不再具体的谈了,这次主要是写一些我这边的实现的想法,当然不是说我这方法最好,只是给大家提供一个思路,少走一些弯路,如果大家有更好的想法,可以在下面留言,大家一起讨论,一起成长。