2010-10-04 24 views
5

UIWebView'de az miktarda yerel içerik, yaklaşık 3 paragraf metin ve bir adet 100x100px resim görüntülendim. UIWebView, nav denetleyicisine doğru itildiğinde, içerik görüntülenmeden yaklaşık yarım saniye sürer. Bu, simülatörde değil cihazda gerçekleşir. Açıkçası, UIWebView'in içeriği görüntülemeden önce bir miktar çalışma yapması gerekiyor, ancak itilmiş görüntü görünmeden önce bunu yapabileceğimin bir yolu var mı? Bunu kendim yapmakta hiç şansım olmadı.Yerel içeriğe yükleme yaparken UIWebView gecikmesi

ArticleViewController* viewController = [[ArticleViewController alloc] init]; 
viewController.article = article; 
[viewController view]; //touch the view so it gets loaded 
[viewController loadWebView]; //load the web view content 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

Ve burada loadWebView yöntemdir:

-(void)loadWebView { 
    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    NSURL *baseURL = [NSURL fileURLWithPath:path]; 

    NSString* content = article.content; 

    NSString *html = [NSString stringWithFormat:@"\ 
         <html><body style='background-color: transparent'><style type=""text/css"">body {font-family: helvetica; color: black; font-size: 10pt; margin: 10px 10px 10px 10px}</style>\ 
         %@<div style='text-align:center'><a href='13443574_9709e4cf37.jpg?photographer=test' style='-webkit-tap-highlight-color:rgba(0,0,0,0);'><img src='13443574_9709e4cf37.jpg' height='160' width='230'></a></div></body></html>", content]; 
    [self.webView loadHTMLString:html baseURL:baseURL]; 
} 

Daha önce ben viewDidLoad yönteminde [viewController loadWebView] vardı İşte

Ben oluşturma ve UIWebView içeren görünüm denetleyicisi itiyorum nerede ama sonuç aynı görünüyor. ViewController'a basıldığında boş bir ekran, daha sonra içerik yükleme yarım saniye sonra.

Herhangi bir fikrin var mı?

cevap

1

Kullanıcıyı beklemek için gidiyorsun, tek soru şu: web görüntülemeden önce mi, sonra mı? "Daha önce" olarak ayarlanmışsanız, denetleyiciyi oluşturmalı, web görüntüsünü yüklemelisiniz, ancak -webViewDidFinishLoad: temsilci yöntemi tetiklenene kadar onu itmeyi bekleyin. Bunu aldıktan sonra, görünümü itebilirsiniz.

7

Sorun benim UIWebView içerik görüntülenmeden önce

ben de beyaz bir ekran ile yarım saniye ya da daha fazla gecikmeyi fark

Onaylandı. Bu, uygulamanın o çalışması sırasında yalnızca bir UIWebView ilk kullanımında gerçekleşir. UIWebView'in sonraki görünümleri neredeyse anlıkdır. Öyleyse bana ve diğer insanlara, gecikmenin, yüklenmesi ve başlatılması gereken WebKit kütüphaneleri nedeniyle olması gerektiği anlaşılıyor.

Isınma gecikmesini ortadan kaldıramaz

WebKit. Ancak, bu boşluğu "boş ekran" ın rahatsız edici etkisini kullanıcılarınıza azaltmak için uygulamanızın başlangıcına geçebilirsiniz. Buradaki hile, uygulamanızın lansmanı sırasında UIWebView'ı ekran dışındaki sahte bir sayfa ile yüklemektir. Sabit kodlanmış bir dizede en az HTML5 web sayfası oluşturun. Analiz için UIWebView/WebKit tarafından alınan süreyi en aza indirmek için doğru ve geçerli bir HTML5 içeriği kullanıyorum.

Bu teknik, gerçek donanım (iPhone 3GS), sadece iOS Simülatörü üzerinde belirgin iyi çalışıyor. Benim app delegeler ise

didFinishLaunchingWithOptionsmethod, ARC uyumlu kod alt şuna benzer:

… 
[self.window makeKeyAndVisible]; 

// Performance optimization: Warm up the UIWebView widget and its related WebKit libraries. 
// We are choosing the trade-off between (A) a slight delay here during app launch to create and abandon a bogus UIWebView instance, and 
// (B) a flash of white and noticeable delay as the UINavigationController slides in from the right the first UIWebView we display during the app run. 
UIWebView* bogusWebView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
NSString* html = @"<!doctype html><html lang=en><head><meta charset=utf-8><title>blah</title></head><body><p>bogus content</p></body></html>"; 
[bogusWebView loadHTMLString:html baseURL:nil]; // Load the page. 
bogusWebView = nil; // Not really needed, but self-documents that we intend to discard this object. 

return YES; 

Bu teknik kullanıcının sırasında en ama tamamen değil tüm yaklaşık yarım saniyelik gecikme azaltmak gibi görünüyor Ekranda UIWebView ilk görünümü. Gecikmelerin çoğunun WebKit ısınması nedeniyle olduğu sonucuna varıyorum, ancak ekranda bir UIWebView'ın grafiksel olarak sunulmasıyla ilgili bazı genel giderlerin olması gerekiyor. Eğer öyleyse, ekran dışı çalışma ile kalan yükü ortadan kaldıramayız. Ancak yine de, bu teknik ilk gecikmenin en değerini ortadan kaldırır. Dolayısıyla, kullanıcının uygulamamla ilgili ilk izlenimi "yavaş" olmayacak.

+0

TEŞEKKÜRLER !!!!! webkit gerçekten ısınmak gerekiyor –

+0

Bu kabul edilen cevap olmalı –