3

我正在开发一个使用大型 javascript 库(例如jquery UI)的 rails 应用程序,并且我也有一些我自己的 javascript 文件。我正在使用资产打包器来打包我自己的 javascript。我正在考虑提供这些文件的两种方式:

  1. http://code.google.com/apis/ajaxlibs/documentation/#jquery所述,从 Google 代码链接到 jQuery 库,并使用资产打包器单独打包和提供我的 javascript 文件。

  2. 自己托管 jquery 库,并将它们与我自己的 javascript 打包为一个大的合并 javascript 文件。

我的托管解决方案当然不会击败 Google 的内容交付网络,所以起初我假设最终用户会通过选项 #1 体验更快的页面加载。

但是,我还想到,如果我自己为他们提供服务,用户只需发出一个请求即可获取合并的 javascript(与我的合并 javascript 和 google 提供的库的另一个相反)。

哪种方法将提供最佳的最终用户体验(大概是以更快的加载时间的形式?)

4

3 回答 3

4

Google 的好处在于,由于许多网站都在使用它,因此用户很可能已经查看过使用 google JS 库的网站,在这种情况下,它已经被缓存在他们的机器上,而他们可能不会完全需要下载文件。

就个人而言,我会坚持使用 Google(通过google.load()),而不是尝试合并文件并从我自己的服务器加载它们。(你也可以使用谷歌的加载器来延迟加载文件,只在你需要的时候加载它们,而不是加载你所有的库并且只使用其中的一个。)

于 2010-04-28T01:52:21.537 回答
4

我会说“这取决于”,但在大多数情况下,我会选择选项 #1(Google 托管)作为面向互联网的网站。对于 Intranet,出于多种原因,我会在内部托管所有内容,但这超出了您的问题范围。

总体来说有几点需要考虑:

  • 如果文件缓存正确,您的用户不会下载文件,除非强制刷新。
  • Google 拥有比您更多的服务器 :) 更多,并且它们的地理位置可以最好地满足任何给定的请求,我猜您的主机来自一个或几个位置。
  • 浏览器并行下载,即使它按顺序执行脚本,所以它会同时从你和谷歌下载,增加吞吐量。
  • 其他网站使用 google 来托管 jQuery(你现在就在其中),如果用户访问过其中任何一个,他们已经缓存了文件,这意味着没有发出请求。

您可以将所有文件托管在一个文件中,但您必须考虑以下几点:

  • 一个文件有多大,当您更改脚本中的某些内容时,您的用户是否需要再次下载整个文件?
  • 多个请求(和 DNS 查找)是否比该文件的下载时间便宜
  • 你为带宽付费吗?:)

根据自定义代码的百分比和框架的多少,Google 的 CDN 可以从您的服务器上移除大部分静态 js 流量,使其可用于服务和做其他事情(这对高流量网站来说是一个巨大的好处),并且当您更改脚本时(比新的框架版本更常见)......客户端只下载那个,而不是再次下载整个框架。

于 2010-04-28T01:57:48.413 回答
0

除了带宽和下载速度的实际问题外,还存在潜在的合法或至少道德问题,具体取决于您的隐私政策和要求。

<锡纸豆豆>

当您使用 Google(或其他人)的 CDN 时,会传递一个包含页面地址的引荐来源标头以及一个跟踪 cookie。哎呀!Google 现在知道您的用户在下载 js 时正在查看的网站。浏览器缓存在一定程度上缓解了这种情况,就好像您已经拥有它一样,您不会重新下载它,而且它们使用相当激进的缓存控制。

但是,如果您发布了一项隐私政策,表明您不会与第三方共享跟踪信息,那么您现在就是在对您的用户撒谎。如果您被要求包含这样的隐私要求,例如,您正在开发一个政府网站,那么您现在就违反了法律

</锡纸豆豆>

广告网络、异地图像等也会发生完全相同的事情,因此对您来说可能没什么大不了的,但请检查您的隐私政策要求。

对于谷歌的具体情况,他们在googleapis 的服务条款中明确说明:

...其中包括在您用户的计算机上存储唯一可识别的跟踪 cookie。


请注意,即使是 StackOverflow 的隐私政策也从未提及 Google 可能会被 ping 到让他们知道您访问过他们的网站,也没有提到该网站中嵌入了通用的 QuantServe 跟踪图像。它提到“我们”做这做那,但大概“我们”不打算包括 QuantServe 或谷歌。隐私可能是一件棘手的事情。

于 2010-04-28T02:29:51.743 回答