2014-10-31 12 views
8

Bir UINavigationController'da WKWebViews'ı PhoneGap'tan daha doğal olan bir melez uygulama yapma yöntemi olarak istifleme deneyinde bulundum. Genel olarak çalışır - WKWebView bir bağlantıya bastığında, kararınPolicyForNavigationAction içine girer ve yeni ViewController'ı istediği bağlantıya geçirir.WKWebView, loadHTMLString-d içeriğinin oluşturulmasını hızlandıracak taktikleri mi?

Ancak sayfa yükleme yavaş. Bunu hızlandırmak için düşünebildiğim her şeyi yaptım - herşeyin yerel olmasını sağlamak için bir istek yerine loadHTMLString kullanıyor - Hatta bunu hızlandırıp atlatmadığını görmek için CSS ve JS'yi çıkarmayı denedim, ama zar yok. Boş WKWebView'da görünmesi için kısa, yalnızca HTML, yerel olarak saklanan bir sayfa için en az 500ms gerekir. Hata ayıklamadan, gecikmenin diskten HTML'yi okumamasından, ancak loadHTMLString() ve didFinishNavigation() arasındaki süreden anladığını söyleyebilirim.

Bunu düzeltmek için herhangi bir taktiği var mı? Görünümü önceden yüklemeyi denedim, sadece kullanıcının hangi bağlantıya bağlanacağını bilmiyorum, böylece ne önyükleme yapacağımı bilmiyorum.

cevap

2

Geçici bir yanıt - Bir sonraki görüntüyü önceden oluştururken, evaluateJavaScript kullanarak document.body.innerHTML = "content"'u çalıştırıyorum - bu, yarım saniyelik gecikme yok. Elbette, bu, WKWebview'i daha önce yaptığımdan daha önce yaratmak anlamına geliyor, ama umarım bu bir performans katili değildir.

0

Yolum daha az yerel ve daha fazla web gitmektir. 1. http://m.ftchinese.com/phone.html gibi tek bir sayfa uygulaması açın. 2. Her kaynağı (JS, CSS, Grafik olarak Base64) tek bir dosyada toplayın. http://m.ftchinese.com/phone.html

burada kod olarak baseURL ayarı benim Xcode proje dosyasını ve uygulamayı başlatmak için bu dosyayı kullanabilirsiniz 3. Kaydet: 1. Ben ettik:

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) 

Bu, bazı faydaları vardır Zaten web uygulaması üzerinde uzun yıllar çalıştı, bu yüzden çok kararlı. 2. Aynı yaklaşım Android, Windows Phone ve Blackberry'de kullanılabilir. 3. SPA'de boş sayfa yüklemesi yok. Çok pürüzsüz hissediyor.

1

İlk çalıştırmada WKWebView/UIWebView gecikmelerine benziyor. Isınma ile web görünümünün yükleme hızını artırmak için basit bir sınıf oluşturdum. Örnek projeyi deneyebilirsiniz: https://github.com/bernikowich/NSTViewWarmuper

+0

Bunu denedim gerçekten çok yararlı Timur –