請求策略
- 場景一
當(dāng)用戶進(jìn)入產(chǎn)品列表頁面后,相信大部分程序開發(fā)者做法是用tableview來展示,產(chǎn)品數(shù)據(jù)通過網(wǎng)絡(luò)接口請求從服務(wù)器獲取,再刷新tableview。偷偷告訴您一個(gè)秘密:其實(shí)我也是這么干的。
如果用戶退出產(chǎn)品列表,再次進(jìn)入這個(gè)產(chǎn)品列表呢,是重復(fù)上面和操作嗎?如果是,在網(wǎng)絡(luò)不是很好的情況下,先看到空白頁面,得等待一點(diǎn)時(shí)間才能正常使用,有沒有辦法提升一下用戶體驗(yàn)?zāi)兀?/li> - 場景二
還是上述過程,當(dāng)用戶多次進(jìn)入產(chǎn)品列表與退出產(chǎn)品列表的時(shí)間較短(甚至只有十幾秒到幾秒時(shí)間),有沒有辦法幫用戶省點(diǎn)流量呢?
為了提升App的用戶體驗(yàn),數(shù)據(jù)緩存 + 網(wǎng)絡(luò)接口請求策略 可以解決類似這種問題。
其實(shí)我不說,您應(yīng)該已經(jīng)想到具體的實(shí)現(xiàn)方案了。
1、當(dāng)用戶進(jìn)入產(chǎn)品列表時(shí),將請求到的產(chǎn)品數(shù)據(jù)緩存到本地。
2、當(dāng)用戶退出后第二次進(jìn)入時(shí),將緩存的數(shù)據(jù)展示,再加載服務(wù)端數(shù)據(jù),加載完再重新緩存到本地。
3、當(dāng)退出也進(jìn)入的時(shí)間比較短時(shí)可以直接用本地緩存的數(shù)據(jù),不需要再請求網(wǎng)絡(luò)。
在我這框架中實(shí)現(xiàn)這個(gè)策略其實(shí)很簡單,網(wǎng)絡(luò)接口層模塊設(shè)計(jì)中,就可以輕松加入此邏輯。
只需要在PGCacheManager文件添加少許代碼就可以了。
#pragma mark - API請求策略邏輯
- (BOOL)bEnableStrategy:(PGApiType)type
{
BOOL bEnable = YES;
switch(type)
{
case API_TYPE_LOGIN:
{
bEnable = NO;
break;
}
default:
break;
}
return bEnable;
}
- (NSString *)cacheSringWithKey:(NSString *)key
{
NSString *dataString = nil;
NSNumber *timeNumber = [self.allApiKeyTime objectForKey:key];
if(timeNumber)
{
double nTime = [NSDate date].timeIntervalSince1970 - [timeNumber doubleValue];
//時(shí)間間隔大于120秒
if(nTime < 120)
{
dataString = (NSString *)[PGCacheManager getApiCacheStringWithKey:key];
}
else
{
[self.allApiKeyTime setObject:[NSNumber numberWithDouble:[NSDate date].timeIntervalSince1970] forKey:key];
}
}
return dataString;
}
再在網(wǎng)絡(luò)接口的統(tǒng)一入口方法中添加如下代碼:
//需要緩存的接口才做緩存處理
if([self bEnableStrategy:type])
{
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:@(type).stringValue forKey:@"apiType"];
[dic addEntriesFromDictionary:param];
NSString *key = [NSString MD5Encrypt:[NSString jsonStringWithDictionary:dic]];
NSString *dataString = [self cacheSringWithKey:key];
if(dataString)
{
[client parseData:dataString];
return;
}
}
相應(yīng)的數(shù)據(jù)緩存可以參考: 數(shù)據(jù)持久化
#pragma mark -
/**
避免API接口頻繁的調(diào)用。
*/
+ (NSObject *)getApiCacheStringWithKey:(NSString *)key;
/*
緩存接口數(shù)據(jù)
*/
+ (BOOL)cacheApiData:(NSString *)apiString key:(NSString *)szKey;
是不是很簡單!
共同學(xué)習(xí)進(jìn)步!
感謝您的閱讀!