Javascript 将CDN用于jQuery(或其他静态文件/脚本)真的是个好主意吗?

Javascript 将CDN用于jQuery(或其他静态文件/脚本)真的是个好主意吗?,javascript,cdn,Javascript,Cdn,它说,在任何地方都可以使用CDN,比如谷歌或微软的AJAXCDN来加载静态脚本库,比如我的例子中的jQuery 我不明白这对提高我的网站速度有什么帮助。在firebug中,当我加载jQuery时,Google和MicrosoftAjax服务器的响应时间大约为300毫秒,而在Chrome中,我的响应时间大约为100毫秒(不知道是什么造成的差异,没有下载,两个服务器都试过几次,但无论如何这不是重点),我的站点在部署时的平均响应时间估计为30到40毫秒。将文件加载到CDN对我的站点有什么好处?这会让一

它说,在任何地方都可以使用CDN,比如谷歌或微软的AJAXCDN来加载静态脚本库,比如我的例子中的jQuery

我不明白这对提高我的网站速度有什么帮助。在firebug中,当我加载jQuery时,Google和MicrosoftAjax服务器的响应时间大约为300毫秒,而在Chrome中,我的响应时间大约为100毫秒(不知道是什么造成的差异,没有下载,两个服务器都试过几次,但无论如何这不是重点),我的站点在部署时的平均响应时间估计为30到40毫秒。将文件加载到CDN对我的站点有什么好处?这会让一切变得更糟

我知道,当我使用谷歌CDN的jQuery访问许多网站时,很长一段时间内,它只需“下载”一次脚本,但我的浏览器仍试图连接到谷歌的服务器,请求脚本文件,然后收到304未修改的状态码。在这200毫秒的往返行程中(Chrome和FF的平均值),我等待。但是如果我自己托管脚本文件,那么它将(向下)加载得更快,大约五倍,这是用户体验的一个重要因素。也许200毫秒不是什么大问题,但它仍然是一个区别,我想知道为什么建议使用CDN而不是自己托管文件。最后,在一次性加载之后,浏览器也将缓存我的站点的脚本,如果我使用CDN,浏览器将向CDN请求脚本,这将延迟我的站点


更新:我来自土耳其,这可能是往返次数多的主要原因。我的大多数访问者都来自这里,因此我想问,使用CDN对土耳其服务器上托管的我的站点和同样在土耳其的我的站点用户是否有益。当然不适合往返,但可能我遗漏了一些东西。

关键是,如果许多网站引用基于CDN的版本,那么访问您网站的用户很可能已经在缓存中保存了脚本。

可能会给您一些帮助

主要优势在于

  • 潜伏期缩短
  • 增加并行性
  • 更好的缓存

  • 分两部分回答:

    • 你不应该看到304s
    • 但这是个好主意吗
    你不应该看到304s 我知道,当我使用谷歌CDN的jQuery访问许多网站时,很长一段时间内,它只需“下载”一次脚本,但我的浏览器仍试图连接到谷歌的服务器,请求脚本文件,然后收到304未修改的状态码

    它不应该这样做,如果它遵守
    缓存控制
    头:

    Cache-Control:public, max-age=31536000 缓存控制:公共,最大年龄=31536000 …也就是说,从资源上的日期开始,浏览器最多可以将其缓存一年。根本不需要任何HTTP请求(这是我在Chrome中看到的,除非我强制它,根本不需要请求,只是一张写着“来自缓存”的便条);启动Firefox并确保所有页面都打开Firebug,Firefox在很长一段时间内第一次出现StackOverflow[我只用于测试],果然,它根本没有发出任何jquery请求)

    例如,304响应可能需要200毫秒,但如果浏览器缓存正确,则从缓存加载可能需要0毫秒

    我在强制请求中看到的全套相关头包括:

    Cache-Control:public, max-age=31536000 Date:Wed, 17 Aug 2011 21:56:52 GMT Expires:Thu, 16 Aug 2012 21:56:52 GMT Last-Modified:Fri, 01 Apr 2011 21:23:55 GMT 缓存控制:公共,最大年龄=31536000 日期:2011年8月17日星期三21:56:52 GMT 到期时间:2012年8月16日星期四21:56:52 GMT 最后修改:2011年4月1日星期五21:23:55 GMT …所以我的浏览器在将近一年的时间里不必再次请求该路径

    请参阅下面的@Dave Ward评论:要获得最大缓存结果,请使用完整的版本号,例如:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
    <!--                               very specific ---^^^^^                      -->
    

    关于Firefox为什么不缓存它应该缓存的内容的一个重要注意事项!
    FIREBUG有一个称为“禁用浏览器缓存”的小功能
    开发人员和设计师大多数时候都会打开它,因此firefox不会缓存任何东西,即使firebug不处于活动状态!!
    因此,只需打开“firebug”>go to“Net”选项卡>


    我认为这是firebug中非常昂贵的bug,它会给可怜的开发人员造成大量带宽浪费

    你会问这是否是个好主意,然后说对你来说不是,然后你会问为什么建议这样做-问题是什么?200毫秒往返于谷歌以获得一个304未修改版本是非常慢的。我预计大多数人需要<20毫秒。我只是试了一下,花了17毫秒。他们的意思都是一样的:我问这是否真的是个好主意(正如大多数人所说),并给出我自己的理由说明为什么我认为不是。@Disapoint先生,问题是“为什么人们推荐CDN,因为我的经验表明,CDN比从我的服务器下载库要慢”,这是一个有道理的问题,我只是认为答案是“你的经历并不代表大多数人的经历”@Ben Robinson:你在哪里?我在土耳其,正如我所说的那样,我最初认为这也是对他的问题的正确回答。但是如果你重读他的问题,OP知道这一点,他的问题是检查http状态,而不是加载文件本身。我理解这一点,但这对我没有任何好处。还有其他真正好的理由吗?需要注意的一点是,如果您使用的不是特定的1.n.n引用(即使是新的point发行版-1.n.0),缓存将受到严重限制。一个常见的错误是引用最新的point发行版,比如1.6而不是1.6.2,它将本地缓存窗口降低到几乎为零。奇怪的是,chrome只是“有时”进行缓存(因为它被迫进行完全刷新,我没有这样做),而firefox根本不缓存它。正如它所解释的那样,这将是一个完美的解决方案,但它不能正确地在我的浏览器上工作,也可能在我用户的浏览器上工作。不,它不是。我不知道,也许是吧
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
    <!--                               very generic ----^                      -->
    
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
    <script>
    if (typeof jQuery === "undefined") {
        document.write("<scr" + "ipt src='/my/local/jquery.js'></scr" + "ipt>");
    }
    </script>