2009-08-28 14 views
20

私は、iphone safariがコンテンツをキャッシュするので、後で使うページの読み込みがデスクトップブラウザのようにずっと速くなることに気付きました。例えば、モバイルGmailのWebページを見ると、最初の負荷はかなり遅い(5〜10秒)。しかし、タブを閉じてもう一度ページを開くと、非常に速くなります(1秒)。UIWebViewでコンテンツをキャッシュして、後で高速読み込みする方法はありますか?

ただし、アプリでUIWebViewを使用してコンテンツを読み込む場合、この動作は同じではありません。私はいくつかの設定が欠けていますか?コンテンツを自分で保存するという面倒な作業をせずにUIWebViewキャッシュを自動的にキャッシュにするにはどうすればよいですか?

答えて

1

this discussion threadに基づいて、UIWebViewで可能なOSレベルのキャッシュは存在しないように見えます。経験に基づいて私のiPhone OSデバイスのSafariはWebページをキャッシュしていないことに気付きました(Safariの戻るボタンを押しても古いページはキャッシュから読み込まれません)。

+0

キャッシュは、オフライン時に使用されるHTML 5マニフェストでのみ動作します。 – jianhua

21

キーは、次のとおりです。NSURLRequestReturnCacheDataElseLoad

NSData *urlData; 
NSString *baseURLString = @"mysite.com"; 
NSString *urlString = [baseURLString stringByAppendingPathComponent:@"myfile"]; 

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 10.0]; 
NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:nil]; 

if (connection) 
{ 
    urlData = [NSURLConnection sendSynchronousRequest: request]; 

    NSString *htmlString = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 
    [webView loadHTMLString:htmlString baseURL:baseURLString]; 
    [htmlString release]; 
} 

[connection release]; 
+9

iOSのドキュメントでは、NSURLRequestReturnCacheDataElseLoadは、「既存のキャッシュデータを使用して、要求を満たすために、その有効期間または有効期限に関係なく使用する」ことを指定しています。これは、max-ageなどのキャッシュポリシーヘッダーを無視するため、一般的に望むものではありません。だから、これは良い一般的な答えのようには聞こえません。一見最良の選択は "NSURLRequestUseProtocolCachePolicy"ですが、これは何もしないようです。 – Yetanotherjosh

-1

私が新しいWebページをロードする前に、キャッシュされた& Webページのタイムスタンプを比較し、その後、ドキュメントフォルダにページをキャッシュしたアプリのカップルをやりました。だから、基本的な流れは次のとおりです。

if (fileIsInCache) 
    if (cacheFileDate > webFileDate) 
     getCachedFile 
    else 
     getFileFromWeb 
     saveFileToCache 
else 
    getFileFromWeb 
    saveFileToCache 

stuffFileIntoUIView 

maybeReduceCache 

あなたはまだ、ヘッダーを取得するためにウェブをヒットする必要があり、それは一般的に、ページ全体/画像/ファイルをダウンロードするよりもはるかに高速です。

+6

これのサンプルコードがありますか? – Tudorizer

2
NSString *stringurl=[NSString stringWithFormat:@"http://www.google.com"]; 
NSURL *url=[NSURL URLWithString:stringurl]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:15.0]; 
[uiwebview loadRequest:theRequest]; 

これは、URL初めてそして唯一のコンテンツの変更についてを探します..それはキャッシュ(ローカルストレージ)からロードするURLコンテンツには、更新がない場合はロードします。

+0

少し説明できますか? – Miki

+0

最初にURLを読み込んでコンテンツの変更のみを探します。キャッシュコンテンツ(ローカルストレージ)から読み込むURLコンテンツに更新がない場合は、コンテンツの変更のみを探します。 –

+0

ええ、回答は – Miki

関連する問題