2014-10-31 49 views
8

我一直在嘗試在UINavigationController中堆疊WKWebViews,以此作爲製作比PhoneGap更本機的混合應用程序的方法。它的工作原理非常廣泛 - 當WKWebView點擊一個鏈接時,我將hook到DecisionPolicyForNavigationAction中,並用它想要的鏈接推送一個新的ViewController。加速WKWebView渲染loadHTMLString-d內容的策略?

但頁面加載緩慢。我已經做了所有我能想到的加速 - 它使用loadHTMLString而不是一個確保一切都是本地的請求 - 我甚至試圖剝離出CSS和JS,看看它是否加快速度,但沒有骰子。它仍然需要至少500毫秒的時間才能在一個簡短的,僅限HTML的本地存儲頁面出現在空白的WKWebView中。我可以從調試中知道延遲不是從磁盤讀取HTML,而是從loadHTMLString()和didFinishNavigation()之間的時間。

有沒有人有任何解決這個問題的策略?我會嘗試預加載視圖,只是我不知道用戶要點擊哪個鏈接,因此我不知道要預加載什麼。

回答

2

臨時答案 - 我有一些成功提前創建下一個視圖,然後使用evaluateJavaScript運行document.body.innerHTML = "content" - 它沒有半秒的延遲。當然,這意味着比我更早創建一個WKWebview,但希望這不是一個性能殺手。

0

我的方法是去少本土和更多的網站。 1.編制單頁面應用程序,如http://m.ftchinese.com/phone.html 2.將每個資源(JS,CSS,Graphics作爲Base64)捆綁到一個文件中。 3.將該文件保存到我的Xcode項目,並使用該文件,啓動應用程序,設置作爲基本URL http://m.ftchinese.com/phone.html

這裏的代碼:

let templatepath = NSBundle.mainBundle().pathForResource("index", ofType: "html")! 
let base = NSURL(string: "http://m.ftchinese.com") 
var s = NSString(contentsOfFile:templatepath, encoding:NSUTF8StringEncoding, error:nil)! 
self.webView!.loadHTMLString(s, baseURL:base) 

這有一些好處:1。 我已經已經在web應用上工作了很多年,所以非常穩定。 2.同樣的方法可以在Android,Windows Phone和Blackberry上使用。 3. SPA沒有分頁加載。感覺非常流暢。

1

看起來像WKWebView/UIWebView延遲第一次運行。我創建了一個簡單的類,用於在熱身時提高Web視圖的加載速度。您可以嘗試示例項目:https://github.com/bernikowich/NSTViewWarmuper

+0

我試過這真的是有用的帖木兒 – 2017-09-15 06:32:51