在多个域之间共享一个JavaScript文件

时间:2011-11-16 08:15:50

标签: javascript jquery browser

问题定义:

  • 服务器是一个嵌入式系统,无法访问Internet
  • 每个服务器都由使用JavaScript的Web界面管理。
  • 每个服务器都有一个JQuery库的本地副本。
  • 客户端(浏览器)通过非常慢的连接连接到嵌入式系统(服务器)。
  • 客户拥有最新的浏览器(HTML5,CSS3,JavaScript 1.8.5)
  • 客户端也未连接到Internet。
  • 客户端无法同时访问多个服务器(服务器位于远程位置,很可能客户端只能访问一台服务器而不是其他服务器,但当天晚些时候客户端可能会转到另一个位置并连接到另一台服务器)。
  • 每个服务器都有一个IP地址(不一定在同一范围内)和没有DNS名称
  • 每次客户端连接到嵌入式服务器时,它都会获取所有文件,包括巨大的JQuery库(巨大= ~90KB)

问题: JQuery库对于这种缓慢的连接来说太大了,但是一次性下载是可以接受的。但是,我们不希望客户端在每次连接到每个新服务器时都下载它。所有这些设备上的JQuery都是一样的。但显然浏览器缓存是基于域的。我们如何缓存JQuery库,以便客户端每次连接到新服务器时都不必下载JQuery?

4 个答案:

答案 0 :(得分:1)

只需在一个地方链接到它......

例如,如果您要将单个服务器http://1.2.3.4/指定为CDN,请在其上添加jQuery,并使用<script src="http://1.2.3.4/jquery.min.js"></script>

在脚本中链接到该服务器

答案 1 :(得分:1)

您可以将其链接到链接标记中的IP。服务器不必访问该访问权限或任何内容,因此所有客户端都将始终从同一服务器访问jquery,因此它被缓存。

答案 2 :(得分:0)

以下是一个简单的解决方案:您的所有客户都必须编辑他们的/etc/hosts文件(Google可以在Windows上找到它)并在其配置中添加如下所示的行:

1.2.3.4 jquery-from-closest-server.com

每个客户端必须找出最近的具有jQuery的服务器,并将1.2.3.4替换为其IP地址。

在HTML代码中,请始终使用链接http://jquery-from-closest-server.com/jquery.js

为安全起见,您可能希望为有互联网访问权限的客户注册jquery-from-closest-server.com

当浏览器要求提供该文件时,它将使用/etc/hosts来解析该IP地址。由于所有嵌入式设备的域名都是相同的(浏览器会忽略IP地址的更改),因此脚本将为所有客户端下载一次。

请注意,这意味着您永远无法升级到更新版本的jQuery。问题是您必须同时在所有嵌入式设备上更换它,因为无法告知客户从哪台服务器下载它。

如果这让您感到困扰(并且在您发现第一个严重错误后大约四个月内),这是另一种解决方案:不是从嵌入式设备提供HTML,而是分发静态Web应用程序(一组HTML文件)和JavaScript)哪个客户可以在他们的桌面上安装。使用AJAX和iframe将静态Web应用程序的某些部分替换为嵌入式设备中的数据。

优点:

  • 非常快(根本没有下载)
  • 嵌入式设备上的代码很少
  • 简易升级策略
  • 当您需要升级嵌入式设备或控制器应用程序时,不会出现死锁。

[编辑] PS:考虑用gzip压缩jQuery。这会留下33KB的文件。所有HTML5浏览器都可以解码压缩文件,您只需通过设置必要的HTTP标头来告诉它们。

答案 3 :(得分:0)

显然没有标准方法可以在我们的项目中包含JQuery,所以我们选择用较小的类似库替换JQuery。这些是选项:

  • JQuery mobile更适合我们的项目,因为它具有更小的尺寸,几乎可以完成我们从JQuery所需的一切。
  • Zepto.js也是另一个合适的替代品。
  • JQuip是JQuery的精简版,可以帮助我们的特定项目。