iOS关于html图片原生加载逻辑处理

最近做资讯详情页面的优化,由于资讯详情页面正文内容是后端返回的html,如果图片特别多,尤其是有很多gif图片,那加载的速度非常慢,因此进行优化。

DEMO详见

一. 优化思路

  • 首先将返回的html的图片地址替换为本地图片的默认图,然后用原生的iOS去下载图片,下载成功之后替换掉默认图。

二. 遇到的问题

思路看起来很简单,但这里遇到了访问权限问题,因为webkit是单独的进程,访问当前app的沙盒路径,是需要权限的,这里有三种解决方法。

方法一:

  • 通过http的方式访问沙盒存储的图片,这个可以通过第三方GCDWebServer来实现

方法二:

  • 通过系统方法- (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL(支持iOS9及以上系统), 来声明访问权限。

  • 这里可以在沙盒存储目录下,放置html的文件,然后将返回的html先进行处理,

  • 处理过程如下:首先依据图片url地址去获取md5值,然后依据md5值,去沙盒存储路径判断以该md5值为名称的图片是否存在,如果存在将图片url地址替换为沙盒目录下该md5值为名称的图片地址,如果不存在,则将图片url地址替换为沙盒目录下默认图片地址

  • 然后生成给html的图片标签设置id,id值md5值,然后用原生去下载为缓存的图片,下载成功后,依据id值去替换路径。

  • 然后将处理后的html文本,写入到原先存放的html文件内,然后用webview去加载对应的路径和声明访问权限。

方法三:

  • 通过将沙盒路径下的图片转换为base64编码的数据,去显示。

这里采用的是方法二来处理,因为现在最低支持的系统版本是iOS9

你可能感兴趣的:(iOS关于html图片原生加载逻辑处理)