代码之家  ›  专栏  ›  技术社区  ›  brahn

服务js库:来自google代码或使用asset packager的更好性能?

  •  3
  • brahn  · 技术社区  · 15 年前

    我正在开发一个使用大型javascript库的rails应用程序。 jquery UI ,我还有一些自己的javascript文件。我在用 asset packager 打包我自己的javascript。我在考虑两种方式来提供这些文件:

    1. 从google代码链接到jquery库,如中所述 http://code.google.com/apis/ajaxlibs/documentation/#jquery ,并使用asset packager分别打包和提供我的javascript文件。

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

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

    然而,我也想到,如果我自己为他们提供服务,用户只需要发出一个请求来获取合并的javascript(而不是一个请求用于我的合并javascript,另一个请求用于google提供服务的库)。

    哪种方法将提供最好的最终用户体验(可能以更快的加载时间的形式?)

    3 回复  |  直到 15 年前
        1
  •  4
  •   Nick Craver    15 年前

    我会说“这取决于”,但在大多数情况下我会 选项1 (谷歌托管)面向互联网的网站。对于intranet,我会在内部托管所有内容,原因有很多,但这似乎超出了您的问题范围。

    总的来说有几件事要考虑:

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

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

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

    根据自定义代码的百分比和框架的数量,google的cdn可以从服务器上获取大部分静态js流量,让它可以用于 服务和做其他事情 (那是 巨大的 有利于高流量的网站),并且当您更改脚本(比新的框架版本更常见)时,客户端只下载该脚本,而不再下载整个框架。

        2
  •  4
  •   Mitch Dempsey    15 年前

    google的好处是,因为它被许多网站使用,用户可能已经浏览过使用google js库的网站,在这种情况下,它已经被缓存在他们的机器上,他们可能根本不需要下载文件。

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

        3
  •  0
  •   kibibu laffuste    15 年前

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

    <tinfoilbeanie>

    当您使用google(或其他人)的cdn时,会传递一个referer头,其中包含页面的地址以及一个跟踪cookie。哎哟!谷歌现在知道你的用户下载js的时候在看哪个网站。浏览器缓存在一定程度上缓解了这种情况,就好像你已经拥有了它,你不会重新下载它,它们使用了相当激进的缓存控制。

    但是,如果您发布了一个隐私策略,声明您不会与第三方共享跟踪信息,则 你现在对你的用户撒谎 . 如果你被要求包含这样的隐私要求,比如说,你正在开发一个政府网站, 你现在违反了法律 .

    </tinfoilbeanie>

    同样的事情也发生在广告网络、非现场图片等方面,所以这对你来说可能不是什么大不了的事情,但是要检查你的隐私政策要求。

    对于google的具体情况,它们在 terms of service for googleapis :

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


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

    推荐文章