[PWA] 18. Clean the photo cache

本文介绍了一种定期清理不再显示于页面上的图片缓存的方法。通过从数据库中获取所有消息并提取需要保留的图片URL,然后检查缓存中的每张图片是否在保留列表内,不在则删除。该方法确保了缓存的有效利用。

We cannot let photo always keep caching new data without clean the old data. If message is not display on the page anymore, we want to clean it. And also every 5 mins we want to clean the photo data.

 

export default function IndexController(container) {
    this._container = container;
    this._postsView = new PostsView(this._container);
    this._toastsView = new ToastsView(this._container);
    this._lostConnectionToast = null;
    this._dbPromise = openDatabase();
    this._registerServiceWorker();
    this._cleanImageCache();

    var indexController = this;

    setInterval(function () {
        indexController._cleanImageCache();
    }, 1000 * 60 * 5);

    this._showCachedMessages().then(function () {
        indexController._openSocket();
    });
}

 

_leanImageCache():

  • First, go to idb, get all the writtrs from the db and get the photos which we want to keep
  • Then open the photo cache and check the url exists in the list, if not then delete it.
IndexController.prototype._cleanImageCache = function () {
    return this._dbPromise.then(function (db) {
        if (!db) return;

        // TODO: open the 'wittr' object store, get all the messages,
        // gather all the photo urls.
        //
        // Open the 'wittr-content-imgs' cache, and delete any entry
        // that you no longer need.
        var photosToKeep = [];
        var tx = db.transaction('wittrs');
        return tx.objectStore('wittrs').getAll()
            .then(function(messages){
                messages.forEach(function(message){
                    if(message.photo){
                        photosToKeep.push(message.photo);
                    }
                });

                return caches.open('wittr-content-imgs');
            })
            .then(function(cache){
                return cache.keys().then(function(requests){
                    requests.forEach(function(request){
                        var url = new URL(request.url);
                        if(!photosToKeep.includes(url.pathname)){
                            cache.delete(request);
                        }
                    })
                })
            });
    });
};

 

转载于:https://www.cnblogs.com/Answer1215/p/5516091.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值