上一篇地址:Chrome 插件 030RateViewer 0.02版更新
說(shuō)實(shí)話(huà)纽绍,并沒(méi)有想到會(huì)這么快就更新插件项玛。主要是因?yàn)樽蛱焱砩吓銮稍?2點(diǎn)之后點(diǎn)開(kāi)了插件摧玫,然后發(fā)現(xiàn)了數(shù)據(jù)同步的問(wèn)題剩膘。
由于邏輯設(shè)定是當(dāng)日期發(fā)生變化的時(shí)候衅斩,會(huì)使用$.get
來(lái)獲取最新數(shù)據(jù),而其余情況下則會(huì)使用緩存著的數(shù)據(jù)怠褐。雖然這么看著是沒(méi)有什么問(wèn)題畏梆,不過(guò),當(dāng)2/14日24點(diǎn)之后(2/15 0點(diǎn)之后)奈懒,如果點(diǎn)開(kāi)插件的話(huà)奠涌,此時(shí)獲取到的數(shù)據(jù)就會(huì)一直使用到2/15日結(jié)束。那么問(wèn)題來(lái)了磷杏,實(shí)際的情況是2/15日0點(diǎn)剛過(guò)的匯率其實(shí)和2/14日的匯率是相同的(也就是目標(biāo)網(wǎng)站還沒(méi)來(lái)得及更新數(shù)據(jù))溜畅,從而導(dǎo)致了數(shù)據(jù)同步不一致的問(wèn)題,而這個(gè)錯(cuò)誤的數(shù)據(jù)又會(huì)影響到與前一天的走勢(shì)极祸,從而失去了插件本身的意義慈格。
于是怠晴,在思考了一天之后。我覺(jué)得采用類(lèi)似于網(wǎng)站session
的方式來(lái)修復(fù)這個(gè)問(wèn)題浴捆。在主邏輯中設(shè)置一個(gè)保存時(shí)間(目前先以半小時(shí)作為一個(gè)時(shí)間節(jié)點(diǎn))蒜田,一旦超過(guò)這一保存時(shí)間就重新獲取一下數(shù)據(jù)。這樣一來(lái)选泻,既可以減少請(qǐng)求的次數(shù)冲粤,也可以做到數(shù)據(jù)及時(shí)的更新。
// 省略上面代碼
chrome.storage.local.get('newData', function(data) {
// 第一次打開(kāi)應(yīng)用時(shí)页眯,data.today 為 null 通過(guò) ajax 獲取當(dāng)天匯率并設(shè)置
if (!data.newData) {
// console.log('new data');
dataRefresh(URL);
} else {
// 當(dāng)存儲(chǔ)的日期不是當(dāng)天的時(shí)候色解,更新old,并更新匯率的箭頭符號(hào)
if (data.newData.date != today) {
chrome.storage.local.set({
'oldData': data.newData
}, function() {
dataRefresh(URL);
});
} else {
var newData = data.newData;
var now = new Date().getTime();
// 為了兼容上一個(gè)版本的數(shù)據(jù)結(jié)構(gòu)餐茵,如果不存在updateTime科阎,就設(shè)置一個(gè)舊的日期,強(qiáng)制更新一次
var updateTime = newData.updateTime ? newData.updateTime : new Date(newData.date).getTime();
// 當(dāng)大于session的時(shí)間時(shí)忿族,重新獲取數(shù)據(jù)锣笨,否則就使用儲(chǔ)存的數(shù)據(jù)
if ((now - newData.updateTime) > REMAIN_TIME) {
dataRefresh(URL);
} else {
$('.rate-content').html(MSG.INFO_NEWRATE + ': <strong>' + newData.rate + '</strong>');
// 設(shè)置箭頭圖標(biāo)以及對(duì)應(yīng)的顏色
$('.arrow-icon').addClass(newData.arrowMark).addClass(newData.arrowColor).attr('data-content', newData.popMsg);
$('.arrow-icon').popover();
}
}
}
});
//省略后面代碼
現(xiàn)在修改完之后的版本已經(jīng)發(fā)布〉琅可以通過(guò)各種神奇的方法從應(yīng)用商店中下載到错英。
當(dāng)然,這一次的修改也讓我發(fā)現(xiàn)了又一個(gè)可以增加的點(diǎn)隆豹,就是設(shè)置的修改椭岩。類(lèi)似于數(shù)據(jù)更新的間隔時(shí)間,不用像這么寫(xiě)死在邏輯中璃赡,讓使用者可以自行設(shè)置判哥。看來(lái)這個(gè)坑是要越挖越深了呢(原計(jì)劃并沒(méi)有這么多碉考,都是一路迭代上來(lái)的塌计。看來(lái)我的MemoryGame的重構(gòu)又要延后了)侯谁。