可以推迟 jQuery 的加载吗?

2024-03-17

让我们面对现实吧,jQuery/jQuery-ui 的下载量很大。

谷歌推荐JavaScript 的延迟加载 http://code.google.com/speed/page-speed/docs/payload.html#DeferLoadingJS以加快初始渲染速度。我的页面使用 jQuery 设置一些选项卡,这些选项卡位于页面下方(大部分在初始视图之外),我想将 jQuery 推迟到页面渲染之后。

Google 的延迟代码在页面加载后通过挂钩到正文 onLoad 事件向 DOM 添加一个标签:

<script type="text/javascript">

 // Add a script element as a child of the body
 function downloadJSAtOnload() {
 var element = document.createElement("script");
 element.src = "deferredfunctions.js";
 document.body.appendChild(element);
 }

 // Check for browser support of event handling capability
 if (window.addEventListener)
 window.addEventListener("load", downloadJSAtOnload, false);
 else if (window.attachEvent)
 window.attachEvent("onload", downloadJSAtOnload);
 else window.onload = downloadJSAtOnload;

</script>

我想以这种方式推迟 jQuery 的加载,但是当我尝试时,我的 jQuery 代码未能找到 jQuery(对我来说并非完全出乎意料):

$(document).ready(function() {
    $("#tabs").tabs();
});

所以,看来我需要找到一种方法来推迟 jQuery 代码的执行,直到加载 jQuery。如何检测添加的标签已完成加载和解析?

作为一个推论,似乎异步加载 http://code.google.com/speed/page-speed/docs/rtt.html#PreferAsyncResources也可能包含一个答案。

有什么想法吗?


试试这个,这是我不久前从 jQuerify 书签中编辑的内容。我经常使用它来加载 jQuery 并在加载后执行内容。当然,您可以将那里的 url 替换为您自己的自定义 jquery 的 url。

(function() {
      function getScript(url,success){
        var script=document.createElement('script');
        script.src=url;
        var head=document.getElementsByTagName('head')[0],
            done=false;
        script.onload=script.onreadystatechange = function(){
          if ( !done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') ) {
            done=true;
            success();
            script.onload = script.onreadystatechange = null;
            head.removeChild(script);
          }
        };
        head.appendChild(script);
      }
        getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js',function(){
            // YOUR CODE GOES HERE AND IS EXECUTED AFTER JQUERY LOADS
        });
    })();

我真的会将 jQuery 和 jQuery-UI 合并到一个文件中,并使用它的 url。如果您真的想单独加载它们,只需链接 getScripts:

