2010-01-06 66 views
25

我正在開發一個應用程序,需要在保存頁面的整個HTML(通過鏈接存儲每個文件一起後,需要緩存網頁(完全)以及他們的CSS文件和圖像與HTML文件)。iPhone的UIWebView緩慢加載到本地HTML文件

在離線查看HTML文件時,由於我已經離線,文件在磁盤上以及其CSS和圖像,因此需要很長時間才能加載頁面。

我使用此代碼加載文件:

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

是否有裝載文件到UIWebView能夠更快加載它的任何其他方式?

P.S:它加載速度非常快的模擬器(離線),但在設備上需要很長的時間(考慮到它已經脫機緩存文件)

感謝您的幫助。

+1

這些大型網頁?你正在加載什麼類型的設備?請記住,許多WebKit的性能都是CPU和內存綁定的,不僅僅是連接;與加載「活」相比,速度差如何? – 2010-01-06 12:31:22

+0

是的,他們有點大,但他們離線(本地磁盤) 沒有涉及到互聯網連接 我正在他們的iPhone 3G上加載 – 2010-01-06 13:21:02

+1

正如本說,有一個非零的處理時間涉及渲染一個網絡頁。 iPhone 3G的處理器比臺式機的處理器慢得多。您是否嘗試將這些頁面存儲在本地Web服務器上並通過WiFi通過移動Safari加載它們? – 2010-01-06 15:31:54

回答

3

因爲這可能只是需要時間,因爲它需要解析和渲染頁面,你可以考慮在後臺啓動UIWebView;即作爲子視圖添加,但不可見。

也許UIWebView足夠聰明,知道它不需要做任何事情,但我懷疑至少html和css解析是馬上完成的。

如果它在不可見的情況下不做任何事情,請將大小減小到1x1並將不透明度設置爲0,然後將該像素放置在不會干擾觸摸事件處理的位置。

不完美,但它可能工作。

0

我可以給你一個關於從文件加載HTML到UIWebView的替代方法的想法。一個小項目我有使用的Objective-C作爲一個UIWebView

純包裝該項目是在這裏,但主要的代碼如下: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]; 
} 

我還在探索改進的方法通過在DOM準備好時顯示圖像來感知性能。一些答案我已經在這裏:

Displaying a background image on UIWebView

6

是您的解決方案實際上比HTML文件等緩存的事情,這意味着圖片,CSS等,並在HTML頁面中重新鏈接呢?我猜你正在下載並緩存html頁面和外部資源,然後UIWebView正在加載該html,並且仍然要加載外部資源。這將解釋模擬器上的快速性能和設備上的較慢性能。

這裏是一個圖書館,旨在做你想要做的事情:ASIWebPageRequest

還應該指出,它可能只是磁盤I/O瓶頸的情況。我知道在我的項目中,我在一個可用視圖中加載大圖像,甚至在它們被緩存後,我注意到它們從磁盤上拉出來時有相當多的滯後,因爲它們非常大。

+1

你介意在這裏重新閱讀你的文章並澄清。我讀了很多次,並且無法真正理解你想要在第一段中說什麼。該鏈接非常讚賞。 – Josh 2010-11-19 01:16:40

1

我幾乎可以肯定你永遠無法做到這一點。即使UIWebView是本地頁面,UIWebView也需要一段時間來處理您的網頁。

記住這一點,您可以嘗試在頁面顯示前預加載頁面。例如,如果您在用戶按下按鈕後顯示它,請在顯示按鈕時預先加載頁面,而不是在用戶實際按下按鈕時加載頁面。用戶不會注意到加載緩慢,因爲它正在後臺處理,所以當用戶按下按鈕時,頁面已被加載。

4

我發現某些類型的CSS可以將WebView渲染停下來。例如:

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

這在模擬器中很好用,看起來也不錯。但在手機上(即使是iPhone 4,iOS 4.2),一個簡單的頁面也需要10秒才能完成。

0

只是如果萬一有人發生同樣的,我...

我有被加載字符串html和一切資源(JS和CSS)的本地存儲的一個UIWebView。

我已經面臨加載與互聯網連接的內容,這是一種緩慢(1或2秒加載並出現在我的控制器的web視圖),但當我試圖加載同一頁面沒有互聯網連接它是快速,真快。

我記得我的HTML模板在開始<base href="http://somesite.com" />中有這個,我用它在某些內容中加載了一些圖像的相對路徑。

刪除該作品的魅力。因此,即使您沒有任何對HTML中的extern內容的引用,也可以使Web視圖加載速度變慢。

相關問題