加速WHTWebView渲染loadHTMLString-d内容的策略?

时间:2014-10-31 22:52:46

标签: ios uiwebview wkwebview

我一直在尝试在UINavigationController中堆叠WKWebViews,作为制作比PhoneGap更原生的混合应用程序的方法。它广泛使用 - 当WKWebView访问链接时我挂钩到decisionPolicyForNavigationAction,并推送一个带有它想要的链接的新ViewController。

但页面加载速度很慢。我已经做了我能想到的所有事情来加速它 - 它使用loadHTMLString而不是确保一切都是本地的请求 - 我甚至试图剥离CSS和JS来看看它是否能加速,但没有骰子。对于一个简短的,仅限HTML,本地存储的页面,它仍然需要至少500毫秒才能显示在空的WKWebView中。我可以从调试中看出延迟不是从磁盘读取HTML,而是在loadHTMLString()和didFinishNavigation()之间的时间。

有没有人有任何解决这个问题的策略?我试着预加载视图,只是我不知道用户要点击哪个链接所以我不知道要预加载什么。

3 个答案:

答案 0 :(得分:3)

临时答案 - 我提前创建了下一个视图,然后使用evaluateJavaScript运行document.body.innerHTML = "content" - 它没有半秒延迟。当然,这意味着比我更早地创建一个WKWebview,但希望这不是一个性能杀手。

答案 1 :(得分:2)

<强>更新

WKWebView和UIWebView在首次运行时都会延迟。使用WKWebView时更加明显。我已经实现了一个预热Web视图的类来解决这个问题。您可以在此处找到此解决方案的Swift版本:https://github.com/bernikovich/WebViewWarmUper

原始回答:

首次运行时看起来WKWebView / UIWebView会延迟。我已经创建了一个简单的类来提高Web视图的加载速度和预热。您可以尝试示例项目:https://github.com/bernikovich/NSTViewWarmuper(不再提供)

答案 2 :(得分:0)

我的方式是减少原生和更多的网络。 1.制定单页应用,例如http://m.ftchinese.com/phone.html 2.将每个资源(JS,CSS,Graphics作为Base64)捆绑到一个文件中。 3.将该文件保存到我的Xcode项目并使用该文件启动应用程序,将baseURL设置为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.我已经在网络应用程序上工作了很多年,所以它非常稳定。 2.可以在Android,Windows Phone和Blackberry上使用相同的方法。 3. SPA没有分页加载。感觉非常顺畅。