【问题标题】:Which is better: public javascript CDN or self-hosted combined javascript? [closed]哪个更好:公共 javascript CDN 或自托管组合 javascript? [关闭]
【发布时间】:2014-04-07 11:35:43
【问题描述】:

我的网页使用了几个 javascript 库,如 jquery、jquery-ui、underscore、backbone 和一些其他知名的 jquery 插件。

现在我面临两难境地,我可以:

  1. 使用托管所有这些库的公共 CDN。如果用户使用相同的 CDN 访问了另一个站点,则脚本可能已被缓存。但是由于每个库都是独立的,页面需要包含很多脚本标签,因此需要很多 http 请求。

  2. 将所有必需的脚本合并为一个(包括我自己的脚本文件)并将其托管在我自己的服务器上。一切都只有一个请求,但我无法比 CDN 更快地提供脚本,而且我无法利用缓存。

根据您自己的经验,哪个更好?

并且我想估计是否有足够的网站使用提到的CDN(如果许多知名网站都使用它们,那么脚本被缓存的可能性很高),我该如何调查?我尝试用谷歌搜索 script src 属性,但似乎谷歌没有索引。

【问题讨论】:

  • 这个问题主要是基于意见的。但是,如果将它们合二为一,为什么您认为浏览器没有使用缓存呢?当然不是在第一次页面加载时,但不太可能所有用户都缓存了来自同一个 CDN 源的所有脚本。
  • @davidkonrad 我了解缓存的工作原理。我的意思是先前请求的免费缓存版本。

标签: javascript performance web browser-cache cdn


【解决方案1】:

如果只使用 1-2 个库,一个好的做法是包含 CDN 版本,并回退到本地版本。这是大多数 HTML 样板/框架使用的做法。例如 .

http://html5boilerplate.com/

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="//myserver/js/libs/jquery-1.8.3.min.js"><\/script>')</script>

但是,您使用了很多库,因此可能存在依赖关系,并且它们在页面上的特定顺序,其中一些可能不存在于标准 CDN 上,因此无论如何您都必须包含一些您的来自您服务器的 javascripts。 因此,对于您的情况,更好的选择是将所有 javascript 代码很好地组合/版本控制到 1-2 个文件中。例如,一个用于库(通常不被触及),一个用于您自己的自定义代码(当您制作时缓存被破坏)更改)。

【讨论】:

  • 这种回退方法非常有效。我使用了 document.createElement 并附加到 ,但这并不能保证脚本的执行顺序。 Document.write 似乎工作,至少对于 Chrome。这是否适用于浏览器?
  • 那么css fallback怎么样:在css标签的onerror回调中使用document.write,写一个新的,这样行吗?
  • 不,合并不是一个好的解决方案。想想用户的缓存。是的,用户第一次请求页面时它可能会更快,但他的缓存中没有用于其他用途的库,在其他网站上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 2016-09-07
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多