`
xiaoboss
  • 浏览: 650824 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

延迟异步加载 JavaScript

阅读更多

为了增强网站的交互效果,我们常常会使用 jQuery,ExtJS 或者自己编写的 JS 类库,这些文件通常储存在页面外部文件中,体积比较巨大,在页面加载的时候需要比较长的时间,并且会阻碍后面的资源加载。

最近在查看 Google Analytics 统计代码的时候,发现 Google 并没有直接用 <script src="..."></script> 的形式来加载 js 文件,而是采用了异步加载的方法:

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    //var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

 先建立一个 script 标签,赋予 async 属性使其能够异步加载,再指定需要加载的 js 文件的路径。当上面这段代码运行后,页面头部会多出这样的一行:

<script src="http://www.google-analytics.com/ga.js" async="" type="text/javascript"></script>

把 Google Analytics 的统计代码改一下,使其能够用在我平时做的项目中:

(function() {
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.async = true;
    s.src = 'http://CodeCTO.com/script.js';
    var x = document.getElementsByTagName('script')[0];
    x.parentNode.insertBefore(s, x);
})();

大家可以对比一下启用异步加载前后的瀑布图。

。。。。

可以看到,如果没有使用 async 属性的话,后面的资源必须等 js 文件加载完以后才开始加载。

使用 async 属性以后,页面上的两个资源可以同时加载。

注意: async 是一个 HTML5 属性,浏览器必须支持 HTML5 才有效果。

还有一种情况,某些 js 文件根本不需要这么快就加载到页面里,怎么办?可以参考我以前写的 JavaScript 事件监听绑定 ,让 js 文件在页面所有内容都完全载入以后才加载进来。

(function() {
    function async_load(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'http://CodeCTO.com/script.js';
        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
    }
    if (window.attachEvent){
        window.attachEvent('onload', async_load);
    }else{
        window.addEventListener('load', async_load, false);
    }
})();

使用这个方法后,js 文件在左右资源加载完成后在开始载入。

当然这个方法还有一个弊端:如果页面上的外部资源(例如图片)非常多的话,这个 js 文件可能要等待很久才开始加载,怎么解决这个问题呢?熟悉 js 的同学相信已经想到了解决的办法,或者,你可以参考一下 jQuery 的 $(document).ready() 方法。

分享到:
评论

相关推荐

    js异步加载代码

    JavaScript 异步加载是优化网页性能的关键技术,它能让页面在不等待脚本执行的情况下继续渲染,从而提高用户体验。在现代网页开发中,由于 JavaScript 文件的体积越来越大,同步加载(即默认方式)会阻塞浏览器解析...

    lazyload异步加载图片

    **懒加载(Lazy Load)异步加载图片技术详解** 懒加载是一种优化网页性能的技术,它主要应用于图片或者视频等大体积资源的加载。在网页初次加载时,只加载视口内的图片,当用户滚动页面,即将进入视口的图片才会被...

    JS异步加载图片

    JS异步加载图片的核心思想是将图片的加载延迟到需要时,或者当用户滚动到图片即将可见的位置时。这通常通过监听滚动事件、计算图片距离视口的距离来实现。 ### 实现方式 1. **DOMContentLoaded事件**:当HTML文档...

    jquery 异步加载页面

    **jQuery 异步加载页面详解** 在Web开发中,异步加载页面是一种常见的优化技术,它允许我们在不刷新整个页面的情况下动态地加载新的内容。jQuery,一个强大的JavaScript库,提供了丰富的API来实现这一功能,使得...

    jquery 图片延迟加载插件制作tab选项卡图片异步加载

    本文将详细介绍如何使用jQuery制作一个图片延迟加载插件,以及如何将其应用于tab选项卡中的图片异步加载。 首先,我们需要理解jQuery的基本用法。jQuery是一个强大的JavaScript库,提供了简洁的API来处理DOM操作、...

    JS异步加载库

    JavaScript(JS)异步加载库是一种能够帮助开发者在网页中延迟加载或按需加载JavaScript资源的工具。这种库可以显著提高网页性能,减少首屏加载时间,优化用户体验,特别是对于那些依赖大量脚本的复杂应用而言。下面...

    extjs tree 异步加载树型

    异步加载树型是 ExtJS Tree 的一个重要特性,允许只在需要时动态加载子节点,从而提高页面的加载速度和用户体验。 异步加载通常通过 AJAX 请求实现,只有当用户展开一个节点时,才会向服务器请求该节点的子节点数据...

    手机移动端Tab选项卡切换带下拉数据异步加载js插件

    总结,手机移动端Tab选项卡切换带下拉数据异步加载js插件是一种高效的页面交互解决方案,它通过结合Tab选项卡、下拉加载和异步加载技术,提升了移动应用的性能和用户体验。开发者可以通过理解这些核心概念和技巧,...

    javascript异步加载

    为了解决这个问题,开发人员通常采用异步加载JavaScript的方法,以提高网页性能和用户体验。下面将详细介绍三种常见的异步加载JavaScript的实现方案。 1. **动态`&lt;script&gt;`标签插入**: 这是最常见的异步加载方法...

    jquery ztree 异步加载

    因此,采用异步加载的方式,即延迟加载技术,成为了提升性能的关键策略。 #### 二、ZTree异步加载原理 异步加载的基本思路是在树结构初次加载时仅加载根节点或部分数据,当用户展开某个节点时,再通过AJAX请求从...

    js异步加载.docx

    JavaScript 异步加载是网页优化的关键技术之一,它允许脚本在不阻塞浏览器解析页面的情况下进行下载和执行。在传统的同步加载模式下,JavaScript 文件的加载会暂停HTML的解析,直到该脚本完全下载并执行完毕。这可能...

    图片异步加载

    在网页开发中,图片异步加载通常通过JavaScript库来实现,如jQuery及其插件`jquery.lazyload.js`。这个插件是专门为延迟加载图片设计的,它监听用户的滚动事件,只有当图片进入视口(即用户可以看到的区域)时,才会...

    scriptjs异步JavaScript加载器和依赖管理器

    `script.js`是一个轻量级且功能强大的工具,它允许开发者实现异步加载JavaScript文件,并有效地管理它们之间的依赖关系,从而提升网页的加载速度和用户体验。 1. **异步加载的优势** - **非阻塞加载**:传统的方式...

    jQuery选项卡切换图片异步加载代码.zip

    JavaScript,尤其是jQuery,用于处理图片的异步加载逻辑,包括监听事件、判断图片是否在视口内、请求图片数据以及插入到DOM中。 具体实现过程通常如下: 1. **HTML结构**:创建选项卡元素和图片容器,每个选项卡...

    使用jQuery异步加载 JavaScript脚本解决方案

    JavaScript 加载器在 Web 开发中是非常强大和有用的工具。目前流行的几个加载器,像 curljs、LABjs 和 RequireJS 使用都很广泛。他们功能强大的,但有些情况下可以有更简单的方案。 如果你正在使用 jQuery,有一个...

    Angular 异步加载Controller

    - **RequireJS或SystemJS**:这些是流行的前端模块加载库,可以用来按需加载JavaScript文件。通过结合使用Angular和这些库,可以在需要时动态加载Controller的脚本。 3. 使用Angular的`$ocLazyLoad`服务: `$...

    html延迟加载JS和CSS

    2. 针对JavaScript的延迟加载,可能使用了`async`或`defer`属性,或者自定义的异步加载逻辑。 3. 对于CSS延迟加载,可能提供了动态插入`&lt;link&gt;`标签或使用数据属性标记待延迟加载的CSS,并在适当的时间触发加载。 4....

    jquery.scrollLoading图片延迟加载

    **jQuery.scrollLoading 图片延迟加载技术详解** 在网页设计中,图片是不可或缺的元素,但过多的图片会增加页面的加载时间,影响用户体验。为了解决这个问题,"jQuery.scrollLoading" 提供了一种图片延迟加载的解决...

Global site tag (gtag.js) - Google Analytics