Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Discus不为其使用全球CDN';谁的评论代码?_Javascript_Cdn_Disqus - Fatal编程技术网

Javascript 为什么Discus不为其使用全球CDN';谁的评论代码?

Javascript 为什么Discus不为其使用全球CDN';谁的评论代码?,javascript,cdn,disqus,Javascript,Cdn,Disqus,根据论文,您应该包括他们的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] || d

根据论文,您应该包括他们的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的位置基于特定于站点的短名称。为什么Disqs会这样做,而不是为其JavaScript使用一个全局位置(例如cdn.disqs.com/count.js)。如果每个站点的JavaScript都是相同的,那么要求每个人为他们访问的每个启用disqs的域重新下载JavaScript似乎是愚蠢的。如果JavaScript基于shortname不同,为什么不使用在加载全局js之前设置的shortname变量呢


Discus是一家规模相当大、经验丰富的公司,因此我认为这是他们有意识、有目的的决定。他们为什么要走这条路?

实际上,他们正在使用CDN交付
count.js

如果
存在

http://.disqus.com/count.js
重定向到类似

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

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

但是,假设他们需要更改代码、屏蔽某些站点或向其他站点提供特殊功能,则需要花费一个月的时间,直到所有客户端都得到更改。为了缩短时间跨度,他们可能会使用此重定向(缓存时间最多为10分钟),因此代码/功能更改将在10分钟内到达每个客户机


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

但是我认为客户端将无法在不同的站点之间缓存JS文件,因为它是使用不同的子域请求的。JS文件本身将在不同的域之间缓存,唯一没有在域之间缓存的是重定向。谢谢你的解释。我没有意识到浏览器会在重定向后缓存文件。