背景
投产发布完成后,生产上时常出现用户访问APP的H5页面仍为旧的资源,需要手动清除缓存后,才能加载最新的H5资源。这样会导致用户无法及时体验到最新的业务功能,而某些H5与服务端强关联的场景,甚至会导致业务功能无法正常进行。
原因分析
Android APP设置webview为默认缓存策略,即默认采用服务器设置的cache-control策略。
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
而APP对应的服务端暂未设置cache-control,通过网上查阅资料,当服务端未设置缓存策略时,APP默认会采用启发式算法:即取响应头的(Date-LastModified)10%作为缓存时间。比如H5资源最新发布时间是2024年3月8号9:00,用户首次访问该H5页面时间是2024年3月8号10:00,那缓存时间则为(1小时*10%)=6分钟,即6分钟内,即使有新资源发布,该用户访问当前页面都是缓存的资源。超过6分钟,缓存时间失效,用户则可以访问到最新的资源。
解决思路
解决前端资源缓存问题,有以下几种方案,经过综合评估,决定采用方案3。缓存方案.png
方案验证
以下是针对现有生产问题的复现,及采用方案3的测试验证结果。可以看出,测试结果均符合预期。缓存测试.png