【问题标题】:Invalidating cache for backbone index.html on CloudFrontCloudFront 上主干 index.html 的缓存无效
【发布时间】:2013-11-17 01:53:20
【问题描述】:

我将 CloudFront 分配指向我的 BackboneJS 应用程序。这包括 index.html、master.css、master.js。

步骤:

  1. 将 ?v=ID 附加到 index.html 中的 css 和 js 链接
  2. 将 index.html、css、js 文件部署到源站。
  3. 使 index.html 文件无效@CloudFront
  4. 等待 CF 从服务器获取新的 index.html 文件并加载新版本的资产。

部署时,我可以通过在索引文件中应用新的查询字符串来破坏 master.css 和 master.js 缓存。不幸的是,必须手动使 index.html 文件缓存失效——亚马逊称这个过程可能需要 10-15 分钟。

在 CF 上立即将 index.html 文件更改为最新版本的任何提示?

谢谢!

【问题讨论】:

标签: caching backbone.js cdn amazon-cloudfront


【解决方案1】:

根据个人经验,我可以告诉您 CloudFront 失效不会花费那么长时间。因为您的用户可能会长时间打开您的页面,所以无论如何您都需要处理同时运行的应用程序的多个版本。

这是一个使用 AWS CLI 使无效并等待无效传播的 Bash 脚本:

# Invalidates the CloudFront cache,
# waits for invalidation to be propagated.
function invalidate_cache() {
  local invalidation
  local invalidation_id
  local distribution_id=$1
  local status=""

  invalidation=$(aws cloudfront create-invalidation --distribution-id "$distribution_id" --paths '/*')
  invalidation_id=$(jq -r .Invalidation.Id <<< "$invalidation")

  while [[ $status != "Completed" ]]; do
    echo "Waiting for CloudFront invalidation to complete..."
    sleep 1
    status=$(aws cloudfront get-invalidation --distribution-id "$distribution_id" --id "$invalidation_id"| jq -r .Invalidation.Status)
  done
}

如果出于某种原因您总是想确保 index.html 是新鲜的,那么只需让 CloudFront 根本不缓存它。您可以为 /index.html 创建特定的 CloudFront 行为并将生存时间覆盖为零。

【讨论】:

    【解决方案2】:

    使云端缓存失效不是一个耗时的过程。不需要太长时间。不过,您可以有多种方法来监视失效状态。

    一旦云端使缓存失效,您还可以使用 lambda 函数更新下游组件/系统。

    话虽如此,如果需要实时更新 index.html,您可以选择不将其作为云端缓存的一部分。您可能希望在 cloudfront 的行为设置中进行设置。 TTL可以设置为0。

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 2018-02-22
      • 2019-02-22
      • 2019-06-02
      • 2022-01-23
      相关资源
      最近更新 更多