【问题标题】:Can JavaScript be cached if it is in the body tag of an HTML page?如果 JavaScript 在 HTML 页面的 body 标签中,可以缓存它吗?
【发布时间】:2011-04-25 10:01:46
【问题描述】:

我正在阅读这个How to make HTML rendering fast,它说HEAD 标记中的脚本可以被缓存。

BODY 标签中的 JavaScript 可以缓存吗?如果不是,为什么 YUI 建议将脚本放在 body 标签中?

【问题讨论】:

    标签: javascript html caching progressive-enhancement


    【解决方案1】:

    如果 JavaScript 在外部文件中并且 the cache control headers 说它应该被缓存,它将被缓存(并在页面之间重用)。

    如果它嵌入在页面本身中(即在<script></script> 之间而不是在src="..." 的末尾),它可能会被缓存,但前提是整个页面都被缓存并且它不会被重用页面之间。

    如果<script src="..."></script> 在头部或主体中,缓存没有区别。

    【讨论】:

    • +1 可以缓存外部脚本文件,内联脚本将仅作为该页面的一部分进行缓存。
    • 我猜您将缓存(在 HTTP 中)与缓存(编译为字节码)混淆了。很明显
    • @Lothar — 不。上下文没有任何暗示。
    【解决方案2】:

    如果您缓存整个 HTML 页面,代码将被缓存,否则不会。如今,HTML 页面通常是动态的(由脚本和 CGI​​ 生成),因此无法在不牺牲功能的情况下进行缓存。因此,您通常希望将 JS 代码放在外部文件中,然后可以通过为 JS 文件设置 HTTP 缓存头来缓存这些文件。

    大多数情况下,答案是您无法缓存内联到 HTML 代码中的 JavaScript(在 HEAD 部分或其他部分)。要使其可缓存,您需要将其放在外部文件中,但随后浏览器将需要执行额外的 HTTP 请求才能第一次获取 JavaScript。

    【讨论】:

    • 将 javascript 提取到外部文件的另一个好处是能够从不同的域或 CDN 提供它以加快向浏览器的交付速度。
    • 另一个好处是您不必担心 XHTML 转义/双重 XHTML/HTML 转义/隐藏在古老的浏览器中。
    【解决方案3】:

    伙计,我想你可能误解了 Rich 所说的话。 他说把 JavaScript 放到一个外部文件中,然后从头开始链接。

    这与将 JavaScript 放入页面正文中的脚本标记相反。

    如果 JavaScript 仅在该页面上使用,则将 JavaScript 放入页面正文中的脚本标记是合理的。事实上,如果它只使用该页面的一个,将其放入外部文件将不是一种优化。对 JS 文件的附加 GET 请求在 Firefox、Opera、Safari 上几乎是同时进行的,但在 IE6 上不是。原因是 IE6 只有几 (2) 个线程可用于获取文件,而 Firefox 最多有 16 个。这就是为什么为页面特定的代码创建一个单独的文件 将是一个倒退因为它实际上可能会减慢页面加载速度。

    但是,如果您有一个想要在许多页面上使用的通用 JavaScript 文件,那么您绝对应该将它放在一个外部文件中并从头部链接它,因为它会在这些页面中的任何一个第一次被缓存时被缓存。加载,并且当任何其他页面使用它时不需要再次获取它。文件越大,缓存它的优势就越大。

    我认为这就是他要表达的观点。这有帮助吗?

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多