Set cache to files in Firebase Storage

前端 未结 5 889
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-18 18:57

I have a PWA running on Firebase. My image files are hosted on the Firebase Storage. I\'ve noticed my browser doesn\'t save cache for files loaded from the storage system. T

相关标签:
5条回答
  • 2020-12-18 19:00

    Use Serviceworker for that.

    You can save the urls without the token in cache and fetch them later.

    This way changes in tokens will not affect you caching.

    To cache without token, use something like

    cacheUrl = url.origin + url.pathname.substr(0, url.pathname.length - urlPath.length) + urlPath;
    

    and then cache.put(cacheUrl, response);

    0 讨论(0)
  • 2020-12-18 19:05

    Putting the pieces together for any future references here

    First,

    // Create file metadata to update
    var newMetadata = {
      cacheControl: 'public,max-age=4000',
    }
    

    Then,

    storageRef.put(file, newMetadata)
    
    
    0 讨论(0)
  • 2020-12-18 19:13

    To complement the answer, you can also use a service worker, maybe with workbox, with a cacheFirst strategy to cache all images into the user browser. Then, after first cache, the images will be load from local cache first.

    If there's no cache, then the images will be requested from Firebase Storage, where the images can also be cached if you specified the cacheControl property in file metadata or if you is using Firebase Hosting with custom header Cache-Control for images.

    0 讨论(0)
  • 2020-12-18 19:15

    cacheControl for Storage : https://firebase.google.com/docs/reference/js/firebase.storage.SettableMetadata#cacheControl


    You'll have better serving with Hosting, and deployment with the firebase CLI is extremely simple. I think by default the Cache-Control on images in Hosting is 2 hours, and you can increase it globally with the .json.

    https://firebase.google.com/docs/hosting/full-config#headers

    Hosting can scale your site and move it to different edge nodes closer to where the demand is. Storage is limited to buckets, but you can specify a bucket for Europe, one for China, on for North America, etc..

    Storage is better for user file uploads and Hosting was for static content (although they are rolling out dynamic Hosting with cloud functions I think)

    0 讨论(0)
  • 2020-12-18 19:23

    storageRef.updateMetadata(yourMetadata) might be the solution you need.

    https://firebase.google.com/docs/storage/web/file-metadata#update_file_metadata

    or

    storageRef.put(file, yourMetadata)

    https://firebase.google.com/docs/storage/web/upload-files#upload_files

    0 讨论(0)
提交回复
热议问题