Ios 加快加载HTMLSTRING-d内容的WKWebView呈现的策略?

Ios 加快加载HTMLSTRING-d内容的WKWebView呈现的策略?,ios,uiwebview,wkwebview,Ios,Uiwebview,Wkwebview,我一直在尝试在UINavigationController中堆叠wkwebview,作为一种制作比PhoneGap更原生的混合应用程序的方法。它广泛地起作用——当WKWebView点击一个链接时,我钩住decidePolicyForNavigationAction,并用它想要的链接推送一个新的ViewController 但是页面加载很慢。我已经做了我能想到的一切来加速它-它使用loadHTMLString而不是一个请求来确保所有东西都是本地的-我甚至尝试剥离CSS和JS,看看这是否加快了它,但

我一直在尝试在UINavigationController中堆叠wkwebview,作为一种制作比PhoneGap更原生的混合应用程序的方法。它广泛地起作用——当WKWebView点击一个链接时,我钩住decidePolicyForNavigationAction,并用它想要的链接推送一个新的ViewController

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


有人有什么办法来解决这个问题吗?我会尝试预加载视图,只是我不知道用户要点击哪个链接,所以我不知道预加载什么

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

我的方法是少用本地语言,多用网络。 1.制作一个单页应用程序,比如 2.将每个资源(JS、CSS、图形作为Base64)捆绑到一个文件中。 3.将该文件保存到我的Xcode项目,并使用该文件启动应用程序,将baseURL设置为

代码如下:

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没有分页加载。它摸起来很光滑

更新:

WKWebView和UIWebView在第一次运行时都会延迟。使用WKWebView时,它更为可见。我已经实现了一个类来预热web视图来解决这个问题。您可以在此处找到此解决方案的Swift版本:

原始答案:


看起来WKWebView/UIWebView在第一次运行时延迟。我创建了一个简单的类,用于通过预热提高web视图的加载速度。您可以尝试示例项目:(不再可用)

为我创建静态变量以创建WKWebView一次,并预加载它worked@green0range你能告诉我你是怎么做到的吗?@iMinion事实上,我最终没有为WKWebView使用静态变量,因为它带来的麻烦比收益多,我意识到WebView在真实设备上而不是在模拟器上时速度足够快。但是,我没有使用静态变量,而是为WKWebView per view controller创建了一个实例变量,并在viewDidLoad中启动,而且它对我的使用效果很好cases@green0range事实上,我在每个单元格中都有一个带有wkwebview的tableview,点击单元格n,单元格扩展到wkwebview的全部内容,此时有一个延迟n用户可以实际看到以前的内容n然后新的内容加载,如果你能把你的代码粘贴到这里you@iMinion以下是我对另一个问题的回答: