簡體   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