你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS 簡單的本地緩存 解決坑流量問題

iOS 簡單的本地緩存 解決坑流量問題

編輯:關於IOS

有一次給一個坑爹的項目救場,裝載之後隨便點幾個頁面,20M流量木有了,坑爹呀。後來發現問題之所在,服務器端沒有縮略圖,所以不管看列表還是點詳情都是大圖,這個問題服務器端做了處理就好了。客戶端的問題很嚴重,就是每次浏覽圖片都要從服務器端下載一次,這不費流量才怪呢,不知道之前那哥哥收了移動多少好處費。不過這種情況普遍存在,我見過很多應用甚至一些所謂的知名網站知名電商也存在這種情況。
 
我當時的解決方案很簡單:服務器端保證圖片不會重名,客戶端根據服務器端返回的文件名判斷本地是否存在該文件,如果有直接打開本地圖片,如果沒有就下載到本地再打開。以下是代碼
 
 
// 下載文件到Documents中並返回路徑
+ (NSString *)saveFileToDocuments:(NSString *)url
{
    NSString *resultFilePath = @"";
    if (url.length > 7) {// 本應用服務器端的域名是7位,所以先判斷url是否正確
        
        
        NSString *destFilePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:[url substringFromIndex:7]]; // 去除域名,組合成本地文件PATH
        NSString *destFolderPath = [destFilePath stringByDeletingLastPathComponent];
        
        // 判斷路徑文件夾是否存在不存在則創建
        if (! [[NSFileManager defaultManager] fileExistsAtPath:destFolderPath]) {
            
            [[NSFileManager defaultManager] createDirectoryAtPath:destFolderPath withIntermediateDirectories:YES attributes:nil error:nil];
        }
        
        // 判斷該文件是否已經下載過
        if ([[NSFileManager defaultManager] fileExistsAtPath:destFilePath]) {
            
            resultFilePath = destFilePath;
        } else {
            
            NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
            if ([imageData writeToFile:destFilePath atomically:YES]) {
                resultFilePath = destFilePath;
            }
        }
    }
    return resultFilePath;
}
 
方法有很多,解決浪費用戶流量才是關鍵問題。作為一個開發人員,不能只想著代碼怎樣好寫怎樣寫,應該考慮考慮怎樣讓用戶好用怎樣做。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved