在Google托管jQuery存在任何问题/劣势吗?

15
我听说有些人访问他们从Google获取jQuery的网站时遇到了问题,因为他们的公司防火墙不允许从其他网站获取代码,即跨站脚本攻击?有人遇到过这样的问题吗?
9个回答

13
一个问题是,谷歌的服务器可以并且会在最糟糕的时候宕机。在回答“你最不舒服的编程经历是什么?”的问题时,我曾回答过:

我正在向一群潜在用户演示我们团队的新Web应用程序。我花了几分钟时间介绍了Google可视化API能够做的所有炫酷的东西,因为我们在应用程序中大量使用它。为了演示,我决定绘制我们之前收集到的一些数据集。旨在传达这样的信息:“看,多容易!普通人也可以使用我们的产品制作出好看的图形。”

真是倒霉,托管使用可视化API所需的Javascript文件的谷歌服务器在我的演示进行到一半时决定停止工作。我坐在椅子上,盯着屏幕,喃喃自语“但是...但是他们是谷歌啊...他们的服务器不能宕机”。团队试图嘲笑一下,但每个人都意识到,在关键时刻依赖于任何第三方(即使是像谷歌这样的大公司)有多么危险。

我知道这似乎不太可能,但除非你确实没有其他选择,否则我建议不要将关键文件托管在第三方服务器上,即使它们是谷歌的服务器。客户抱怨停机问题很糟糕。如果客户抱怨停机问题不是你的错,并且你无法解决,那就更糟糕了


3
公平地说,如果Google的jQuery托管出现问题,回到本地托管版本并不难。 - Kevin Pang
1
是的,但我的回答旨在指出Google在最不方便的时候可能会失败这一事实。虽然退而使用本地jQuery副本可能很容易,但在商业演示期间这样做仍然很尴尬和不方便。 - William Brendel
威廉,在商务演示中使用本地副本并不会令人尴尬或不便。事实上,只要你编码正确,它几乎应该是透明的。 - Travis
1
谷歌的服务器不是分布式的吗?你是说它们全部同时崩溃了吗?如果您演示依赖于互联网连接的任何内容,您不会遇到相同的问题吗?虽然使用jQuery后,浏览器应该在第一次请求后将文件缓存到本地,因此即使谷歌崩溃了,它也可能仍然有效。我认为您必须权衡所有谷歌服务器都崩溃并且您没有缓存的本地副本的机会与许多好处。即使官方的jQuery网站也将jQuery托管在Google上! - Dan Diplo
1
我不了解Google的网络布局,但在这种情况下,托管可视化API的Javascript文件的服务器对公众不可用。我不知道问题出在哪里,但这就是我的观点。除非你能掌控,否则你就得听任第三方,无论是Google、Microsoft还是其他大公司或小公司。一个由Google拥有的服务会崩溃吗?不会。可能吗?肯定。这就是我的意思。有时候依赖第三方是不可避免的,但避免这样的依赖通常是明智的选择。 - William Brendel
显示剩余2条评论

11

我猜您所指的谷歌托管是指 AJAX Libraries API 吧?我看到的优势有:

  1. 从Google的CDN中加载JS,您可以节省站点带宽。
  2. 您可能会发现响应速度更快,因为内容来自于谷歌分布式CDN,而不是您的服务器。
  3. 如果用户之前访问过使用Google托管JS库的其他网站,则用户的浏览器可能已经对其进行了缓存。
  4. 谷歌为您运行的库版本应用最新的错误修复和安全补丁。与其他人声称的相反,他们不会自动升级您到最新版本。例如,如果您指定想要Mootools 1.11,则不会提供1.2或任何后续版本,除非您明确更改脚本包括调用以请求它。但他们将应用特定于该版本的修复程序。