getScript('http://myurltojquery.js',function(){
        getScript('http://myurltojqueryUI.js',function(){
              //your tab code here
        })
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以推迟 jQuery 的加载吗? 的相关文章

随机推荐

  • .htaccess 重定向文件夹

    All 我想重定向所有访问的流量http 我的网站 http mysite to http mysite public http mysite public文件夹 目前我正在 htaccess 文件中使用以下内容来执行此操作 它适用于根目录
  • 在python中读取.dat文件

    我有一个 dat 文件 我不知道它是如何创建的 使用了什么分隔符以及有关它的任何详细信息 我只有相应的 mdf 和 csv 文件 就这样 python 有什么方法可以读取这个 dat 文件吗 我尝试过的几种方法 file 736 2 Per
  • Bash 中的 Echo 换行符打印文字 \n

    如何打印换行符 这仅仅打印 n echo e Hello nWorld Hello nWorld Use printf反而 printf hello nworld n printf在不同环境下的行为比echo
  • 我可以在 mongodb 的 $match 聚合函数中使用 $in 吗

    我试图在 match 聚合 函数中使用 in 运算符 由于某种原因 它不适用于 Id 字段 但我找不到任何文档指出 mongodb 不支持此功能 var ids 1 2 3 4 an example I am using real mong
  • Django 聚合:仅求和返回值?

    我有一个已付价值列表 并想显示已付总额 我已经使用了聚合和Sum一起计算值 问题是 我只想打印出总值 但聚合打印出 amount sum 480 0 480 0 为总增加值 在我看来 我有 from django db models imp
  • Kafka 一个分区有多个消费者

    我有一个将消息写入主题 分区的生产者 为了保持顺序 我想使用单个分区 并且我希望 12 个消费者读取该单个分区中的所有消息 没有消费者组 所有消息都应该发送给所有消费者 这是可以实现的吗 我读过一些论坛 每个分区只有一个消费者可以阅读 您可
  • 查找最长可能重复字符串的实用程序

    是否有任何工具或实用程序或 perl python 脚本可以在大型文本文件中找到最长的重复子字符串并打印这些模式以及每个模式出现的次数 http en wikipedia org wiki Longest repeated substrin
  • 如何从某个数字/偏移量开始自动增量?

    我正在运行 fgetcsv 查询以将一堆数据从 CSV 导入 WordPress 我想知道如何从某个数字开始自动递增 例如从 1000 开始 import1 INSERT into wp postmeta meta id post id m
  • Java 7 和 Java 8 之间的舍入不一致是一个错误吗?

    我发现舍入不一致DecimalFormat http docs oracle com javase 8 docs api java text DecimalFormat htmljava 7 和 java 8 之间的类 这是我的测试用例 D
  • 如果堆栈在数字较低的地址处增长,为什么指针比较会颠倒这一点?

    由于堆栈向下增长 即朝着数值较小的内存地址增长 为什么 i lt j是真的 如果我错了 请纠正我 但我想这是 C 创建者 C 维护的 的设计决定 但我想知道为什么 同样奇怪的是 堆分配的对象pin位于比堆栈变量在数值上更高的内存地址 这也与
  • 为什么在手动刷新响应时 ASP.NET 将 Content-Length 标头替换为 Transfer-Encoding 标头?

    我们的 Web 应用程序 ASP NET Web Forms 有一个页面 将向用户显示最近生成的 PDF 文件 由于 PDF 文件有时非常大 因此我们实现了一种 流式传输 方法 将其分块发送到客户端浏览器 尽管以块的形式发送数据 但我们在发
  • 使用 Cython 进行部分构建的构建

    我在构建中面临 cython 的问题 其中一部分是使用 cython 构建的模块 c文件和一个 pyx file 我已经尝试了很多解决方案 Sean Gillies 博客 814 将 pyproj 添加到构建中 http sgillies
  • (解)压缩 Base64 字符串

    PHP代码 txt John has cat and dog plain text txt base64 encode txt base64 encode txt gzdeflate txt 9 best compress txt base
  • Minecraft Forge EntityJoinWorldEvent 返回错误位置!错误

    在本地开发环境中使用 Eclipse Mars 1 Release 4 5 1 中的 Forge 1 8 9 I m trying to set a player s location every time they join or re
  • React:如何将道具从孩子传递到父母再到另一个孩子?

    我这里有一个简单的设置 我有一个父组件 其中有 2 个子组件附加到该父组件 在第一个子组件中 用户更改输入的值 然后 该更改的值将是我想从该子组件传递到父组件的道具 以便可以将其传递给附加到同一父组件的另一个子组件 Main parent
  • 如何在 Scrutor 中注册组件上的所有接口(类似 StructureMap)

    如何在程序集中注册所有接口scan扩展名没有在 ASP NET Core 2 中全部分开写入 在结构图中 Scan gt Declare which assemblies to scan Assembly StructureMap Test
  • Firebase 函数返回和承诺不会退出函数

    我仍然是 Firebase 世界的初学者 我一直在尝试找出以下代码的问题所在 但我在所有可能的方面都失败了 该代码应该检索uid来自数据库中的用户配置文件 然后使用它来更新身份验证配置文件 如果身份验证配置文件更新成功 则再次更新数据库配置
  • 高维中的凸包,找到多面体的顶点

    假设我有一个 6 维空间中的点云 我可以根据需要使其密集 这些点位于低维多面体的表面上 即点向量 x1 x2 x6 看起来是共面的 我想找到这个未知多面体的顶点 我当前的尝试通过 Python 中的 scipy 接口使用 qhull 算法
  • 用于收集 PC 硬件/操作系统信息的库

    是否有任何免费或开源库可以像 PC Wizard 的系统信息开发套件那样收集 PC 硬件和操作系统信息 我更喜欢 NET 程序集或本机 dll 这样我可以通过 PInvoke 使用它的功能 但 Java 也可以 你有没有尝试过WMI htt
  • 可以推迟 jQuery 的加载吗?

    让我们面对现实吧 jQuery jQuery ui 的下载量很大 谷歌推荐JavaScript 的延迟加载 http code google com speed page speed docs payload html DeferLoadi