【问题标题】:Why does Disqus not use global CDN for it's comment code?为什么 Disqus 的评论代码不使用全球 CDN?
【发布时间】:2012-04-11 12:23:37
【问题描述】:

根据 Disqus comment code instructions,您应该按如下方式包含他们的 JavaScript:

(function () {
  var s = document.createElement('script');
  s.async = true;
  s.type = 'text/javascript';
  s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
  (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());

JavaScript 的位置基于特定于您网站的短名称。为什么 Disqus 这样做,而不是为他们的 JavaScript 使用一个全球位置(例如 cdn.disqus.com/count.js)。如果每个站点的 JavaScript 都相同,那么要求每个人都为他们访问的每个启用 Disqus 的域重新下载 JavaScript 似乎很愚蠢。如果 JavaScript 基于 shortname 不同,为什么不使用在加载全局 js 之前设置的 shortname 变量?

Disqus 是一家相当大且成熟的公司,所以我认为这是他们有意识和有目的的决定。他们为什么要走这条路?

【问题讨论】:

    标签: javascript cdn disqus


    【解决方案1】:

    实际上他们使用 CDN 来传递count.js

    如果<shortname> 存在

    http://<shortname>.disqus.com/count.js 重定向到类似的东西

    http://mediacdn.disqus.com/1334018047/build/system/count.js.

    为了减少流量count.js(在 CDN 上)提供了一个 Expires-Header,允许缓存长达一个月。

    但假设他们需要更改代码或屏蔽某些网站或向其他网站提供特殊功能,则可能需要长达一个月的时间才能让所有客户收到更改。为了减少时间跨度,他们可能会使用此重定向(最多仅缓存 10 分钟),因此代码/功能更改将在 10 分钟内到达每个客户端。

    它为他们提供了很大的灵活性,并且不需要用户更改包含代码。

    【讨论】:

    • 但是我想客户端将无法在不同站点之间缓存JS文件,因为它是使用不同的子域请求的。
    • JS文件本身会在不同的域之间缓存,唯一没有在域之间缓存的是重定向。
    • 感谢您的解释。我没有意识到浏览器会在重定向后缓存文件。
    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多