Seajs是什么及sea.js 由来,特点以及优势


Posted in Javascript onOctober 13, 2016

1.Seajs简介
 
Seajs,一个Web模块加载框架,追求简单、自然的代码书写和组织方式,:Sea.js 遵循 CMD 规范,模块化JS代码。依赖的自动加载、配置的简洁清晰,可以让程序员更多地专注编码。
 
2.Seajs优缺点
 
优点:
1).提高可维护性。
2).模块化编程。
3).动态加载,前端性能优化
 
缺点:
1).学习文档偏少且混乱,会更改团队使用JS的编写习惯,必须使用模块化编程。
2).不太适合团队目前的情况,多JS文件但少改动,动态加载优势和模块化优势不明显。
3). 需要配套使用SPM工具,JS的打包和管理工具。
 
2.什么是CMD 和AMD ?
 
异步模块定义(AMD)是Asynchronous Module Definition的缩写,是 RequireJS 在推广过程中对模块定义的规范化产出。
通用模块定义(CMD)是Common Module Definition的缩写,是SeaJS 在推广过程中对模块定义的规范化产出。
RequireJS 和 SeaJS 都是模块化框架的代表,AMD和CMD,是他们各自定义模块化的方式,大同小异,主要是代码风格和API不同。
 
3.Seajs如何使用?

一段代码教新手一目了然,快速上手!
 
 代码如下:<script src="../js/examples-master/sea-modules/seajs/seajs/2.1.1/sea.js"></script>

<script>
  //配置js路径
 seajs.config({
  alias:{
   "jquery":"../examples-master/sea-modules/jquery/jquery/1.10.1/jquery.js"
  }
 });
  //加载模块
 seajs.use('../js/seajs/init',function($){
  $("#test_div").click(function(){alert(1);});
 });
</script>

代码如下:

//init.js
define(function(require,exports,module){
var $ = require('jquery');
return $;
});

Seajs就是如此简单,快来深入学习吧!

由来:

在软件开发过程中,模块化编程思想已经习以为常了,模块化编程不仅仅给开发团队带来效率方面上的好处,还能够让开发的项目或者产品维护成本大大降低。
那么,在WEB开发过程中JS脚本语言已经不可或缺了,通过JS脚本语言能够带来更加舒适的人机交互和用户体验。但是,JS脚本的使用过程中也会有出现引用依赖的混乱,那么JS脚本语言的模块化思想势必会得到大家广泛的认可,在这样的一个背景下,淘宝前端工程师玉伯带来了SeaJS脚本语言,让模块化编程思想进入到JS脚本的世界里。

特点:

SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaScript文件及对象依赖处理中解放出来,可以专注于代码本身的逻辑。SeaJS可以与jQuery这类框架完美集成。使用SeaJS可以提高JavaScript代码的可读性和清晰度,解决目前JavaScript编程中普遍存在的依赖关系混乱和代码纠缠等问题,方便代码的编写和维护。
SeaJS本身遵循KISS(Keep It Simple, Stupid)理念进行开发,其本身仅有个位数的API,因此学习起来毫无压力。在学习SeaJS的过程中,处处能感受到KISS原则的精髓——仅做一件事,做好一件事。

优势:从一个例子中来看SeaJS优势,

传统模式:

var M1={
run:function(){
alert('M1');
M2.run();
}
}
 
var M2={
 
run:function(){
alert('M2');
}
}
 
<script src="./M2.js"></script>
<script src="./M1.js"></script>

使用SeaJS之后:

//init.js
define(function(require, exports, module) = {
 
var m1=require('M1');
 
exports.init=function(){
m1.run();
}
});
 
//M1.js
define(function(require,exports,module)={
var m2=require('M2');
 
exports.run=function(){
alert('M1');
m2.run();
}
});
 
define(function(require,exports,module)={
exports.run=function(){
alert('M2');
}
});

<script src="./sea.js"></script>
<script>
 seajs.use('./init', function(init) {
  init.init();
 });
</script>

通过两个简单的实例能够看出使用SeaJS之后代码的模块化非常清晰,并且在HTML页面中仅仅引用一个./sea.js文件并且仅仅调用init即可,具体init后面实现的逻辑对用户是透明的。

通过这篇博客能够对SeaJS脚本语言有所了解,后面文章介绍利用SeaJS编写模块。

Javascript 相关文章推荐
JavaScript 基础篇(一)
Mar 30 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
深入理解requestAnimationFrame的动画循环
Sep 20 Javascript
AngularJS实现自定义指令及指令配置项的方法
Nov 20 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 Javascript
解决iView中时间控件选择的时间总是少一天的问题
Mar 15 Javascript
JavaScript实现美化滑块效果
May 17 Javascript
ionic3双击返回退出应用的方法
Sep 17 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
微信小程序实现电子签名功能
Jul 29 Javascript
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
使用jquery给指定的table动态添加一行、删除一行
Oct 13 #Javascript
jQuery旋转插件jqueryrotate用法详解
Oct 13 #Javascript
JS取模、取商及取整运算方法示例
Oct 13 #Javascript
JavaScript中常用的验证reg
Oct 13 #Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
Oct 13 #Javascript
浅谈jquery上下滑动的注意事项
Oct 13 #Javascript
js中class的点击事件没有效果的解决方法
Oct 13 #Javascript
You might like
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
使用PHP开发留言板功能
2019/11/19 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
一个JS翻页效果
2007/07/23 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python实现图片拼接的代码
2018/07/02 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
python中判断文件结束符的具体方法
2020/08/04 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
企业安全生产承诺书
2014/05/22 职场文书
会议通知格式范文
2015/04/15 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android