一、前言    

  浏览器本身并不提供模块管理的机制,过去网页开发中,为了使用各种模块,不得不在加入一大堆script标签。这样就使得网页体积臃肿,难以维护,还产生大量的HTTP请求,拖慢显示速度,影响用户体验。为了解决这个问题,前端的模块管理器应运而生。它可以轻松管理各种JavaScript脚本的依赖关系,自动加载各个模块,使得网页结构清晰合理。

最早的模块管理器是RequireJs,可以实现异步加载模块,之后出现了Brower、component、seaJs,还有模块化组织工具webpack等,各种模块加载器都有着共同的目标。今天让我们讲讲seaJs,本人工作中,经常会使用到sea.js,发现这个加载器确实有好用之处。

sea.js是一个前端代码模块加载器,通过sea.js可以吧大量的js代码封装成一个一个小模块,实现模块的加载和依赖管理。有了sea.js,在前端开发过程中,开发人员可以分工书写各种模块,这种方法对协作开发、后续维护、性能调优都有很大的帮助。

”Sea.js初衷是帮助前端开发工程师将大文件拆分成小文件,能保持小颗粒度的模块化开发,同时不需要过多考虑依赖关系,让依赖管理轻松自如,让模块化开发变得更自然,就像浏览器原生提供的一样。Sea.js的本质意义是通过模块化开发,来提高代码的可维护性。对工程师而言,是关注度分离,更将更多精力聚焦在代码本身的逻辑上。”-----玉伯(前端模块化开发框架SeaJS的创始人)。

sea.js的核心设计思想:

除了保持简单,Sea.js的设计理念还有职责清晰、性能优先和适度完备。

二、开始使用

1、引入sea.js

<script type="text/javascript" src="./sea.min.js"></script>

2、定义模块

seajs.config({
alias: {
'plIndex' : 'js/poplayer/index.js?v=01190new012?v=19910',
'taskAnimate': 'js/poplayer/taskAnimate.js',
'a' : 'js/a.js'
}
})

3、编写对应小模块,比如编写taskAnimate.js

define(function(require, exports, module){
exports.initTaskAnimation = initTaskAnimation;//exports是暴露的接口
function initTaskAnimation(data){
/*逻辑代码*/
}
});

  

三、3种载入的方式

1、seajs.use

seajs.use('./a');  

//回调模式
seajs.use('./a', function(a) {
a.run();
}); //多模块模式
seajs.use(['./a', './b'], function(a, b) {
a.run();
b.run();
});  

注意这种写法,预加载a模块

define(['a'],function(require, exports, module){
//这个['a']是预加载这个模块,但是并不会执行里面的代码,只是引入
var _a = require('a'); //这个才会正在执行a里面的语句
});

2、require
函数用来访问其他模块提供的 API。
注意:只接受模块标识(如上面定义的模块)作为唯一参数,且参数是字符串。

define( function(require, exports, module) {
var a = require("./a");
a.dosomething(); //或者可以是完整的路径
var b = require("//static.XXXXXX");
}); 

3、require.async
该方法可用来异步加载模块,并在加载完成后执行回调函数。

define(function(require, exports, module) {
// 加载一个模块
require.async('./b', function(b) {
b.doSomething();
}); // 加载多个模块
require.async(['./c', './d'], function(c, d) {
// do something
});
});

  

4、require和require.async区别

  a、require无法完成条件加载,
  如下代码会同时加载a模块个b模块(底层是调用函数的toString()方法)

