2014-10-31 11 views
8

Ho sperimentato lo stacking di WKWebViews in un UINavigationController come metodo per creare un'app ibrida più nativa di PhoneGap. Funziona in generale: collego DecisionPolicyForNavigationAction quando WKWebView esegue un collegamento e spinge un nuovo ViewController con il link desiderato.Tattiche per accelerare il rendering di WKWebView del caricoHTMLString-d del contenuto?

Ma il caricamento della pagina è lento. Ho fatto tutto quello che posso pensare per accelerarlo - sta usando loadHTMLString piuttosto che una richiesta per garantire che tutto sia locale - Ho anche provato a togliere il CSS e il JS per vedere se questo accelera, ma niente da fare. Occorrono ancora almeno 500ms per una breve pagina HTML, memorizzata localmente e visualizzata nel WKWebView vuoto. Posso capire dal debug che il ritardo non è nella lettura dell'HTML dal disco, ma nel tempo tra loadHTMLString() e didFinishNavigation().

Qualcuno ha qualche tattica per risolvere questo? Proverò a precaricare la vista, solo che non so quale collegamento l'utente sta per toccare, quindi non so cosa precaricare.

risposta

2

Una risposta provvisoria - Sto avendo un po 'di successo creando la vista successiva in anticipo, quindi utilizzando evaluateJavaScript per eseguire document.body.innerHTML = "content" - non ha il ritardo di mezzo secondo. Ovviamente, significa creare una WKWebview prima di quanto farei altrimenti, ma si spera che non si tratti di un killer delle prestazioni.

0

Il mio modo è di andare meno nativo e più web. 1. Elaborare un'applicazione a singola pagina, ad esempio http://m.ftchinese.com/phone.html 2. Raggruppare tutte le risorse (JS, CSS, Grafica come Base64) in un unico file. 3. Salva il file per il mio progetto Xcode e l'uso che file per avviare l'applicazione, impostando il baseURL come http://m.ftchinese.com/phone.html

Il codice qui:

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) 

Questo ha alcuni vantaggi: 1. ho ha già lavorato all'app Web per molti anni quindi è molto stabile. 2. Lo stesso approccio può essere utilizzato su Android, Windows Phone e Blackberry. 3. SPA non ha caricamento di paginazione. Sembra molto liscia.

1

Sembra che i ritardi di WKWebView/UIWebView al primo avvio. Ho creato una classe semplice per aumentare la velocità di caricamento della visualizzazione Web con il riscaldamento. Puoi provare il progetto di esempio: https://github.com/bernikowich/NSTViewWarmuper

+0

Ho provato questo è davvero utile Timur –

Problemi correlati