【问题标题】:Static file cache, Angular2 and deployments静态文件缓存、Angular2 和部署
【发布时间】:2017-12-26 19:58:59
【问题描述】:

我们有一个 Angular 2 客户端,它在 Azure 中的 .NET Core 上运行在一个应用服务下。我们最近在 startup.cs 中添加了以下内容:

app.UseStaticFiles(new StaticFileOptions
        {
            OnPrepareResponse = ctx =>
            {
                const int durationInSeconds = 86400;
                ctx.Context.Response.Headers[HeaderNames.CacheControl] =
                    "public,max-age=" + durationInSeconds;
            }
        });

这会将静态文件(包括各种 bundle.js 文件)缓存 1 天。虽然这给我们带来了性能优势,但我们在部署新版本时遇到了问题。我们显然不能告诉每个用户都尝试 CTRL + F5,但同时,我们需要尽可能长时间地缓存文件。

我还没有找到很多解决方案来处理这个问题。

有共同的策略吗?

【问题讨论】:

    标签: .net azure caching


    【解决方案1】:

    据我所知,asp.net 核心支持缓存破坏。

    缓存破坏是将某种形式的文件版本哈希附加到 JavaScript 和 CSS 文件等资源的文件名的过程。这样做的性能优势是我们可以告诉浏览器无限期地缓存这些文件,而不必担心当文件更改时客户端无法获取最新版本。由于文件内容更改时资源名称会更改,因此始终会下载更新的文件。

    要启用缓存清除,只需将 asp-append-version 属性设置为 true。

    所以我建议你可以在脚本标签中添加 asp-append-version 属性,如下所示。

     <script src="~/js/site.min.js" asp-append-version="true"></script>
    

    然后它会在js文件后面自动添加一个十六进制值。

    如果你改变了js文件,它会改变js路径告诉客户端获取新的js文件。

    更改结果:

    【讨论】:

    • 谢谢,这似乎是可行的方法,但我似乎无法让它工作。我已将这样的属性添加到随机文件中: 但随后当我刷新然后转到文件时,请求 URL 不显示版本。该文件位于 wwwroot 文件夹和我的启动 hyas app.UseStaticFiles();但仍然没有。有什么建议?我们不提供任何来自 .NET Core 的页面,它们都来自 Webpack 生成的 wwwroot 文件夹。
    • 据我所知,如果您不从 .NET Core 提供任何页面,则此属性将不起作用。我建议您可以在 js 文件后面添加版本号。像这样
    猜你喜欢
    • 2019-04-14
    • 2020-07-31
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2014-05-26
    • 2016-05-08
    相关资源
    最近更新 更多