zoukankan      html  css  js  c++  java
  • require.js 学习基础

    RequireJS 是一个JavaScript模块加载器,他的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤。可以用它来加速、优化代码,但其主要目的还是为了代码的模块化。

    先看下面示例:

      大家都知道js阻塞浏览器渲染,就是在加载页面内容时,遇到JS,在加载JS时,会停止对页面的加载,等JS加载完了,才会继续对页面进行加载,这样就会导致页面加载时间过长,使用RequireJS,就可以解决这个问题

     html:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
            <script src="js/require.js" data-main='js/main.js' type="text/javascript" charset="utf-8"></script>
        </head>
        <body>
            <div class="">
                fdfdfdfdfd
            </div>
        </body>
    </html>

    a.js:

    alert('111');

    main.js:

    require.config({
        paths:{
            a:'a'
        }
    });
    require(['a']);

    在执行alert的时候页面内容已经加载出来了

    require.js 可以防止js加载阻塞页面渲染

    基本API

    require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短

    • define 从名字就可以看出这个api是用来定义一个模块
    • require 加载依赖模块,并执行加载完后的回调函数

     大家可以看见页面顶层<script>标签含有一个特殊的属性data-main,这里就是入口JS,require.js使用它来启动脚本加载过程

    main.js

    require.config({//配置模块加载位置-也就是要加载JS的路劲,不用后缀.js
        paths:{//通过paths的配置会使我们的模块名字更精炼,paths还有一个重要的功能,就是可以配置多个路径,如果远程cdn库没有加载成功,可以加载本地的库,如:
            'jquery':["http://libs.baidu.com/jquery/2.0.3/jquery","jquery-1.7.min"],
            'base':'g-ZFbase'
        }
    });
    require(['jquery'], function() {
        //这样jquery 不是全局的,你要使用的时候通过require调用,如下
       $('div').click(function(){
               alert($(this).html());
       });
    });
    require(['jquery','base'], function($,base) {
        //在比如我自己封装了一个g-ZFbase.js,要用里面的ajax,ajax在ajax()方法里,但是他依赖于jquery,
        //可以2个一起调用
       ajax();
    });

    define:  定义一个模块,然后再页面中使用:

      例如:在a.js里定义一个define

    a.js:

    define(['jquery','base'],function($,base){
        //如上,我要用g-ZFbase.js里的ajax()方法,他依赖于jquery,所以2个一起调用
        ajax();
    });

    在main.js里:

    require.config({//配置模块加载位置-也就是要加载JS的路劲,不用后缀.js
        paths:{//通过paths的配置会使我们的模块名字更精炼,paths还有一个重要的功能,就是可以配置多个路径,如果远程cdn库没有加载成功,可以加载本地的库,如:
            'jquery':["http://libs.baidu.com/jquery/2.0.3/jquery","jquery-1.7.min"],
            'base':'g-ZFbase',
            a:'a'
        }
    });
    //require(['jquery','base'], function($,base) {
    //    //在比如我自己封装了一个g-ZFbase.js,要用里面的ajax,但是他依赖于jquery,
    //    //可以2可一起调用
    // ajax();
    //});
    
    require(['a']);

    就相当于原来在main.js里写的内容单独写到一个JS文件里把他看成一个模块,然后调用,这里把他放在了a.js里面了

    一个JS文件里只能放一个define,一个define只能有一个返回值/对象

    调用define 中的方法:

     main.js:

    require.config({//配置模块加载位置-也就是要加载JS的路劲,不用后缀.js
        paths:{//通过paths的配置会使我们的模块名字更精炼,paths还有一个重要的功能,就是可以配置多个路径,如果远程cdn库没有加载成功,可以加载本地的库,如:
            'jquery':["http://libs.baidu.com/jquery/2.0.3/jquery","jquery-1.7.min"],
            'base':'g-ZFbase',
            a:'a'
        }
    });
    require(['a'],function(obj){//obj-接收返回值,名字可不和返回值同名
        obj.t1();
    });

    a.js:

    define(function(){
        function test(){
            alert('test');
        }
        function t(){
            alert('t');
        }
        var obj = {
            t1:test,
            t2:t
        }
        return obj;
    })

    只有一个调用函数,可直接返回函数名 return t;

      

  • 相关阅读:
    让文字在标签li的底部
    根据不同的浏览器对不同元素进行css调整
    根据ie浏览器不同的类别选择不同的css
    ASP流程控制语句
    asp动态生成google的sitemap地图的代码
    glusterfs 思维导图
    利用saltstack管理边缘计算节点
    ACK EDGE 实战
    /dev/shm 容器下调优
    MySQL DBA 001
  • 原文地址:https://www.cnblogs.com/bruce-gou/p/5680983.html
Copyright © 2011-2022 走看看