Jquery 什么';使用CDN(谷歌)或将脚本本地存储在网站';树根?

Jquery 什么';使用CDN(谷歌)或将脚本本地存储在网站';树根?,jquery,html,cdn,Jquery,Html,Cdn,使用CDN(谷歌)或将脚本本地存储在网站的根目录中,包含脚本的速度有多快?取决于服务器的速度。CDN可能更快,您的客户端可能已经缓存了来自其他网站的文件 它将从您的站点上卸载大量带宽,但是您需要依靠第三方的稳定性来维护文件。(虽然我不认为谷歌会很快出现问题)谷歌CDN:-) 1) 从缓存角度优化 2) 如果您指的是面向internet的站点(与内部站点相反)的核心jQuery库,则用户从更优化的CDN节点接收资源 CDN具有以下难以与之竞争的优势: 更多服务器 带宽(您不需要付费) 地理定位(

使用CDN(谷歌)或将脚本本地存储在网站的根目录中,包含脚本的速度有多快?

取决于服务器的速度。CDN可能更快,您的客户端可能已经缓存了来自其他网站的文件

它将从您的站点上卸载大量带宽,但是您需要依靠第三方的稳定性来维护文件。(虽然我不认为谷歌会很快出现问题)

谷歌CDN:-)
1) 从缓存角度优化

2) 如果您指的是面向internet的站点(与内部站点相反)的核心jQuery库,则用户从更优化的CDN节点接收资源

CDN具有以下难以与之竞争的优势:

  • 更多服务器
  • 带宽(您不需要付费)
  • 地理定位(较低的响应时间)
  • 冗余
  • 优化的缓存设置
  • 用户可能已经从那里缓存了文件
  • 并行下载,用户可以同时从您的站点抓取其他内容

尽管您可以像配置缓存头一样配置缓存头,但您可能无法更快地为文件提供服务。尽管如此,库/CDN只是谜团的一部分。您拥有的各种插件和代码也应该是和。

我认为谷歌的CDN是出于其他人所说的原因

但是,如果您的目标市场离您的服务器很近,则最好从您的服务器上进行服务

比如说,你有一个网站fororlandofridapeoplonly.com/。如果您的服务器位于佛罗里达州的奥兰多,而谷歌最近的内容交付服务器位于佛罗里达州的迈阿密和佐治亚州的亚特兰大(这是事实),那么如果访问者还没有从谷歌CDN缓存文件副本,您的服务器可能会更快

请记住,如果您确实从服务器向访问者提供静态内容,请尝试利用子域或其他方式并行下载。看在上帝的份上…不要传输静态内容的cookies


我不确定这个来源有多可靠:。所以不必指望它。

可能值得注意的是,Visual Studio在谷歌CDN的Intellisense方面存在问题。微软还有一个CDN,允许Intellisense正常工作。但是,是的,使用CDN。

不幸的是,最近的研究表明,谷歌CDN实际上阻碍了性能

谷歌的AJAX库API试图通过提供公共共享缓存,利用网络效果来提高所有参与网站的性能。然而,最近的研究发现,很少有人使用网络来达到临界质量并实际提高网络性能。目前,使用网络的开销意味着使用Google的AJAX库API实际上会降低性能。您应该在本地托管JavaScript文件。这将增加您的带宽消耗,但提高页面加载速度。来自绩效报告说明


另请参见此处

将它们存储在本地存储/web存储中的速度更快。我已经创建了一个小型库来实现这一点,结果非常令人信服

  • 从CDN加载jQuery:Chrome268ms,FireFox:200ms
  • 从本地存储加载jQuery:Chrome47ms,FireFox14ms
你可以在它很小的地方查看代码,你可以在几分钟内阅读并理解所有代码

下面是如何使用它的完整示例

完整库:

function _cacheScript(c,d,e){var a=new XMLHttpRequest;a.onreadystatechange=function(){4==a.readyState&&(200==a.status?localStorage.setItem(c,JSON.stringify({content:a.responseText,version:d})):console.warn("error loading "+e))};a.open("GET",e,!0);a.send()}function _loadScript(c,d,e,a){var b=document.createElement("script");b.readyState?b.onreadystatechange=function(){if("loaded"==b.readyState||"complete"==b.readyState)b.onreadystatechange=null,_cacheScript(d,e,c),a&&a()}:b.onload=function(){_cacheScript(d,e,c);a&&a()};b.setAttribute("src",c);document.getElementsByTagName("head")[0].appendChild(b)}function _injectScript(c,d,e,a){var b=document.createElement("script");b.type="text/javascript";c=JSON.parse(c);var f=document.createTextNode(c.content);b.appendChild(f);document.getElementsByTagName("head")[0].appendChild(b);c.version!=e&&localStorage.removeItem(d);a&&a()}function requireScript(c,d,e,a){var b=localStorage.getItem(c);null==b?_loadScript(e,c,d,a):_injectScript(b,c,d,a)};
给图书馆打电话

requireScript('jquery', '1.11.2', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', function(){
    requireScript('examplejs', '0.0.3', 'example.js');
});

很好的一点是,use可能已经缓存了文件,以前没有想到过:)真棒的回答Nick,但是如果CDN服务的库被更新,突然它破坏了布局或类似的东西呢?这不是一个安全漏洞吗?@purpler-你有控制权,例如,你可以引用一个不会更改的特定版本,例如
http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js
,或最新的dot/minor版本:
http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js
,或最新的主要版本:
http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js
(一定要在制作中使用
jquery.min.js
)再次玩宾果游戏Nick,谢谢你的回答,你成就了我的一天:)还有一件事,像html5shiv这样的脚本是什么,它没有版本计数系统:@purpler-对于那些需要从服务器中包含的脚本,请确保首先包含库的CDN链接,就像在本地一样。jQuery团队正在与Media Temple(目前主持jQuery站点)合作开发CDN,以构建插件CDN。我在网上找不到任何好的参考资料,但是如果你听jQuery播客或他们的任何会议,这都会被提出来…一旦它上线,大多数插件也应该有CDN选项。我能得到一些关于为什么这是负面的反馈吗?这听起来不对。谷歌的CDN服务器比任何你可以自己托管的服务器都要快得多,离用户更近。还有一件事——浏览器将从CDN下载jQuery,同时从您自己的服务器下载JS。两个请求将并行下载,但仍将按顺序执行。所以我不知道为什么这会比在自己的服务器上托管jQuery慢,或者更糟,把它编译成一个巨大的JS文件。这是最坏的情况,用户没有缓存任何内容。@ndbroadbent使用http2,文件也会从您自己的域中并行加载。我不知道您为什么要这样做,这没有多大意义。从CDN加载脚本意味着它会被浏览器自动缓存,因此您只需对本地存储执行相同的操作。为什么不直接使用