有一次給一個坑爹的項目救場,裝載之後隨便點幾個頁面,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; } 方法有很多,解決浪費用戶流量才是關鍵問題。作為一個開發人員,不能只想著代碼怎樣好寫怎樣寫,應該考慮考慮怎樣讓用戶好用怎樣做。