解决苹果内核加载网页慢的问题
情景
一个H5的页面,里面嵌套在 IOS
中,有它的 wkwebview
进行渲染,这是背景。表现出的问题是,由 IOS
发起请求到最终用户看到页面需要等待特别长的时间,大概6秒到15秒之间。需要排查并解决这个显示慢的问题。
操作过程
IOS
端往浏览器中写入Cookie
。- 浏览器根据
url
地址去请求Oauth2.0
登录。 - 浏览器根据返回的
code
跳转 登录。 - 浏览器端登录后跳转到应用首页。
PS: 其中 浏览器端 指的是 IOS
中的 wkwebview
排查思路
- 是否是
IOS
本身的wkwebview
的问题? - 为什么之前使用
IOS
的uiwebview
没有这个问题? - 是否是
Oauth2.0
业务的问题? - 是否是应用本身的问题?
- 是否是网络问题?
分析问题
wkwebview
访问其他网页不管是https 或者 http 的都能正常访问 证明不是它本身或者配置问题。- 为什么
uiwebview
没有这个问题?
经过试验,发现 uiwebview 本身在访问现有业务确实没有这个问题,当时也不清楚为什么它可以正常访问,就让IOS
开发切换成这个不就好了。结果反馈说用这个不能上架。原来iOS13
开始苹果将UIWebview
列为过期API
。2020年4月起App Store将不再接受使用UIWebView的新App上架、2020年12月起将不再接受使用UIWebView的App更新。 - Oauth2.0 业务在安卓端都能正常访问,故排除。
- 是否是应用本身的问题? 同上。
- 是否上网络问题?
带着这个问题,去网上按照ios 苹果 wkwebview 超时
,发现大多说是wkwebview
302 的坑以及存储分离 balaba的,按照给出的答案试了试 都没有解决问题。
在快要放弃的时候,之前的一个IOS
开发大拿说肯定是https
的问题你们查查。
结果就找到了这篇文章
- ios 访问 Let‘s encrypt 免费证书的 https 很慢
- 部署 Let’s Encrypt 的站点国内首次打开很慢?那是因为 OSCP 域名被墙了
- 微信小程序首次请求慢 Safari浏览器访问慢 pending 10秒 可能是HTTPS证书的锅
结论
看到这里,就会发现是苹果内核安全机制导致的,每次都需要去验证 https的证书,如果不巧,你用的免费的证书,那么他的颁发机构在国外,在有段期间,国内访问都会很慢。
解决问题
找到的原因就解决了,要么更换证书使用国内的颁发的证书,要么在服务器做DNS或者其他优化,来加速访问。
总结
虽然这次的问题不出在前端应用的本身,而且解决方式非常简洁,但是针对于多端联调以及排查思路有了提高。以后对于网络层次方面的问题也更有经验去定位以及解决问题。