2009-08-28 19 views
20

मुझे पता है कि आईफोन सफारी सामग्री को कैश करता है ताकि आपका पृष्ठ बाद में लोड हो सके डेस्कटॉप ब्राउज़र की तरह बहुत तेज हो। तो उदाहरण के लिए मोबाइल जीमेल वेब पेज लें, पहला भार काफी धीमा है (5-10 सेकेंड)। लेकिन अगर मैं टैब बंद करता हूं और पेज को फिर से खोलता हूं, तो यह बहुत तेज़ है (1 सेकंड)।बाद में तेजी से लोड करने के लिए UIWebView में सामग्री कैश कैसे करें?

हालांकि, यदि आप अपने ऐप में UIWebView के माध्यम से सामग्री लोड करते हैं तो यह व्यवहार समान नहीं है। क्या मुझे कुछ सेटिंग्स याद आ रही हैं? मैं UIWebView सामग्री को सहेजने की परेशानी के बिना स्वचालित रूप से सामग्री कैश कैसे कर सकता हूं?

उत्तर

1

पर this discussion thread यह जाहिर होता वहाँ किसी भी ओएस स्तरीय कैशिंग UIWebView साथ संभव नहीं है के आधार पर। अनुभव के आधार पर मैंने देखा है कि मेरे आईफोन ओएस डिवाइस पर सफारी अपने वेब पेजों को कैश नहीं करती है (उदाहरण के लिए, सफारी में बैक बटन मारना कैश से पुराने पेज को पुनः लोड नहीं करता है)।

+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

आईओएस दस्तावेज कहता है कि NSURLRequestReturnCacheDataElseLoad "निर्दिष्ट करता है कि मौजूदा कैश डेटा का उपयोग किसी भी अनुरोध को पूरा करने के लिए किया जाना चाहिए, चाहे उसकी उम्र या समाप्ति तिथि चाहे।" आमतौर पर यह वही नहीं है जो आप चाहते हैं, क्योंकि यह अधिकतम आयु और कैश पॉलिसी हेडर को अनदेखा करता है। तो यह एक अच्छा सामान्य जवाब की तरह नहीं लगता है। प्रतीत होता है कि सबसे अच्छा विकल्प "NSURLRequestUseProtocolCachePolicy" है लेकिन ऐसा कुछ भी नहीं लगता है। – Yetanotherjosh

-1

मैं क्षुधा की एक जोड़ी है कि दस्तावेज़ फ़ोल्डर करने के लिए कैश पृष्ठों, तो नए वेब पेज लोड करने से पहले कैश की गई & वेब पृष्ठों की समय-टिकटों तुलना किया है । तो बुनियादी प्रवाह है:

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]; 

यह एक यूआरएल पहली बार लोड होगा उसके बाद ही सामग्री में परिवर्तन के लिए के लिए लग रहा है .., अगर वहाँ यह कैश (स्थानीय संग्रहण) से लोड होगा यूआरएल सामग्री में कोई अद्यतन है।

+0

क्या आप इसे थोड़ा समझा सकते हैं? – Miki

+0

यह पहली बार यूआरएल लोड करेगा, फिर केवल सामग्री में परिवर्तन की तलाश करेगा .., अगर यूआरएल सामग्री में कोई अपडेट नहीं है तो यह कैश (स्थानीय स्टोरेज) से लोड होगा। –

+0

हाँ, लेकिन उत्तर में यह – Miki

संबंधित मुद्दे