2014-10-31 20 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