你在哪里包含jQuery库?谷歌JSAPI?CDN?

Dar*_*ein 242 javascript ssl jquery google-ajax-libraries

有几种方法可以包含jQuery和jQuery UI,我想知道人们在使用什么?

  • 谷歌JSAPI
  • jQuery的网站
  • 你自己的网站/服务器
  • 另一个CDN

我最近一直在使用Google JSAPI,但发现设置SSL连接需要很长时间,甚至只能解决google.com问题.我一直在谷歌使用以下内容:

<script src="https://www.google.com/jsapi"></script>
<script>
google.load('jquery', '1.3.1');
</script>
Run Code Online (Sandbox Code Playgroud)

我喜欢使用Google的想法,因此它在访问其他网站时被缓存并从我们的服务器节省带宽,但如果它一直是网站的缓慢部分,我可能会更改包含.

你用什么?你有什么问题吗?

编辑:刚刚访问过jQuery的网站,他们使用以下方法:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

编辑2:这是我去年包括jQuery没有任何问题的方式:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

不同的是删除http:.通过删除它,您不必担心在http和https之间切换.

Dsc*_*duc 153

毫无疑问,我选择让Google API服务器提供JQuery服务.我没有使用jsapi方法,因为我没有利用任何其他Google API,但如果改变了那么我会考虑它...

第一: Google api服务器分布在世界各地而不是我的单一服务器位置:更紧密的服务器通常意味着访问者的响应时间更快.

第二:许多人选择在Google上托管JQuery,因此当访问者访问我的网站时,他们可能已在其本地缓存中安装了JQuery脚本.预缓存内容通常意味着访问者的加载时间更短.

第三:我的网络托管公司向我收取使用的带宽费用.如果访问者可以在其他地方获得相同的文件,则每个用户会话消耗18k是没有意义

我了解到,我将一部分信任放在Google上,以提供正确的脚本文件,并在线提供.到目前为止,我对使用谷歌并没有感到失望,并将继续这种配置,直到它有意义为止.

有一点值得指出......如果您的网站上有安全页面和不安全页面的混合,您可能需要动态更改Google源代码,以避免在安全页面中加载不安全内容时看到的通常警告:

这是我想出的:

<script type="text/javascript">
    document.write([
        "\<script src='",
        ("https:" == document.location.protocol) ? "https://" : "http://",
        "ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js' type='text/javascript'>\<\/script>" 
    ].join(''));
</script>
Run Code Online (Sandbox Code Playgroud)

更新20109月8日 - 通过删除HTTP和HTTPS并简单地使用以下语法,已经提出了一些建议来降低代码的复杂性:

<script type="text/javascript">
    document.write("\<script src='//ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js' type='text/javascript'>\<\/script>");
</script>
Run Code Online (Sandbox Code Playgroud)

此外,如果您想确保加载了最新的主要版本的jQuery库,您还可以更改URL以反映jQuery主编号:

<script type="text/javascript">
    document.write("\<script src='//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' type='text/javascript'>\<\/script>");
</script>
Run Code Online (Sandbox Code Playgroud)

最后,如果您不想使用Google并且更喜欢使用jQuery,则可以使用以下源路径(请记住,jQuery不支持SSL连接):

<script type="text/javascript">
    document.write("\<script src='http://code.jquery.com/jquery-latest.min.js' type='text/javascript'>\<\/script>");
</script>
Run Code Online (Sandbox Code Playgroud)

  • 我同意你的所有三个原因,这就是为什么我在我的生产网站上包含来自谷歌的jquery.我没有指定协议,而是在脚本标记中引用url而不是SSL页面的js动态注入.似乎对我来说很好.<script src ="// ajax.google ..."> </ script> (26认同)
  • 我没有看到`document.write()`被使用了什么?一个简单的`<script src ="..."> </ script>`可以放在标题中.**→@ Dscoduc:←**它不会更快,它只是取消警告信息.如果您的网站使用的是安全的https,并且您从非编码内容(例如`http:// googleapis`)中提取,那么您将收到该警告消息.如果你只使用http但是你要链接到`https:// googleapis`会更快一些,那么"安全"编码就会有一些开销.因此,链接到`http:// googleapis`会快一点. (11认同)
  • 我也同意一切,除了简化之外,我使用这种格式:<script src ="// ajax.google ..."> </ script>.然后我不需要担心http或https.感谢Aaron Wagner. (9认同)
  • 另请注意,Google将使用此功能跟踪用户访问的网站.因此,如果您正在建立一个需要意识到隐私的网站,那么托管几个小文件对于隐私来说是一个很小的代价. (5认同)

Fra*_*nov 19

您可能希望在外部服务器上托管的一个原因是解决与特定服务器的concurent连接的浏览器限制.

但是,鉴于您使用的jQuery文件可能不会经常更改,浏览器缓存将启动并使大多数情况下都没有用.

在外部服务器上托管它的第二个原因是降低到自己服务器的流量.

但是,考虑到jQuery的大小,它可能只是您流量的一小部分.您应该尝试优化实际内容.


Mar*_*urd 14

jQuery 1.3.1分钟只有18k的大小.我不认为在初始页面加载时要求太多.之后它会被缓存.结果,我自己主持.

  • 基于你陈述的理由,我恭敬地不同意.如果您获得大量流量,那么每个会话18k可以快速累加大量流量.特别是如果您的网络托管费用按使用的带宽计算... (7认同)
  • 除非您的网站非常小,否则18k将始终只是您流量的一小部分. (2认同)

