我们目前正在从Google CDN中提取jQuery和jQueryUI(以及jQueryUI CSS)库。我喜欢这样,因为我可以打电话,google.load("jquery", "1");
并且将使用最新的jQuery1.xx。
现在我出于安全考虑将库拉到本地。
我很高兴将它们拉到本地,但我想知道还有哪些其他好处和陷阱值得关注?
Answers:
将它们放在CDN上的主要好处是,可以与从您自己的网站下载的文件并行下载文件。这样可以减少每个页面上的延迟。因此,另一方面是托管本地延迟增加的陷阱。这样做的主要原因是,浏览器可以同时建立与同一Web域的连接数量受到限制。在IE6中,默认情况下这是到同一个域的2个并发连接-在IE的所有打开的窗口之间共享!在IE8 +中,它得到了改进,默认为6,与FF / Chrome内联,但是,如果您有很多图像并且没有使用精灵,则将遇到大量延迟。
使用CDN,我总是会显式设置库版本,而不是获取最新版本。这样可以减少新版本破坏代码的风险。jQuery不太可能,但是可能。
使用CDN的另一个主要好处是减少了网站流量。如果按GB付费或位于资源有限的虚拟服务器上,则将某些内容租用到公共CDN时,可能会发现总体站点性能提高,托管成本降低。
确保您还阅读了@Xaver对此问题的其他答案。这是一个很好的把戏
我一直使用Google的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>
抓取Google CDN的jQuery,并在必要时回退到本地
编辑:如果您不需要支持IE6,并且您的站点使用了部分https,则也可以删除http:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
!window.jQuery...
)之前加载并被解释?<script>
标签是异步处理的,对吧?
<script>
标签被同步处理!在第二行中,必须已经加载了jQuery,但以防万一,如果我们没有注入JS,则它将在本地加载。document.write
如果jQuery已经存在,将永远不会执行。
其他人已经涵盖了好处。陷阱:
如果仅包含来自您自己的服务器的内容,则该服务器需要运行-并且不受防火墙等的阻止-才能使站点正常工作。从第三方提取脚本,现在这两个服务器需要运行且不受阻塞才能使您的站点正常工作。
您<script>
从中拉出的任何站点都可以完全控制用户在您站点上的体验。如果Google感到邪恶,他们可以在jQuery副本中放一些东西来记录您的按键,从正在访问的页面中窃取个人信息以绑定到其网络跟踪数据库中,让您发布“我爱Google!”。对每种形式的注释,等等。
Google可能实际上不会这样做,但这是您无法控制的因素,其他脚本托管服务当然也需要担心。之前曾发生过一些事件脚本,其中统计脚本已被恶意软件加载程序破坏。
在包含来自第三方的任何脚本之前,即使在您网站的单个页面上,您也必须100%信任它们,并在该主机名上看到所有用户可访问的功能(包括面向Web的管理功能)。
Google CDN:
本地:
if a new version breaks your existing plugins or site, you'll know about it possibly too late
您可以在CDN链接中指定版本以避免这种情况。
好处:(特别适用于Google的CDN)
使用Google的CDN,几乎从任何角度看都是一件好事。
性能将得到改善(尽管相当有限,除非您的站点确实很繁忙),并且服务器必须传输的数据量将会减少(尽管jQuery并不是下载的庞大内容),等等。
您不希望使用它的唯一原因是您不信任Google。通过使用它,您可以有效地向Google提供进入您网站流量配置文件的附加信息窗口,包括您可能不希望公开的URL知识(例如,网站的安全区域)。
如果您对安全性抱有偏执,那么这可能足以说服您不要使用它们(毕竟,亲自托管它并不会完全使您的网站慢下来进行爬网),但是总的来说,大多数人会采取务实的观点Google已经对他们的网站了如指掌,因此添加它不会有多大区别。
如今我可能是少数派,但我想除非您确实需要,否则您不想使用CDN。开始使用它的关键因素是:
但是...要点是,这些要点并不真正适用于全球90%的网站。我敢打赌,您不是拥有全球数百万在线用户的Facebook,也不是拥有每秒数百GB传输量的Pornhub。
如果您的网站是针对您所在城市/国家/地区的用户的,并且一台服务器的容量足以满足您拥有的用户数量-为什么您要CDN?对于您所在城市的用户而言,它更快,而从本地本地主服务器中获取所有信息,则更加简单。
一般而言,它更多是关于CDN的,现在让我更接近有关jQuery或任何其他库的实际问题。
如果您希望您的网站在一年多的时间内保持可访问性且无需维护就可以正常工作-将其放在本地。如今,图书馆正在以一种疯狂的节奏进行更新,您可能不想遵循。最终将删除旧版本。而且,整个库都会死掉(尽管可能不适用于jQuery)。
根据最近的经验-我在维护的网站上将TinyMCE从3.xx(日期为2012年)更新为5.xx(日期为2019年春季)。该网站运行了7年(七年!),这一部分逻辑没有任何维护。当时没有“缩小”概念,CDN并不像现在这样普遍。但是,即使它们很常见-您也永远不会知道从现在开始的3-5-10年后会发生什么。通常,即使不维护网站,您也希望自己的网站保持活力,不是吗?但是,如果您今天从CDN中提取jQuery,则此链接可能(而且很可能会)在5年内失效。
使用@Xaver建议的CDN解决方案和回退到本地版本可能是一个不错的折衷方案。但是...也许只是摆脱了CDN链接?;)