最近做資訊詳情頁面的優(yōu)化维贺,由于資訊詳情頁面正文內(nèi)容是后端返回的html
它掂,如果圖片特別多,尤其是有很多gif
圖片溯泣,那加載的速度非常慢虐秋,因此進(jìn)行優(yōu)化。
一. 優(yōu)化思路
- 首先將返回的
html
的圖片地址替換為本地圖片的默認(rèn)圖垃沦,然后用原生的iOS
去下載圖片客给,下載成功之后替換掉默認(rèn)圖。
二. 遇到的問題
思路看起來很簡單肢簿,但這里遇到了訪問權(quán)限問題靶剑,因?yàn)?code>webkit是單獨(dú)的進(jìn)程蜻拨,訪問當(dāng)前app
的沙盒路徑,是需要權(quán)限的桩引,這里有三種解決方法缎讼。
方法一:
- 通過
http
的方式訪問沙盒存儲(chǔ)的圖片,這個(gè)可以通過第三方GCDWebServer
來實(shí)現(xiàn)
方法二:
通過系統(tǒng)方法
- (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL
(支持iOS9及以上系統(tǒng)), 來聲明訪問權(quán)限坑匠。這里可以在沙盒存儲(chǔ)目錄下血崭,放置
html
的文件,然后將返回的html
先進(jìn)行處理笛辟,處理過程如下:首先依據(jù)
圖片url
地址去獲取md5值
,然后依據(jù)md5值
功氨,去沙盒存儲(chǔ)路徑判斷以該md5值
為名稱的圖片是否存在,如果存在將圖片url
地址替換為沙盒目錄下該md5值
為名稱的圖片地址手幢,如果不存在捷凄,則將圖片url
地址替換為沙盒目錄下默認(rèn)圖片地址然后生成給
html
的圖片標(biāo)簽設(shè)置id
,id值
為md5值
,然后用原生去下載為緩存的圖片,下載成功后围来,依據(jù)id值
去替換路徑跺涤。然后將處理后的
html
文本,寫入到原先存放的html文件
內(nèi)监透,然后用webview
去加載對(duì)應(yīng)的路徑和聲明訪問權(quán)限桶错。
方法三:
- 通過將沙盒路徑下的圖片轉(zhuǎn)換為
base64
編碼的數(shù)據(jù),去顯示胀蛮。
這里采用的是方法二來處理院刁,因?yàn)楝F(xiàn)在最低支持的系統(tǒng)版本是iOS9
。