A library that speeds up the loading of Web Pages when using WKWebView.
- References
- Requirements
- Installation
- Usage
- Notes
- Author
Platform | Minimun Swift Version | Installation | Status |
---|---|---|---|
iOS 9.0+ | 5.3 | Cocoapods, Swift Package Manager | Fully Tested |
macOS 10.12+ | 5.3 | Cocoapods, Swift Package Manager | Fully Tested |
pod 'WKWebView_WarmUp', '~> <latest version>'
// Inside Package definition
dependencies: [
.package(url: "https://github.com/eaceto/WKWebView_WarmUp.git", .upToNextMajor(from: "<latest version>"))
]
// Inside Target definition
dependencies: [
"WKWebView_WarmUp"
]
note: warmUp should always be called in the Main Thread.
When you want to speed up the loading of a WebView, perform the following request with the required URL / URLRequest to load.
let url = URL(string: "https://duckduckgo.com")!
WKWebViewHeater.shared.warmUp(with: url)
This call should be done as soon as possible, and before your app makes all the critical calls, so the calls performed by the WKWebViewHeater.
Then, when you want to retrieve the warmed-up WebView, just call
let webView = WKWebViewHeater.shared.dequeue(with: url)!
Warmed-up WebView may have a lifespan. In case the end of life of a WebView happens when it's inside the pool (not yet dequeued), the pool will reload it by calling the warmUp method over the WebView automatically.
let url = URL(string: "https://duckduckgo.com")!
WKWebViewHeater.shared.warmUp(with: url, lifespan: 30.0) //WebView will be automatically reloaded every 30 seconds.
Remember that this WebView's size is Zero! In order to added to your ViewController, use AutoLayout as follows:
// Declare a variable that holds the WebView
private lazy var webView: WKWebView = {
let webView: WKWebView!
webView = WKWebViewHeater.shared.dequeue(url: urlString)
// Set other properties of the WebView
webView.configuration.allowsInlineMediaPlayback = true
webView.translatesAutoresizingMaskIntoConstraints = false
webView.scrollView.alwaysBounceHorizontal = false
return webView
}()
override func viewDidLoad() {
super.viewDidLoad()
// Add the WebView
view.addSubview(webView)
// Set WebView's delegate and props
webView.navigationDelegate = self
// User AutoLayout to set its constraints
let webViewConstraints = [
webView.topAnchor.constraint(equalTo: view.topAnchor),
webView.leftAnchor.constraint(equalTo: view.leftAnchor),
webView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
webView.rightAnchor.constraint(equalTo: view.rightAnchor)
]
NSLayoutConstraint.activate(webViewConstraints)
}
© 2020 Ezequiel (Kimi) Aceto
This project is distributed under MIT License.