IOS app 提交到appstore审核的时候,有的时候并不能保证网络一直通畅,页面出现卡顿,特别是在打开app的时候请求了很多第三方js库,像百度api,百度统计,腾讯统计,极光推送,jquery,loadingjs等等。如果其中一个库请求网络的时候慢就会导致整个页面渲染慢并且出现卡顿,从而导致appStore审核不通过。所以我们通常为了使页面更加流畅会事先把最新的第三方库先下载到本地文件夹中,把它放到assets/js文件夹下,但是如果每次都是从本地取,快虽然是快了,如果第三方API库的js代码有更新,它是不会主动通知我们引入了js库的使用者的,这个时候如果第三方库改了比较关键的代码,就会导致我们的app Crush 或者 ANR 、或者点击按钮没有反应。所以我们第一次加载了本地的js文件之后还需要在一定时间内例如5秒钟后从远程服务器上取一下最新的js库,取完之后替换本地已经加载到head中的script使它保持最新就能避免因为本地资源js文件不是最新第三方库的代码而导致app崩溃或者无响应。举个列子以百度地图开放平台api web浏览器端为例子:
baiduapi生成地址
<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=xxxxxx"></script>
拿连接生成js
(function(){window.BMAP_PROTOCOL = "https"; window.BMap_loadScriptTime = (new Date).getTime(); document.write('<script type="text/javascript" src="https://api.map.baidu.com/getscript?v=3.0&ak=xxx&services=&t=20200520175020"></script>');})();
安装加载扩展js脚本包
npm install --save load-external-scripts
index.html页面中script脚本配置
<script type="text/javascript" id="loadingBaiduAPI" src="assets/js/baiduapi.js"></script>
设置app启动5秒后执行动态加载替换指定对应ID的script
setTimeout(function() {
loadScript({ src: 'https://api.map.baidu.com/api?v=3.0&ak=xxxxxx', id: 'loadingBaiduAPI' }),
}, 5000)