• RequireJS解决代码依赖问题,异步加载js,避免页面失去相应


    RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤。可以用它来加速、优化代码,但其主要目的还是为了代码的模块化。它鼓励在使用脚本时以module ID替代URL地址。
    RequireJS以一个相对于baseUrl的地址来加载所有的代码。 页面顶层<script>标签含有一个特殊的属性data-main,require.js使用它来启动脚本加载过程,而baseUrl一般设置到与该属性相一致的目录。

    加载

    <script data-main="main" src="./require.js"></script>

    这里的mian是脚本的入口,相当于c语言的main()主函数, 所有的模块都要集中在这里被解析. 默认加载的都是js文件,所以就不用加.js

    <script src="js1.js""></script>
    <script src="js2.js""></script>
    <script src="js3.js""></script>
    <script src="js4.js""></script>

    之前我们引用js代码就会是这样, 依赖顺序不能颠倒, 这样就非常麻烦,

    AMD规范

     //AND规范的写法
    require(['依赖一', '依赖二', '依赖三'], function(依赖一的别名, 依赖三的别名, 依赖三的别名){
        //code
        })

    require很好的解决了这个代码依赖的问题,它采用AMD(异步模块加载)规范加载脚本文件.

    比如:

    
    require(['jquery', 'underscore', 'bankbone'], function($, _, Backbone) {
        //code
        })

    配置

    有的模块肯定是不符合AMD规范的,那么我们就需要配置一下,shim属性就是配置不符合AMD规范的代码的,require.config()参数是一个对象,写在页面的最顶部.

    require.config({
        baseUrl: '路径', // 设置js文件的根目录,默认是main.js的目录,这里写相对与main.js的相对路径
        paths: {
            jquery: '路径' // 为每个文件单独指定路径, 也可以是网络地址
        }
        shim: {
            '模块名': {
                exports: '模块别名',
                deps: ['依赖一', '依赖二']
            }
        }
    })

    AMD模块的写法

    define(['依赖'], function(依赖别名) {
        //code
        
        })
    define(function(a, b) {
        var add = function(a, b) {
            return a + b;
        }
        return add
    });
    //这样写只能返回一个方法
    //在main.js里用该模块的名字(a,b)调用

    还可以用下面的方法写

    define(function(a, b) {
        var add = function(a, b) {
            return a + b;
        }
        var x = function(a, b) {
            return a * b
        }
        return {
            add: add,
            x: x
        }
    });
    //这样写只能返回多个方法
    //在main.js里用该模块的名字.add(a,b)或者模块名字.x(a,b)调用

    模块的压缩合并

    模块化的写法肯定会增加文件数量, 从而增加请求次数, 放慢加载速度, require有自带的压缩工具r.js, 可以合并所有模块为一个js文件. 可以去官网下载也可以使用bower下载

    bower install r.js
    • 下载完后在main.js的目录新建一个build.js文件(配置如下)
    • 在build.js的文件目录下执行node r.js -o build.js
    • 构建完后会有一个main-built.js文件
    • 这里有一篇详细介绍打包的文章

      ({
      appDir: './',    //项目根目录
      out: 'main-build.js',  //输出文件名
      dir: './outdir',   //输出目录,全部文件打包后要放入的文件夹(如果没有会自动新建的)
          /* 有了dir,就不能使用out配置项了,你在编译时它有非常明确的提示 */
      baseUrl: './js/pages',    //相对于appDir,代表要查找js文件的起始文件夹,下文所有文件路径的定义都是基于这个baseUrl的
      modules: [
          //要优化的模块 —— 里面的配置项即各页面的 相对baseUrl路径的 省略后缀“.js”的 入口文件(入口文件 ---- 即加载页面时引入require.js的script标签上data-main属性所指定的文件)
          //该属性必不可少,因为一个程序至少需要有一个入口
          { name:'main'},
          { name:'index'} 
      ],
        fileExclusionRegExp: /^(r|build).js|.*.scss$/,   //正则匹配过滤文件,匹配到的文件将不会被输出到输出目录去,这里过滤掉的是 r.js、build.js、*.scss三类文件
        optimizeCss: 'standard',
        removeCombined: true, //如果为true,优化器将从输出目录中删除已合并的文件
        paths: { //各模块相对baseUrl的路径,直接从require.config的path配置中烤取即可
          "underscore": "../libs/underscore/underscore-min",
          "backbone": "../libs/backbone/backbone-min",
        },
      shim:{// 配置不符合AMD规范的模块,直接从require.config的shim配置中烤取即可
          "underscore": {
                exports: "_"
          },
          "backbone": {
                deps: ["underscore", "jquery"],
                exports: "Backbone"
          },
      } 
      })
  • 相关阅读:
    win10离线安装WSL2 Ubuntu20.04系统
    合并挖矿 merged mining——是指在不牺牲整体挖矿性能的情况下同时挖矿两种或多种加密货币的行为
    P2Pool和它在去Monero采矿中心化的作用——门罗币支持p2p的方式挖矿
    如何设置并使用xmrigproxy——本质上就是一个中转代理,可以设置ssl
    黑客是如何利用你的浏览器进行挖矿的?
    CoinHive挖矿原理分析——后端是nodejs服务,前端直接miner.start即可
    挖矿算法和币种统计
    HDD挖矿——目前整体看情况不景气
    XMRig支持的挖矿算法
    coinhive.com 网页挖矿分析
  • 原文地址:https://www.cnblogs.com/libin-1/p/6591906.html
Copyright © 2020-2023  润新知