美文网首页让前端飞程序员
Chrome 插件 030RateViewer 0.02 BUG

Chrome 插件 030RateViewer 0.02 BUG

作者: 吃土的小此方 | 来源:发表于2017-02-16 16:24 被阅读0次

    上一篇地址:Chrome 插件 030RateViewer 0.02版更新

    说实话,并没有想到会这么快就更新插件。主要是因为昨天晚上碰巧在12点之后点开了插件,然后发现了数据同步的问题。

    由于逻辑设定是当日期发生变化的时候,会使用$.get来获取最新数据,而其余情况下则会使用缓存着的数据。虽然这么看着是没有什么问题,不过,当2/14日24点之后(2/15 0点之后),如果点开插件的话,此时获取到的数据就会一直使用到2/15日结束。那么问题来了,实际的情况是2/15日0点刚过的汇率其实和2/14日的汇率是相同的(也就是目标网站还没来得及更新数据),从而导致了数据同步不一致的问题,而这个错误的数据又会影响到与前一天的走势,从而失去了插件本身的意义。

    于是,在思考了一天之后。我觉得采用类似于网站session的方式来修复这个问题。在主逻辑中设置一个保存时间(目前先以半小时作为一个时间节点),一旦超过这一保存时间就重新获取一下数据。这样一来,既可以减少请求的次数,也可以做到数据及时的更新。

    
        // 省略上面代码
        chrome.storage.local.get('newData', function(data) {
            // 第一次打开应用时,data.today 为 null 通过 ajax 获取当天汇率并设置
            if (!data.newData) {
                // console.log('new data');
                dataRefresh(URL);
            } else {
                // 当存储的日期不是当天的时候,更新old,并更新汇率的箭头符号
                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();
                    // 为了兼容上一个版本的数据结构,如果不存在updateTime,就设置一个旧的日期,强制更新一次
                    var updateTime = newData.updateTime ? newData.updateTime : new Date(newData.date).getTime();
                    // 当大于session的时间时,重新获取数据,否则就使用储存的数据
                    if ((now - newData.updateTime) > REMAIN_TIME) {
                        dataRefresh(URL);
                    } else {
                        $('.rate-content').html(MSG.INFO_NEWRATE + ': <strong>' + newData.rate + '</strong>');
                        // 设置箭头图标以及对应的颜色
                        $('.arrow-icon').addClass(newData.arrowMark).addClass(newData.arrowColor).attr('data-content', newData.popMsg);
                        $('.arrow-icon').popover();
                    }
                }
            }
        });
     //省略后面代码
    

    现在修改完之后的版本已经发布。可以通过各种神奇的方法从应用商店中下载到。

    当然,这一次的修改也让我发现了又一个可以增加的点,就是设置的修改。类似于数据更新的间隔时间,不用像这么写死在逻辑中,让使用者可以自行设置。看来这个坑是要越挖越深了呢(原计划并没有这么多,都是一路迭代上来的。看来我的MemoryGame的重构又要延后了)。

    相关文章

      网友评论

        本文标题:Chrome 插件 030RateViewer 0.02 BUG

        本文链接:https://www.haomeiwen.com/subject/zyjcwttx.html