Iphoneサファリはコンテンツをキャッシュするので、後でページをロードするときの速度がデスクトップブラウザーのようにはるかに速くなります。たとえば、モバイルGmailのWebページを例にとると、最初の読み込みはかなり遅くなります(5〜10秒)。しかし、タブを閉じてページを再び開くと、非常に高速(1秒)です。
ただし、アプリのUIWebViewを介してコンテンツを読み込む場合、この動作は同じではありません。一部の設定が不足していますか?自分でコンテンツを保存する手間をかけずに、UIWebViewにコンテンツを自動的にキャッシュさせるにはどうすればよいですか?
キーは次のとおりです: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];
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コンテンツに更新がない場合は、キャッシュ(ローカルストレージ)からロードします。
このディスカッションスレッド に基づくと、UIWebView
を使用してOSレベルのキャッシュを実行することはできないようです。経験に基づいて、iPhone OSデバイスのSafariがそのWebページをキャッシュしないことに気付きました(たとえば、Safariで[戻る]ボタンを押しても、古いページがキャッシュからリロードされません)。
ページをドキュメントフォルダーにキャッシュするアプリをいくつか実行してから、新しいWebページを読み込む前に、キャッシュされた&Webページのタイムスタンプを比較しました。したがって、基本的なフローは次のとおりです。
if (fileIsInCache)
if (cacheFileDate > webFileDate)
getCachedFile
else
getFileFromWeb
saveFileToCache
else
getFileFromWeb
saveFileToCache
stuffFileIntoUIView
maybeReduceCache
ヘッダーを取得するにはまだウェブにアクセスする必要がありますが、通常はページ全体、画像、ファイル全体をダウンロードするよりもはるかに高速です。