JavaScript:按需加载jQuery

3
什么是在页面动态引入jQuery库的最轻量级方式? 我正在处理一个页面,在有时只运行几个自定义脚本(10行),而其他时候需要整个jQuery。

你不必担心jQuery的加载时间,因为它托管在Google上,几乎所有的网站都使用相同的链接,所以已经被缓存在每个人的电脑中了。 - Khodor
7个回答

10

在需要使用jQuery时,只需添加一个jQuery的


2

直接加入即可。

如果您在其他页面上使用jQuery,则如果它们在您的网站上执行许多操作(或经常访问它),则可能已经缓存。 但是,请使用缩小形式。 使用Google的逻辑是正确的,但缓存的可能性较小。

关于您的评论:您有多频繁地验证自己网站上的页面? 如果您的网站被破解了,您会多快知道? 如果Google托管的代码被更改,发现速度将高出许多数量级,对您的网站的影响将相对较小,我认为。


1

从谷歌的CDN中引用它:

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

你的客户很可能已经在他们的浏览器中缓存了jQuery。


2
我不信任谷歌处理这个。我认为这种做法是一个巨大的安全问题...而且我正在等待其他网络开发者们醒悟过来并意识到这一点。我想自己来提供文件。我相信自己。 - BuddyJoe
1
我在想是否可以编写代码检查从谷歌获取的jQuery库的内容并计算校验和或其他内容。当然,不良版本的jQuery可能会破坏JavaScript环境,以至于您无法信任校验和代码。 - Pointy
1
我承认我比大多数公司更信任谷歌。但是想想所有提供“分享此”小部件的公司,人们在他们的页面上包含了他们的脚本。我根本不信任这些随意的公司。如果有人黑掉这些网站之一,他们可以注入任何脚本到您的页面中……用于钓鱼或将您重定向到攻击等等…… - BuddyJoe
网络社区需要进行更广泛的讨论,以制定一个新的标准来隔离一些第三方脚本。我认为我听到其他人谈论过这个问题,涉及到对JSON进行评估。(类似的问题) - BuddyJoe
新的浏览器内置了不仅仅是eval的JSON解码器,这要好得多。但就像网络上的所有东西一样,总会有顽固分子(我在看你,IE)。 - Justin

1

是的,我会一直包含它 - 它很小,如果你使用谷歌CDN,它应该已经被缓存了。

如果你必须按需加载它,你可以编写将脚本标签附加到body的代码。这段代码非常常见。

void((function(){
  var e=document.createElement('script');
  e.setAttribute('type','text/javascript');
  e.setAttribute('src','jquery.js');
  document.body.appendChild(e)
})());

看到Darin在CDN上的评论了,这更像是+1。 - BuddyJoe
请注意,上面的代码适用于在任何地方插入 - 实际上它来自于书签。根据您的需求进行调整。 - Justin

1

一旦用户已经下载了JQuery,它就会被缓存在他们的系统中,所以在第一次初始下载之后包含它实际上非常简单。你可以直接在需要它的页面上包含它,而不必担心在页面后期尝试将其添加到JS运行时中。


0
    <script src="http://www.google.com/jsapi"></script> 
<script> 
//your awesome google
 google.load("jquery", "1");
  </script>

我不明白这些人为什么说谷歌存在安全问题,而且不想让谷歌提供服务。你们是错的(或者给我理由)。我认为更有可能下载到一个错误或修改过的jquery版本(你应该总是去官网),而不是谷歌给你带来麻烦。谷歌很棒,他们使得事情变得容易,为你提供主机,并且很可能拥有比你薄弱的Web服务器更高的吞吐量,那么为什么你不使用它呢?

抱歉我重复了代码,我还在开始使用这个网站,但我找不到回复按钮。


我不想信任其他的网络服务器,这就是全部。我不会允许第三方在我的页面上注入脚本。即使我认为我知道他们正在注入什么。因为他们可以(1)移动它(2)更改它(3)他们可能会被黑客攻击,然后对我的页面进行任何想要的操作。我意识到在谷歌上这种情况可能性较小。但为什么不选择安全路线呢? - BuddyJoe

0

也许你会发现Google AJAX APIs很有用。你可以通过调用以下代码随时加载jQuery:

google.load("jquery", "1");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接