在本地托管jQuery的好处与陷阱

oro*_*olo 78 javascript jquery jquery-ui cdn

我们目前正在从谷歌CDN中提取jQuery和jQueryUI(以及jQueryUI CSS)库.我喜欢这个,因为我可以调用google.load("jquery", "1");
,最新的jQuery 1.xx将被使用.

现在我因为安全性而在本地拉出库.

我很乐意将它们拉到当地,但我想知道还有哪些其他好处和缺陷值得注意?

Xav*_*ver 138

我总是使用谷歌的CDN(内容分发网络).但万一它离线:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-1.4.2.min.js"><\/script>')</script>
Run Code Online (Sandbox Code Playgroud)

如有必要,可以抓取Google CDN的jQuery并回退到本地

编辑:如果您不需要支持IE6,并且您的网站使用部分https,您也可以删除http:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • XVIDEOS现在使用此解决方案:P (20认同)
  • 感谢社区:http://stackoverflow.com/questions/1014203/best-way-to-use-googles-hosted-jquery-but-fall-back-to-my-hosted-library-on-go (4认同)
  • `&lt;script&gt;`标签是同步处理的!在第二行中,必须已经加载了jQuery,但以防万一,如果我们没有注入JS,则它将在本地加载。如果jQuery已经存在,将永远不会执行`document.write`。 (2认同)

Dan*_*son 101

将它们放在CDN上的主要好处是可以将文件与从您自己的网站下载的文件并行下载.这减少了每页的延迟.因此,另一方面是本地托管的陷阱 - 延迟增加.主要原因是浏览器的连接数量有限,它们可以同时连接到同一个Web域.在IE6中,这是默认为2个并发连接到同一个域 - 在IE的所有打开的窗口之间共享!在IE8 +中,它改进了,默认为6,与FF/Chrome一致,但是,如果你有很多图像并且你没有使用精灵,你将会遇到严重的延迟.

使用CDN,我总是显式设置库版本而不是获取最新版本.这降低了新版本破坏代码的风险.使用jQuery不太可能,但可能.

使用CDN的另一个主要好处是减少了您网站的流量.如果您支付每GB或者您使用的资源有限,则可能会发现当您将部分内容迁移到公共CDN时,整体网站性能会提高并且托管成本会降低.

请确保您还阅读了@revaxarts对此问题的其他答案.这是一个非常好的技巧

  • 设置库版本的另一个好处明确是谷歌给它一个较长的缓存时间,例如指定1.9.1会给更长的缓存生命不仅仅是要求1.9(作为一个新的jQuery 1.9版本可能会被释放,但1.9.1将永远是相同). (5认同)

bob*_*nce 20

其他人已经报道了这些好处 陷阱:

  • 如果您只包含来自您自己的服务器的内容,那么该服务器需要运行 - 而不是被防火墙等阻止 - 以使您的站点正常工作.从第三方拉取脚本,现在需要运行和解除阻止的两台服务器才能使您的站点正常工作.

  • <script>从中提取的任何网站都可以完全控制用户在您网站上的体验.如果谷歌感到邪恶,他们可以在他们的jQuery副本中加入一些东西来记录你的按键,从你所在的页面窃取个人信息以绑定到他们的网络跟踪数据库,让你发布"我爱谷歌!"评论到每个表格, 等等.

谷歌可能实际上并没有这样做,但这是一个不受你控制的因素,当然还有其他脚本托​​管服务需要担心的事情.在使用恶意软件加载程序破坏统计脚本之前,曾发生过一些事件.

在包含来自第三方的任何脚本之前 - 甚至在您网站的单个页面上 - 您必须100%信任它们,并使用该主机名上可见的所有用户可访问功能(包括面向Web的管理功能).

  • 谷歌不会这样做......我爱GOOGLE ...他们会吗?:-P (19认同)
  • [第2点的解决方案](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) (6认同)

Moi*_*man 13

谷歌CDN:

  • 缓存,有利于性能,更多用户可能已经拥有它,并且它可以并行下载
  • 如果有的话,heaver禁止cdn下降.你完蛋了.
  • 如果新版本破坏了您现有的插件或网站,您可能会知道它可能为时已晚

本地:

  • 没有连接到网络的发展是可能的
  • 除了缩小之外,还可以通过gzipping获得一些性能优势

  • 但是来自google的cdn的jquery u load是缩小的.使用cdn的另一个好处是它对你的目录结构更干净:) (5认同)

Dr.*_*lle 12

我更喜欢使用我的本地版本,因为我无法控制它们将提供什么.例如,我不希望我的用户受到谷歌分析或任何类似的影响,因为这是我国的法律问题.


Pra*_*sad 8

好处:(特别针对谷歌的CDN)

  1. 与您的文件并行下载.其他答案进一步解决了这个
  2. Google的服务器很可能能够更快地实际提供内容
  3. 公共库和框架可能已经在用户的计算机上,因为CDN的HTTP缓存在所有站点中都是通用的
  4. 您的带宽不必用于提供大型库文件