而缺点有:

  1. 如您所提及,某些更热衷于安全的工具和产品可能会对包含来自不同主机的脚本感到不满。我不知道这是多么普遍的问题,但值得调查。
  2. 这可能会为页面加载增加另一个DNS查找。
  3. 谷歌已承诺“无限期”托管所有库的每个版本,您希望他们说得算。但是,财富和政策会发生变化,如果停止托管服务,您可能需要重新访问多个站点以修复其JS问题。
  4. 您依赖于第三方托管某些内容。显然,您希望谷歌的正常运行时间非常好,但如果他们遇到问题,您可能需要向客户解释他们的网站因Google网络问题而无法正常工作的原因。
  5. 谷歌托管每个库的完整版本,但是像Mootools这样的一些库允许您创建包含您需要的组件的自定义版本。因此,谷歌版本可能比您需要的更全面。
  • 您无法自定义或更改该库。对于任何下游更改库,都是棘手的事情,但如果您处于危急关头,这可能是最简单的选择。将库托管在外部会增加额外的复杂性,因为您将不得不切换到内部副本。
  • 您选择的版本会应用错误修复,因此如果您某种方式依赖于错误行为,则可能会引起问题。可以想象库的作者会非常谨慎地处理潜在的破坏性变化,但是按照墨菲定律,问题总会出现在某个地方。

  • 3

    我最近才开始使用jQuery,并且只使用本地副本,因此无法评论跨站问题。

    由于您的问题标题询问是否在Google上托管存在任何缺点,最明显的答案是他们可能随时升级其版本,可能会破坏您的代码或导致意外的副作用。更新:Guillaume评论说,当您托管时,始终链接到特定版本的jQuery。我不知道这一点-谢谢。

    最后,如果您所在的国家偶尔出现国际互联网连接中断,或者您开发了一个内部网络并且互联网连接中断,您可能会发现本地用户出现错误,因为他们无法访问Google。


    2
    当使用托管在谷歌的jQuery时,您始终引用特定版本,因此如果他们添加新的jQuery版本,则没有问题。 - Guillaume

    3

    一个巨大的优势是离线使用。我在没有移动数据的情况下在火车上写了很多代码-所以在我的Web项目中有JS非常有用。它还使我完全掌控并自信地管理变更。


    1
    开发中的网站和生产中的网站是两个不同的网站。 例如,在开发中,我经常使用非压缩版本的js。 而在生产中,甚至连html也被压缩了。 - Davinel

    2

    我不知道,但我喜欢自己掌控:), 我总是将JS上传到Web服务器


    这样做的主要问题是JQuery可能高达200kb。这将减缓页面加载时间。由于许多网站使用相同的库,在同一快速CDN中托管它将加速页面加载(缓存,更好的延迟,并行下载等)。 - Michael

    2

    您网站的最重要的用户通常是重复访问者,他们会缓存您本地托管的.js文件,因此他们只在第一次访问网站时才会受到带宽影响。

    1. 我的网站访问者通常是重复访问者吗?(与首次访问者相反)
    2. 我的网站访问者是否可能拥有快速的网络连接?
    3. 我是否轻松处于我的网站分配的带宽容量之内?

    每个“是”答案都是避免依赖Google外部托管Javascript的理由。

    例如:如果您运行像StackOverflow这样的网站,在那里您的访问者通常是技术娴熟的人,拥有快速连接和完全填充自己缓存的50个其他时间,他们今天查看了StackOverflow的页面,那么从其他地方托管您的Javascript增益将非常小。

    但是,如果您在地下室的256kbps DSL线路上为吉隆坡的老年人运行网站,则如果您将这些JS文件卸载到Google,您的访问者将获得一些不错的收益!


    1

    一些国家可能会通过其DNS服务器阻止对全国范围的Google域名的访问。


    0

    所有这些关于带宽的评论,却没有人谈论缓存。当托管网站时,如果您没有正确地告诉最终用户如何缓存文件以及缓存时间,您就会导致过度使用带宽和由此造成的麻烦。

    我的答案很简单。自己托管,将其检入源代码库,并使用非常长的到期标头正确提供服务。这样每个人都只下载一次东西。此外,我真的无法忍受不拥有服务器发送或要求客户端下载的每个文件的想法。


    0

    让谷歌托管您的jQuery有许多缺点,正如其他用户所指出的:

    • 谷歌可能会升级他们的副本
    • 谷歌可能会崩溃
    • 最终用户可能无法访问谷歌

    更好的回答方式可能是问:让谷歌托管您的jQuery有哪些优势?只有在特定情况下,我才会使用跨站点托管依赖项。即:

    • 谷歌可能比您更接近最终用户的服务器
    • 用户更有可能将谷歌的版本缓存在本地而不是您的版本(除非他们经常访问您的网站)

    1
    1. 不行,它们不能:ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js。这将始终是1.4.2
    2. 所有的谷歌CDN?一次性?
    3. 他们可以访问您的网站,但他们无法访问谷歌?为什么?
    - Davinel

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接