有一些方法来包括jQuery和jQuery UI,我想知道人们使用什么?

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

我最近一直在使用谷歌JSAPI,但发现它需要很长时间来设置SSL连接,甚至只是解析google.com。我一直在使用以下谷歌:

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

我喜欢使用谷歌的想法,以便在访问其他网站时缓存它,并从我们的服务器节省带宽,但如果它一直是网站的缓慢部分,我可能会改变包括。

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

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

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>

Edit2:下面是我如何在过去的一年里没有任何问题地包含jQuery的:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>

区别在于去掉了http:。通过删除这个,您就不需要担心在http和https之间切换了。


当前回答

如果我负责“活动”网站,我最好知道正在发生的一切 进入我的网站。出于这个原因,我自己托管了jquery-min版本,要么在同一个服务器上,要么在静态/外部服务器上,但无论哪种方式,只有我(或我的程序/代理)可以在验证/测试每个更改后更新库

其他回答

这里有几个问题。首先,你指定的异步加载方法:

<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>

有几个问题。脚本标记在检索时暂停页面加载(如果需要)。如果加载很慢,这很糟糕,但jQuery很小。上述方法的真正问题是,因为jquery.js加载独立于许多页面,它们将在jquery加载之前完成加载和渲染,所以你所做的任何jquery样式对用户来说都是可见的更改。

另一种方法是:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>

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

作为一个例子运行:

<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>

您应该看到表格出现,然后行变成黄色。

load()方法的第二个问题是它只托管有限范围的文件。这对于jquery来说是一个问题,因为它非常依赖插件。如果你试图包含一个jquery插件与<script src="…">标签和google.load()插件可能会失败的消息"jQuery is not defined",因为它还没有加载。我真不知道还有什么办法。

第三个问题(任何一种方法)是它们是一个外部负载。假设你有一些插件和你自己的Javascript代码,你至少有两个外部请求来加载你的Javascript。你最好获取jquery、所有相关插件和你自己的代码,然后把它们放到一个小文件中。

你应该使用谷歌的Ajax库API来托管吗?:

As to load times, you're actually loading two scripts - the jsapi script and the mootools script (the compressed version from above). So that is two connections, rather than one. In my experience, I found that the load time was actually 2-3 times slower than loading from my own personal shared server, even though it was coming from Google, and my version of the compressed file was a couple of K larger than Google's. This, even after the file had loaded and (presumably) cached. So for me, since the bandwidth doesn't matter much, isn't going to matter.

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

所以在最后,我真的不能看到我使用谷歌AJAX API为jQuery至少(更“完整”的API是一个不同的故事在某些方面)除了在这里张贴例子。

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

当其他站点(谷歌,jquery.com等)宕机时,您是否愿意在您的站点上停机?减少依赖是关键。

您希望在外部服务器上托管的一个原因可能是绕过浏览器对特定服务器并发连接的限制。

但是,考虑到您正在使用的jQuery文件可能不会经常更改,浏览器缓存会起作用,使这一点在大多数情况下变得毫无意义。

把它放在外部服务器上的第二个原因是降低到自己服务器的流量。

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

jQuery 1.3.1 min的大小只有18k。我不认为这是一个太大的打击,要求在初始页面加载。它会在那之后被缓存。因此,我自己主持。

我只包含了jQuery站点的最新版本:http://code.jquery.com/jquery-latest.pack.js,它符合我的需求,而且我从来不用担心更新。

编辑:对于一个主要的网络应用,当然要控制它;下载并自己提供。但对于我的个人网站,我一点也不在乎。东西不会神奇地消失,它们通常会先被弃用。我对它的了解足以让我知道在未来的版本中需要修改哪些内容。