哪一个更好:公共javascript CDN还是自托管组合javascript?

哪一个更好:公共javascript CDN还是自托管组合javascript?,javascript,performance,web,browser-cache,cdn,Javascript,Performance,Web,Browser Cache,Cdn,我的网页使用了几个javascript库,如jquery、jQueryUI、下划线、主干和其他一些著名的jquery插件 现在我面临一个两难境地,我可以: 使用承载所有这些库的公共CDN。如果用户使用相同的CDN访问了另一个站点,则脚本可能已被缓存。但由于每个库是独立的,因此页面需要包含许多脚本标记,因此需要包含许多http请求 将所有必需的脚本组合成一个脚本(包括我自己的脚本文件),并将其托管在我自己的服务器上。所有内容只有一个请求,但我不能比CDN更快地提供脚本,而且我不能利用缓存 根据你自

我的网页使用了几个javascript库,如jquery、jQueryUI、下划线、主干和其他一些著名的jquery插件

现在我面临一个两难境地,我可以:

  • 使用承载所有这些库的公共CDN。如果用户使用相同的CDN访问了另一个站点,则脚本可能已被缓存。但由于每个库是独立的,因此页面需要包含许多脚本标记,因此需要包含许多http请求

  • 将所有必需的脚本组合成一个脚本(包括我自己的脚本文件),并将其托管在我自己的服务器上。所有内容只有一个请求,但我不能比CDN更快地提供脚本,而且我不能利用缓存

  • 根据你自己的经验,哪一个更好


    我想估计是否有足够多的网站使用上述CDN(如果许多知名网站使用它们,那么脚本被缓存的概率很高),我该如何调查?我尝试用谷歌搜索script src属性,但谷歌似乎没有索引该属性。

    如果只使用1-2个库,一个好的做法是包含CDN版本,并返回到本地版本。这是大多数HTML样板/框架使用的实践

    
    window.jQuery | | document.write(“”)
    
    但是,您使用了很多库,因此页面上可能存在依赖项和它们的特定顺序,其中一些可能不在标准CDN上,因此您必须从服务器中包含一些Javascript。
    因此,对于您的情况,更好的选择是将所有javascript代码很好地组合/版本控制到1-2个文件中。例如,一个用于库(通常不涉及),另一个用于您自己的自定义代码(更改时缓存被破坏)。

    这个问题主要基于观点。但是,如果将缓存合并到一起,为什么您认为浏览器没有使用缓存呢?当然不是在第一个页面加载时,但不可能所有用户都缓存了来自相同CDN源的所有脚本。@davidkonrad我了解缓存的工作原理。我指的是以前请求的自由缓存版本。这种回退方法非常有效。我使用document.createElement和append to,但这不能保证脚本的执行顺序。Document.write似乎可以工作,至少对于Chrome来说是这样。这能跨浏览器工作吗?css回退如何:使用document.write-in css标记的OneError回调来编写新的,这能工作吗?不,组合不是一个好的解决方案。考虑一下用户的缓存。是的,当用户第一次请求页面时,它可能会更快,但在其他网站上,他的缓存中没有用于其他用途的库。
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="//myserver/js/libs/jquery-1.8.3.min.js"><\/script>')</script>