WebViewWarmUper
WebViewWarmUper copied to clipboard
Boost WKWebView loading speed
WebViewWarmUper
WKWebView inititalization and first load are very slow. WebViewWarmUper warm-ups WKWebView and UIWebView for faster first load. Download sample project to test it. You can create issue or pull requests if you have any proposals.
Installation
CocoaPods
CocoaPods is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate WebViewWarmUper into your Xcode project using CocoaPods, specify it in your Podfile:
pod 'WebViewWarmUper'
Manually
You can simply copy source files from Classes folder (WebViewWarmuper.swift) to your project.
Usage
Standard
First you should call prepare method, it should be called some time before you want to show your web view. In test app we call this method in func application(_ application: didFinishLaunchingWithOptions: ).
import WebViewWarmUper
WKWebViewWarmUper.shared.prepare()
Then, when you need new web view instance:
import WebViewWarmUper
let webView = WKWebViewWarmUper.shared.dequeue()
Advanced (custom WKWebViewConfiguration)
let customWarmUper = WKWebViewWarmUper { () -> WKWebView in
let configuration = WKWebViewConfiguration()
// Setup configuration.
return WKWebView(frame: .zero, configuration: configuration)
}
// Some time after.
let webView = customWarmUper.dequeue()
Legacy
The latest version written in Objective-C is 1.x.
Performance
Comparison from Example application. We compare func loadHTMLString(_:baseURL:), but WebViewWarmUper will decrease time you spend on initialization too! Environment: iPhone XR, iOS 12.2.
NOTE: Looks like system caches UIWebView instances between runs. First run after install UIWebView loads page 0.2481s, 0.3811s, 0.3841s (Resource.articleWithCss).
Resource.articleWithCss
| Run | WKWebView + Warm-Up | Simple WKWebView | UIWebView + Warm-Up | Simple UIWebView | |
|---|---|---|---|---|---|
| 1 | 0.0331 | 0.0549 | 0.0382 | 0.0462 | |
| 2 | 0.0316 | 0.0886 | 0.0338 | 0.0332 | |
| 3 | 0.0255 | 0.0563 | 0.0307 | 0.0340 | |
| 4 | 0.0388 | 0.0498 | 0.0364 | 0.0292 | |
| 5 | 0.0304 | 0.0368 | 0.0369 | 0.0310 | |
| Ave | 0.0319 | 0.0573 | 0.0352 | 0.0347 | |
| Dif | -45% load time | - | ~ equal load time | - |
Resource.articleWithWidgetAndCss
| Run | WKWebView + Warm-Up | Simple WKWebView | UIWebView + Warm-Up | Simple UIWebView | |
|---|---|---|---|---|---|
| 1 | 0.0473 | 0.0624 | 0.5280 | 1.6593 | |
| 2 | 0.0370 | 0.0804 | 0.0423 | 0.0384 | |
| 3 | 0.0361 | 0.0672 | 0.0393 | 0.0376 | |
| 4 | 0.0438 | 0.0610 | 0.0405 | 0.0400 | |
| 5 | 0.0391 | 0.0646 | 0.0447 | 0.0379 | |
| Ave | 0.0407 | 0.0671 | 0.1390 | 0.3626 | |
| Dif | -40% load time | - | ~= (1st is random) | - |
License
WebViewWarmUper is released under the MIT license. See LICENSE for details.