javascript - 在 HTTP/2 上引用或托管 javascript

标签 javascript jquery d3.js http2

对于现代网站,加载 javascript 库(在我的例子中是 jQuery 和 D3)的最佳方式是什么?

假设:

  • 每个人都使用 HTTP/2 访问该网站
  • 自托管意味着在 GitHub 上托管(即 bl.ocks )
  • 引用可能意味着:
    • Google对于 jQuery 和 cdnjsD3.org对于D3
    • 用于 jQuery 和 D3 的 cdnjs
    • 用于 jQuery 的 cdnjs 和用于 D3 的 D3.org

由于每个人都在使用 HTTP/2,因此 parallelism argument不再适用(对吗?)。

为了最大限度地提高缓存命中的机会,我认为 Google 是 jQuery 的最佳选择,但他们不提供 D3,因此我必须使用 cdnjs 或 D3.org。两者都使用 cdnjs 有优势吗?

编辑:让我谈谈受众,它是全局性的,因此理想情况下,解决方案可以很好地工作,例如非洲和中国。后者在这里很重要,因为它会阻止对 Google 服务器的访问,这意味着需要本地回退。

受众也不限于 D3 设计师/bl.ocks 用户(如果这与缓存命中率相关)。

最佳答案

使用 CDN 版本可能意味着它已被缓存,因此您可以节省下载另一个副本的时间。但是,如果不是,那么它实际上会减慢您的网站,因为您需要建立到 CDN 网站的连接,包括 DNS 查找、TCP 3 路握手、处理 TCP 慢启动(意味着连接)最初速度很慢,然后进行 TLS 设置(假设是通过 HTTPS),最后请求资源。此后,您再也不会将该 CDN 用于其他任何用途,因此所有设置成本都被浪费了。

对于两个不同的 CDN,此成本加倍。

就个人而言,如果是一两个库,那么我只是出于这个原因自行托管。即使对于 HTTP/1.1 也是如此。

如果您确实想要 CDN 的好处,请考虑将整个站点置于 Cloudfare 等 CDN 后面,而不仅仅是从 CDN 加载一两个库。对于您所说的全局服务来说,这可能不是一个坏主意。

关于javascript - 在 HTTP/2 上引用或托管 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46317215/

相关文章:

jquery - 如何在将数据附加到表tbody时放置动画效果

d3.js - 如何将 d3.arc 嵌套在另一个中?

javascript - react-grid-layout 中 grid-items 的初始定位是随机生成的

javascript - 为什么Array是instanceof Object?

javascript - 替换部分 URL onclick 并重定向

javascript - 具有本地数据的 jqGrid 树状网格

javascript - 无法使用 d3.js 更改字体大小

d3.js - 防止模板丢弃 DOM 元素

javascript - 如何从 data-value 属性返回负值?

javascript - loadData() 返回空数组