iOS H5启动加载优化方案

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

全局的WKwebView待用

方法:

  1. 在客户端刚启动时,就初始化一个全局的WebView待用,并隐藏;
  2. 当用户访问 了WebView时,直接使用这个WebView加载对应网页,并展示。

存在的问题

  1. 额外的内存消耗
  2. 页面间跳转需要清空上一个页面的痕迹,更容易内存泄露

预加载

  1. 在适当的时间节点预加载,然后适当的点显示。让后端和网络不闲等着Webview的初始化
  2. 可以创建WkWebview池,预加载试图可见区域的url预先创建WkWebview池,然后唯一根据标识去取对应的WkWebView

存在的问题

  1. 如果没有获取到url地址的话,无法预先加载地址

客户端代理请求

  1. 看Hmtl的数据是否可以通过APP端请求,然后请求得到的数据传给Html渲染。此方法虽然不能减小WebView初始化时间,但数据请求和WebView初始化可以并行进行,总体的页面加载时间就缩短了;缩短总体的页面加载时间
  2. Html的静态资源包,打包zip到本地,服务器版本号维护,Html页面加载静态包重新定向到本地
  3. 缓存:HTTP 协议缓存请求,离线缓存 manifest,离线数据缓存 localStorage

建立连接/服务器处理

  1. DNS和Connection慢,尽量复用客服端的域名和链接。
  2. 客户端首次打开都会请求api.meituan.com,其DNS将会被系统缓存。
  3. 然而当打开WebView的时候,由于请求了不同的域名,需要重新获取i.meituan.com的IP。
  4. 静态资源同理,最好与客户端的资源域名保持一致。

同步渲染采用chunk编码

  1. 确定静态资源的版本。
  2. 根据用户的请求,去业务API获取数据。

页面框架渲染

  • CSS不会阻止页面继续向下继续。
  • 内联的JS很快执行完成,然后继续解析文档。
  • 然而,当这两部分同时出现的时候,问题就来了。
  • CSS加载阻塞了下面的一段内联JS的执行,而被阻塞的内联JS则阻塞了HTML的解析。
  • 通常情况下,CSS不会阻塞HTML的解析,但如果CSS后面有JS,则会阻塞JS的执行直到CSS加载完成(即便JS是内联的脚本),从而间接阻塞HTML的解析
  • 渲染:JS/CSS优化,加载顺序,服务端渲染模板直出。

优化

  1. CSS的加载会在HTML解析到CSS的标签时开始,所以CSS的标签要尽量靠前。
  2. 但是,CSS链接下面不能有任何的JS标签(包括很简单的内联JS),否则会阻塞HTML的解析。

猜你喜欢

转载自juejin.im/post/7087095891152076807