2010-01-06 14 views
25

Ich entwickle eine App, die Webseiten (vollständig) zusammen mit ihren CSS-Dateien und Bildern zwischenspeichern muss, nachdem der gesamte HTML-Code der Seite gespeichert wurde mit der HTML-Datei).iPhone UIWebView langsames Laden in lokale HTML-Dateien

Während die HTML-Datei offline angezeigt wird, dauert es UIWebView lange, um die Seite zu laden, da ich bereits offline bin und die Datei mit CSS und Bildern auf der Festplatte liegt.

ich diesen Code bin mit der Datei zu laden:

NSData *htmlData = [NSData dataWithContentsOfFile:htmlFilePath]; 
    [wView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:self.htmlFolderPath isDirectory:YES]]; 

Gibt es andere Mittel, um die Datei auf den UIWebView laden, die es schneller geladen werden können?

P. S: es lädt sehr schnell auf Simulator (offline) aber auf dem Gerät dauert es eine lange Zeit (unter Berücksichtigung seine eine bereits offline im Cache-Datei)

Vielen Dank für Hilfe.

+1

Sind diese großen Webseiten? Auf welche Art von Gerät laden Sie? Denken Sie daran, dass viele WebKit-Funktionen sowohl CPU- als auch Speicher-gebunden sind und nicht nur Verbindungen; Wie ist die Geschwindigkeitsdifferenz im Vergleich zum Laden? –

+0

ja sie sind ein bisschen groß, aber sie sind offline (lokal auf der Platte) es gibt keine Internetverbindung beteiligt ich lade sie auf dem iPhone 3G –

+1

Wie Ben sagte, gibt es eine Verarbeitungszeit ungleich Null beim Rendern eines Webs Seite. Das iPhone 3G hat einen viel, viel langsameren Prozessor als Ihr Desktop-Mac. Haben Sie versucht, diese Seiten auf einem lokalen Webserver zu speichern und über Mobile Safari über WiFi zu laden? –

Antwort

3

Da dies wahrscheinlich nur Zeit braucht, da es die Seite analysieren und rendern muss, können Sie das UIWebView im Hintergrund starten; als Unteransicht hinzugefügt, aber nicht sichtbar.

Vielleicht ist das UIWebView schlau genug zu wissen, dass es nichts zu tun braucht, aber ich vermute, dass zumindest HTML und CSS Parsing sofort erledigt ist.

Wenn es nichts tut, ohne sichtbar zu sein, verkleinern Sie die Größe auf 1x1 und setzen Sie die Opazität = 0, und setzen Sie dieses Pixel an eine Stelle, an der es die Touch-Ereignisbehandlung nicht stören kann.

Nicht perfekt, aber es kann funktionieren.

0

Ich kann Ihnen eine Idee über alternative Möglichkeiten zum Laden von HTML aus Datei in das UIWebView geben. Ein kleines Projekt, das ich habe verwendet Objective-C als reinen Wrapper für UIWebView

Das Projekt hier ist, aber der Hauptcode ist unten: http://github.com/robb1e/iWeb

- (void)viewDidLoad { 
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html" inDirectory:@"."]]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 
    [super viewDidLoad]; 
} 

ich auch Möglichkeiten zur Verbesserung der Erkundung wahrgenommene Leistung durch Zeigen eines Bildes, während das DOM sich vorbereitet. Einige Antworten, die ich gehabt habe sind hier:

Displaying a background image on UIWebView

6

Sind Ihre Lösung tatsächlich Cache andere Dinge als die HTML-Datei, also Bilder, CSS, etc, und erneutes Verknüpfen sie in der HTML-Seite? Ich vermute, dass Sie die HTML-Seite und externe Ressourcen herunterladen und zwischenspeichern, dann lädt das UIWebView dieses HTML und geht immer noch aus, um die externen Ressourcen zu laden. Das würde die schnelle Leistung auf dem Simulator und die langsamere Leistung auf dem Gerät erklären.

Hier ist eine Bibliothek entwickelt, um genau das zu tun, was Sie versuchen zu tun: ASIWebPageRequest.

Es sollte auch darauf hingewiesen werden, dass es einfach ein Fall von Disk-E/A-Engpässen sein könnte. Ich weiß, dass ich in meinem Projekt große Bilder in einer Übersichtsansicht geladen habe, und selbst nachdem sie zwischengespeichert wurden, bemerkte ich ziemlich viel Verzögerung, wenn ich sie von der Festplatte entfernte, weil sie so groß waren.

+1

Würde es Ihnen etwas ausmachen, Ihren Beitrag hier noch einmal zu lesen und zu klären. Ich lese es einige Male und kann nicht wirklich verstehen, was Sie im ersten Absatz sagen wollen. Die Verbindung wird jedoch sehr geschätzt. – Josh

1

Ich bin mir fast sicher, dass Sie das nie schaffen werden. Das UIWebView benötigt nur etwas Zeit, um Ihre Webseite zu bearbeiten, auch wenn es sich um eine lokale Seite handelt.

In diesem Sinne können Sie versuchen, die Seite vor dem Anzeigen zu laden. Wenn Sie es beispielsweise anzeigen, nachdem ein Benutzer auf eine Schaltfläche geklickt hat, laden Sie die Seite beim Anzeigen der Schaltfläche vorab, anstatt sie tatsächlich zu drücken. Der Benutzer merkt das langsame Laden nicht, da es im Hintergrund behandelt wird. Wenn der Benutzer den Knopf drückt, ist die Seite bereits geladen.

4

Ich habe festgestellt, bestimmte Arten von CSS kann WebView Rendering zum Stillstand bringen. Zum Beispiel:

body { -webkit-box-shadow:inset 0 0 100px #222; } 

Das funktioniert gut im Simulator, sieht auch gut aus. Aber auf dem Telefon (sogar iPhone 4, iOS 4.2) dauert die Wiedergabe einer einfachen Seite 10 Sekunden.

0

wenn Nur falls jemand das gleiche mit mir passiert ...

hatte ich eine UIWebView, die eine Zeichenfolge HTML und jede Ressource (js und css) wurde lokal gespeichert geladen wurde.

Ich habe konfrontiert, dass das Laden der Inhalte mit Internetverbindung es war eine Art von langsam (1 oder 2 Sekunden zu laden und erscheinen die Webansicht in meinem Controller), aber als ich versuchte, die gleiche Seite ohne Internetverbindung laden, war es schnell, sehr schnell.

Ich habe mich daran erinnert, dass meine HTML-Vorlage hatte dies am Anfang <base href="http://somesite.com" />, die ich verwendet habe, um einige Bilder mit relativen Pfaden in einigen Inhalten zu laden.

Entfernen Sie diese Arbeit als Charme. Das kann dazu führen, dass Ihre Webansicht langsamer geladen wird, auch wenn Sie keinen Verweis auf externe Inhalte in Ihrem HTML haben.

Verwandte Themen