Google jQuery托管库-有什么好处吗?


Answers:


18

使用外部CDN(例如Google)来托管jQuery有两个主要好处:

  1. 更快 它肯定会比您的站点快,并且可能比您自己设置的任何CDN都快。
  2. 它可能已经被缓存。许多站点也都在Google的CDN上引用了jQuery,因此,如果他们在您的站点之前访问过另一个站点,他们甚至不需要下载它。

潜在的缺点:

  1. 域可能已被阻止(在中国这样的地方这很常见)。您可以通过本地回退来解决此问题(有关方法,请参见此处)。
  2. 版本号的碎片化程度很高,因此您网站的访问者可能会缓存许多不同的版本,但是您引用的版本却没有(请参见此处,了解一些最新统计信息)。但是,这仅是第一页加载时的问题。

3
您可以发布有关如何设置本地后备广告的参考吗?
Stephen Ostermiller

1
正如Zistolen之前指出的,另一个好处是它将与您的网站并行下载其他资产。您可能还希望将其添加到这个其他很好的答案中。
nathangiesbrecht 2014年

这有点误导。浏览器可以并行下载资产,而不管它们在何处托管,但是它们一次要从同一主机下载的内容数量是有限制的。
蒂姆·

我跳过了,说实话,它既不在这里也不在那里-该文件可以并行下载,但它也是一个附加的DNS查找。另外,无论是哪种时间差异都可以忽略不计。
DisgruntledGoat 2014年

很公平。但是在快速连接上,因为可以使用更多的“管道”,这会不会导致更快的总加载时间?
nathangiesbrecht 2014年

11

另一个缺点:

使用CDN可使CDN的运营商跟踪网站访问者。这就是为什么他们不花钱的原因。


跟踪但不跟踪访问者:jquery自身和google的jquery CDN都托管在未设置或使用cookie的域上(这可能也是性能优化),并且请求中没有真正可识别的信息。CDN提供程序可以了解有关IP地址以及有关用户代理字符串和引荐来源网址的一些统计信息。这可能很有价值,但它本身并不是一个巨大的隐私风险(如果这些记录与另一个数据库相关联(例如,在相同时间投放的个性化广告,则可能是一种跟踪手段))。
Eamon Nerbonne 2014年

我认为将数据与其他数据库相关联是理所当然的(对于Google而言),因为几乎每个人都一直在使用google进行搜索。Google字体也是如此:我最近尝试在服务器上自托管字体,但是发现很难做到这一点。Google不会禁止它(开放源代码),但是它们不会以即用型的方式向您提供文件:您可以自己编译它们(但没有makefile),也可以伪造对文件的请求。用于正常交付它们的服务器。两者都不适合非技术人员使用。
2014年

也许。我没有任何内部消息,因此很难确定。我敢肯定,这会是错误的,并且会有很大的差距,但是:我使用互联网的大多数地方都是经过NAT转换的,而且有些地方有相当多的用户使用相似的机器(可能是相同的UA字符串)-无法知道哪个请求来自谁。当然,使用adsense和社交共享按钮时,它们可能几乎总是具有更可靠的方式,因此我可以想象它们不会打扰。至于字体-我已经下载了几次,所以我不太理解您所说的难是什么意思?
Eamon Nerbonne 2014年

明确一点:我假设您进行的大多数网站访问都可以并且将通过社交共享按钮(相当普遍)和广告被大型统计收集者跟踪,这些信息随处可见。因此,我只是想知道从高速缓存的JS请求中可能会产生误导性的信息有多有价值-我敢打赌,不是很高,因此,我认为他们不会打扰尝试使用CDN服务的JS来亲自识别人员。
Eamon Nerbonne 2014年

它不像人们想象的那样被缓存-当通过使用Google偏爱的方式通过将CSS链接插入fonts.googleapis.com来嵌入字体时,每个页面视图都会打开到google的连接(您可以在Firebug中看到它们)。不管是否缓存都没有关系。关于下载:您能指出我一个可以下载高质量eot,woff,ttf和svg格式的字体的地方吗(谷歌提供的相同版本,没有外部转换器)?
2014年

3

假设您只在乎性能,那么使用CDN来像这样在许多服务器之间分配依赖关系实际上就代表了带宽和延迟之间的平衡。

顺便说一句,我假设替代方法不仅仅是在本地托管它,而是将其与其他本地请求连接在一起-通常没有充分的理由不进行连接。

如果带宽是无限的,那么最好不要进行分片,因为您的速度将与最慢的服务一样慢-因为延迟并不是完全可预测的,即使服务速度很快,也没有足够的服务,您只需要一点运气不好导致页面加载缓慢。

如果延迟为0,则将负载分散到许多服务器上可以通过利用许多服务器来提高带宽(这无济于事,因为带宽限制可能位于客户端附近,而不是服务器附近),但更重要的是,它可以减少传输的数据量通过增加缓存的有效性来实现。

这取决于您的方案,但是我通常希望延迟比带宽更成为一个问题,除非您的脚本异常庞大(不是jquery)。那时,将jquery托管为串联本地文件的一部分通常更快。

不在本地托管的原因是,例如,当您为带宽付费时,或者在某个速度较慢的服务器上托管时(与客户端的连接出现瓶颈,而不是客户端的瓶颈),或者您知道客户端的带宽会非常低(例如,低端的DSL或调制解调器-移动设备往往比带宽问题更多的延迟问题),或者您的客户为带宽(例如移动设备)支付费用,而脚本是其中的一个非常明显的部分,即次要缓存胜出很重要(不太可能)。

无论如何:更为相关的是您是否首先了解了基础知识;适当的缓存头,连接,缩小和gzipping(最好具有高压缩率)。这就是症结所在:如果您这样做,那么至少CDN会这样做,所以那是胜利...

TL; DR:如果您具有并置+最小化+ gzipping +缓存所有内容,则尽管CDN的性能更好,但本地提供小脚本比从CDN更快地提供服务 -但前提是您已完成作业,可能不在第一页上加载,并且此规则肯定有例外。


顺便说一句,仅使用一个请求就可以赢得一些字节节省:仅标头就达到了将近1kb,在28k的有效载荷上也不算什么。gzip在更多上下文中效果更好,这又节省了0.5k。TCP,DNS,HTTPS开销都可以轻松地在此处或此处添加一个KB,更糟糕的是,可以添加RTT。因此,对于像这样的小文件,CDN的速度不如您想像的那么快。
Eamon Nerbonne 2014年

1

使用Google的jQuery托管库可以更快地加载您的页面。实际上,该库是在页面的同一时间而不是之后加载的。


但是它如何影响页面加载?
狮子座

1
加载页面时也会加载本地库-在这两种情况下,当(现代)浏览器看到触发下载的代码段时(通常是在下载整个文档之前),资产的下载就会开始。请参阅此Firebug屏幕截图,了解一个示例
Jost 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.