V2EX Mather
 Mather 最近的时间轴更新
Mather

Mather

V2EX 第 176453 号会员,加入于 2016-06-08 01:56:47 +08:00
Mather 最近回复了
2022-11-25 12:57:37 +08:00
回复了 karott7 创建的主题 程序员 做 App + H5 混合应用的请进,想听听看看
@july1995
Android 的 webview 实现,使用腾讯浏览服务( X5 内核),有专门的 TBS Studio 工具能帮助开发者分析和优化网页的设计,主要功能有网页 Inspector 调试,网页性能分析等。

iOS 端在打包 APP 时候,开启调试模式,使用 Mac Safari 进行联机调试,具体可百度搜索“safari 调试 webview”。

--------------------------

参考资料
腾讯浏览服务: https://x5.tencent.com/
TBS Studio: https://x5.tencent.com/tbs/guide/debug/season1.html
2022-11-25 12:11:39 +08:00
回复了 karott7 创建的主题 程序员 做 App + H5 混合应用的请进,想听听看看
利益相关,暂不能透露具体是哪款 APP 。

先说说背景:
项目因为原生实现某种功能难度较大,加上投入、历史遗留等其他因素限制,选择了“App + H5 ”混合应用的混合式方案对 APP 中的业务实现进行改造升级。改造项目进行时,对这个主题做了思考。

项目经过两年的几次迭代,分别试过楼主所说的两种方案:
“webview + http 缓存”
“离线包”

上面两种方案,我们在日活跃 5k 左右的项目上实验了两年左右。
最后因为“内容可控”和要“快速修改”的要求,和面对“网络劫持”的问题,选择了“离线包”方案。

---------------------------------------------

在项目完成后,我对方案做了技术总结,分析了它们的优劣:

在线服务,“webview + http 缓存” 方案

项目研发时,我们不约而同地想到在线服务的加载形式,即客户端使用域名的形式访问提供加载资源的 HTTP 服务器。

在线服务与 Web 应用程序别无二致,使得我们有更多的时间投入到设计应用生命周期和程序 API 中去。

可是随着项目上线若干个月,在线服务存在的缺陷便暴露出来:

- 没有预加载:首次打开的体验很差,所有文件都要从网络请求
- 缓存不可控:缓存的大小和策略由系统 webview 控制。缓存的清理逻辑不可控,往往加-载缓存几张图片后,重要的 HTML/JS/CSS 缓存就被清除了
- 网络劫持:页面被运营商或其他第三方劫持,将长时间缓存劫持的页面,导致整个功能失效

离线加载,楼主的“离线包”方案

离线加载方式能较好的解决在线服务存在的若干问题。

离线加载方式把功能模块的页面和资源打包在客户端中,Webview 组件加载本地资源文件,避免了联网因素的产生。 亦可将页面文件压缩成离线包,在自定义时机把离线包下载下来,做解压、校验等工作,达到在线更新 /热更新的效果。

- 离线包:前端项目构建产出的文件打包成 zip 格式,并以 ${project}_${date}_${verison}.zip 命名方式交付至客户端,存放在 App 项目内作为资源引用,称为离线包。

- 下载包:与离线包的产出相似,下载包定义为某个离线包的迭代版本,文件将存放于服务器或 CDN 上,便于客户端需要时下载。

---------------------------------------------

总的来说选哪个方案,考虑方案的优劣,最终要从投入产出比来考虑,以及面向立项中主要问题出发,才能解决实际问题。
从生产中解放出来,陪陪你爱的人,做些美好的事情。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5509 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 15ms UTC 07:10 PVG 15:10 LAX 00:10 JFK 03:10
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86