Phi*_*ney 14

如果您想使用Google,直接链接可能会更具响应性.每个库都具有为直接文件列出的路径.这是jQuery路径

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

只是重新阅读您的问题,您有使用https的原因吗?这是Google在其示例中列出的脚本标记

<script src="http://www.google.com/jsapi"></script>
Run Code Online (Sandbox Code Playgroud)

  • 使用HTTPS因为网站是HTTPS,所以有点必须. (3认同)
  • https网站上的http链接很烦人,因为IE(至少在默认情况下)会让你烦恼"这个网站包含安全和不安全内容的混合物".确认框. (2认同)

sla*_*acy 8

我不希望我开发的任何公共站点依赖于任何外部站点,因此,我自己托管jQuery.

当其他(Google,jquery.com等)发生故障时,您是否愿意在您的网站上停电?较少的依赖关系是关键.

  • 如果谷歌不起作用,互联网可能会下降:P (16认同)
  • 使用本地副本还有其他充分的理由:谷歌经常在伊朗,中国等许多国家被封锁.这意味着超过10亿人无法访问. (6认同)
  • 嗯... slacy正在使用谷歌分析?他不是只是说他不希望他开发的任何公共网站依赖外部网站吗?;-) (3认同)
  • 我将用户体验(快速加载时间)放在那里,具有较少的依赖性. (2认同)

Kri*_*ten 6

优点:Google上的主机有好处

  • 可能更快(他们的服务器更优化)
  • 他们正确处理缓存 - 1年(我们很难做出更改,以便在我们的服务器上获得正确的标题)
  • 已在另一个域上拥有指向Google托管版本的链接的用户已在其缓存中包含该文件

缺点:

  • 某些浏览器可能会将其视为XSS跨域并禁止该文件.
  • 特别是运行Firefox NoScript插件的用户

我想知道你是否可以从谷歌包括,然后检查一些全局变量的存在,或者某些,如果你的服务器没有加载?

  • 这是Firefox的缺点,而不是谷歌的.) (3认同)

cle*_*tus 6

这里有一些问题.首先,您指定的异步加载方法:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load('jquery', '1.3.1');
  google.setOnLoadCallback(function() {
    // do stuff
  });
</script>
Run Code Online (Sandbox Code Playgroud)

有几个问题.脚本标记在检索页面时会暂停页面加载(如有必要).现在,如果加载速度慢,这很糟糕,但jQuery很小.上面的方法,真正的问题是,由于负载的jquery.js许多网页独立发生,他们将完成加载和渲染的jQuery加载所以任何jQuery的造型你这样做将是一个前对用户可见的变化.

另一种方式是:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

尝试一些简单的例子,有一个简单的表,并使用setOnLoadCallback()方法将单元格的背景更改为黄色,并使用静态jquery.min.js加载将$(document).ready()更改为黄色.第二种方法没有明显的闪烁.第一个会.就个人而言,我认为这不是一个好的用户体验.

举个例子来运行:

<html>
<head>
  <title>Layout</title>
  <style type="text/css">
    .odd { background-color: yellow; }
  </style>
</head>
<body>
<table>
  <tr><th>One</th><th>Two</th></tr>
  <tr><td>Three</td><td>Four</td></tr>
  <tr><td>Five</td><td>Six</td></tr>
  <tr><td>Seven</td><td>Nine</td></tr>
  <tr><td>Nine</td><td>Ten</td></tr>
</table> 
<script src="http://www.google.com/jsapi"></script>
<script>
  google.load("jquery", "1.3.1");
  google.setOnLoadCallback(function() {
    $(function() {
      $("tr:odd").addClass("odd");
    });
  });
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

您(应该)看到表格出现,然后行变黄.

google.load()方法的第二个问题是它只托管有限范围的文件.这是jquery的一个问题,因为它非常依赖插件.如果您尝试,包括有一个jQuery插件<script src="...">标签和google.load()插件可能会失败,"没有定义jQuery的",因为它尚未加载的消息.我真的没有办法解决这个问题.

第三个问题(使用任一方法)是它们是一个外部负载.假设你有一些插件和你自己的Javascript代码你到最小的两个外部请求加载你的Javascript.你可能会更好过jQuery的获得,所有相关的插件和你自己的代码,并把它变成一个缩小的文件.

你应该使用谷歌的AJAX库API的主机?:

至于加载时间,你实际上加载了两个脚本 - jsapi脚本和mootools脚本(上面的压缩版本).这是两个连接,而不是一个连接.根据我的经验,我发现加载时间实际上比从我自己的个人共享服务器加载慢2-3倍,即使它来自谷歌,我的压缩文件版本比谷歌大几K.这甚至在文件加载和(可能)缓存之后.所以对我来说,由于带宽并不重要,所以不重要.

最后,你有一个潜行的问题,一个偏执的浏览器将请求标记为某种XSS尝试.这通常不是默认设置的问题,但在公司网络上,用户可能无法控制他们使用的浏览器,更不用说安全设置可能会出现问题.

所以最后我不能真正看到我至少使用Google AJAX API for jQuery(更多"完整"API在某些方面是不同的故事),除了在这里发布示例.