define(function(require){

    if(false) {

        require("./a);

    } else {

        require("./b");

    }

 });

  

  b、require.async可以按条件加载,且参数可以加入一个callback,而require不行!

四、最后讲讲seaJs的特点

  seaJs遵循的是CMD(通用模块定义)规范,而CMD有延迟执行,推崇就近依赖,职责单一等特点。关于AMD和CMD的区别,以及和node所遵循的commonJs规范区别,可看另一篇博文《commonJs 、AMD、 CMD》

 以上就是最简单的sea.js的使用,使用sea.js之后,可以把大的js文件,拆分为一个一个小的模块,大大提高开发效率。  

  

 

sea.js及三种加载方式的异同的更多相关文章

  1. UIWebView的三种加载方式

    一.使用UIWebView 将web content 嵌入到应用上. API提供了三种方法: - (void)loadRequest:(NSURLRequest *)request; - (void) ...

  2. MyBatis 延迟加载的三种加载方式深入,你get了吗?

    延迟加载 延迟加载对主对象都是直接加载,只有对关联对象是延迟加载. 延迟加载可以减轻数据库的压力, 延迟加载不可是一条SQL查询多表信息,这样构不成延迟加载,会形成直接加载. 延迟加载分为三种类型: ...

  3. 图解script的三种加载方式 异步加载顺序

    摘录如下: 可以很清晰的看出: <script>: 脚本的获取和执行是同步的.此过程中页面被阻塞,停止解析. <script defer = "defer"> ...

  4. Entity Framework关联实体的三种加载方法

    推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...

  5. EF三种加载方法

    EF性能之关联加载   鱼和熊掌不能兼得 ——中国谚语 一.介绍 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和 ...

  6. Android Activity四种加载方式

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

  7. Xamarin Android Fragment的两种加载方式

    android Fragment的重点: 3.0版本后引入,即minSdk要大于11 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fra ...

  8. hive--udf函数(开发-4种加载方式)

    UDF函数开发 标准函数(UDF):以一行数据中的一列或者多列数据作为参数然后返回解雇欧式一个值的函数,同样也可以返回一个复杂的对象,例如array,map,struct. 聚合函数(UDAF):接受 ...

  9. Android学习笔记_50_(转 四种加载方式详解(standard singleTop singleTask singleInstance)

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

随机推荐

  1. R语言-离职率分析

    案例:员工流失是困扰企业的关键因素之一,在这次的分析中我将分析以下内容: 对一些重要变量进行可视化及探索分析,收入,晋升,满意度,绩效,是否加班等方面进行单变量分析 分析员工流失的因素,探索各个变量的 ...

  2. window.open()参数详解及对浏览器的兼容性

    因为篇幅,window.open()浏览器的兼容性请点击 这里 Part1:参数详解 window.open(url,name,param) url:即将打开的子窗口的地址:比如 "http ...

  3. .net 4种单例模式

    转载: https://www.cnblogs.com/dreign/archive/2012/05/08/2490212.html using System; using System.Collec ...

  4. Node.js初探之实现能向前台返回东西的简单服务器

    nodejs nodejs文件就是一个简单的js文件. 在shell中运行 Step 1. 打开终端,进入这个js文件所在目#录 Step 2. 用 'node 文件名.js' 命令运行它即可. 用n ...

  5. python中的进程池:multiprocessing.Pool()

    python中的进程池: 我们可以写出自己希望进程帮助我们完成的任务,然后把任务批量交给进程池 进程池帮助我们创建进程完成任务,不需要我们管理.进程池:利用multiprocessing 下的Pool ...

  6. python JavaScript

    JavaScript 一. JavaScript Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的. a. JavaScript的引入方式 1 2 3 4 5 6 7 #直接编写 ...

  7. git的理论基础

    GIT是目前世界上最先进最牛逼的分布式版本控制系统git维护的三棵树分别是工作区域.暂存区域.git仓库工作区域:就是你平时存放项目代码的地方暂存区域:用于临时存放你的改动,事实上它只是一个文件,保存 ...

  8. 《阿里巴巴 Java 开发手册》读书笔记

    偶然看到阿里巴巴居然出书了???趁着满减活动(节约节约....)我赶紧买来准备看看,刚拿到的时候掂量了好多下,总觉得商家给我少发了一本书,结果打开才知道..原来这本书这么小.... 编码规范的重要性 ...

  9. WebApi的安全性及其解决方案

    一.前言   WebApi的小白想要了解一些关于WebApi安全性相关的问题,本篇文章是整理一些关于WebApi安全.权限认证的文章. 二.内容正文  2.1 不进行验证  客户端调用:http:// ...

  10. [SHOI2008]堵塞的交通

    Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有 ...