繁体   English   中英

UIWebView VS WKWebView 加载本地html

[英]UIWebView VS WKWebView to load local html

我创建了一个带有 500 p 标记的 html 字符串,其中包含时间戳

我使用UIWebViewWKWebView loadHTMLString:baseURL:来加载它,并且wkWebViewUIWebVIew慢约50% 为什么?

UIWebView:0.1681529879570007
WKWebView:0.3913570046424866

WKWebView 可以更快地显示字符串中的 html。 但是,有一个bug让UIWebView默认速度更快,那就是电话号码检测。

使用以下代码运行 viewController, webView分别是 UIWebView 和 WKWebView 实例,并保持其他所有内容相同,我发现 WKWebView 最多需要 2 秒才能加载,而 UIWebView 几乎立即加载。

webView.loadHTMLString(HtmlStringInstance, baseURL: nil)

到目前为止,我不是唯一一个发现这一点的人:

但是,解决方案很简单:禁用 WKWebView 和 poof 的电话号码检测。 你去吧。

对我来说,创建静态变量以避免多次创建 WKWebView 是有效的。 Objective-C 示例:

- (WKWebView *)webHeaderView
{
    static WKWebView *_webHeaderView = nil;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        if (!_webHeaderView)
        {
            WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
            _webHeaderView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
        }
    });

    return _webHeaderView;
}

WKWebView渲染性能在 WebGL 游戏和运行UIWebView缺乏的复杂 JavaScript 算法的东西中很明显。

您可以在Github 中检查性能。

为了使WKWebView更快,禁用 WKWebView 的数据检测器对我有用。 迅捷版:

let webViewCofig = WKWebViewConfiguration()
webViewCofig.dataDetectorTypes = []
webView = WKWebView(frame: view.frame, configuration: webViewCofig)

要启用特定数据检测器,请在设置 dataDetectorTypes 时将特定类型作为 .address、.link 等传递:

config.dataDetectorTypes = [.address]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM