【问题标题】:Google Chrome Audit says "The following resources are explicitly non-cacheable" on JSF resources from libraryGoogle Chrome 审核在库中的 JSF 资源上说“以下资源是明确不可缓存的”
【发布时间】:2015-09-22 17:53:25
【问题描述】:

我使用 Chrome 的审核功能试图找出我网站中的一些性能瓶颈。我发现了很多关于不可缓存资源的报告。

我对一个包含库中样式表的单页进行了试运行,发现了同样的事情:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html" >
    <h:head>
        <h:outputStylesheet library="default" name="style.css"/> 
    </h:head>
    <h:body>
        <div><h:outputText value="test"/></div>
    </h:body>
</html>

这是审核日志条目:

The following resources are explicitly non-cacheable. Consider making them cacheable if possible:
    style.css.jsf

有趣的是,如果我将它从库中删除,这条消息就会消失。因此,在库中缓存资源似乎存在问题。

有没有办法解决这个问题?

编辑:根据此答案中的一个 cmets,如果在页面上执行正常刷新,可能不会缓存 CSS:Set HTTP headers properly to force caching on JS, CSS and PNG files

可以吗?为什么书签或输入的 URL 不能重新使用缓存的副本?

【问题讨论】:

    标签: css jsf google-chrome-devtools http-caching


    【解决方案1】:

    这是一个错误的错误。

    library 属性将库值添加为查询字符串,另请参阅What is the JSF resource library for and how should it be used? Chrome 审核似乎会惩罚资源 URL 中的 any 查询字符串,即使响应标头和实际浏览器也是如此刷新期间的行为是完全有效的。我刚刚在我自己的 Chrome 上尝试过,我也确实可以看到这个错误错误。

    如果您返回“网络”选项卡,那么您必须注意到有效的 ExpiresETagLast-Mofidied 响应标头(并且没有 Cache-Control)并且您必须遵守以下浏览器行为:

    • 在空缓存中的新请求或通过 Ctrl+F5 硬重新加载页面时,您必须看到这些资源的 HTTP 状态为 200。
    • 在导航到引用完全相同的资源的另一个页面时,或再次单击完全相同的(书签)链接,或再次在浏览器的地址栏中按 Enter 时,您必须看到灰色的 HTTP 状态 200 和“来自缓存" 在大小列中。
    • 在通过 F5 或 Ctrl+R 重新加载页面时,您必须在这些资源上看到 HTTP 状态 304(并且浏览器将收到更小的响应 - 只有响应标头,没有正文 - 并继续使用缓存版本)。

    如果这些资源真的像 Chrome 审计中提到的那样“明确不可缓存”,那么您会在每种情况下看到完整的 HTTP 200 响应。

    资源 URL 中的查询字符串通常用作缓存清除技术。当资源在服务器端更新时,开发人员当然希望在客户端强制重新加载。一种方法是重命名资源路径/文件名,但另一种更常见的方法是更改​​查询字符串参数值(通常是表示版本或时间戳的值)。

    尝试更体面的网络性能测试工具。例如。 Y慢。在我的例子中,它没有翻转资源 URL 中的查询字符串。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2010-09-25
    • 2019-01-11
    相关资源
    最近更新 更多