LABjs、RequireJS、SeaJS的区别


Posted in Javascript onMarch 04, 2014

一、LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。

二、RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更简单自然。模块加载器也可降级为文件加载器用,因此使用 RequireJS 和 SeaJS,也可以达成 LABjs 的性能优化目的。

三、RequireJS 和 SeaJS 都是很不错的模块加载器,两者区别如下:

1. 两者定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。SeaJS 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 服务器端
2. 两者遵循的标准有差异。RequireJS 遵循的是 AMD(异步模块定义)规范,SeaJS 遵循的是 CMD (通用模块定义)规范。规范的不同,导致了两者 API 的不同。SeaJS 更简洁优雅,更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
3. 两者社区理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。SeaJS 不强推,而采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
4. 两者代码质量有差异。RequireJS 是没有明显的 bug,SeaJS 是明显没有 bug。
5. 两者对调试等的支持有差异。SeaJS 通过插件,可以实现 Fiddler 中自动映射的功能,还可以实现自动 combo 等功能,非常方便便捷。RequireJS 无这方面的支持。
6. 两者的插件机制有差异。RequireJS 采取的是在源码中预留接口的形式,源码中留有为插件而写的代码。SeaJS 采取的插件机制则与 Node 的方式一致:开放自身,让插件开发者可直接访问或修改,从而非常灵活,可以实现各种类型的插件。

还有不少细节差异就不多说了。

总之,SeaJS 从 API 到实现,都比 RequireJS 更简洁优雅。如果说 RequireJS 是 Prototype 类库的话,则 SeaJS 是 jQuery 类库。
最后,向 RequireJS 致敬!RequireJS 和 SeaJS 是好兄弟,一起努力推广模块化开发思想,这才是最重要的。

Javascript 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
javascript showModalDialog模态对话框使用说明
Dec 31 Javascript
AspNet中使用JQuery上传插件Uploadify详解
May 20 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
深入理解Angular中的依赖注入
Jun 26 Javascript
JS实现监控微信小程序的原理
Jun 15 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
webuploader实现上传图片到服务器功能
Aug 16 Javascript
Vue.js更改调试地址端口号的实例
Sep 19 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
js的Boolean对象初始值示例
Mar 04 #Javascript
js动态拼接正则表达式的两种方法
Mar 04 #Javascript
8个实用的jQuery技巧
Mar 04 #Javascript
js中top的作用深入剖析
Mar 04 #Javascript
父页面显示遮罩层弹出半透明状态的dialog
Mar 04 #Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 #Javascript
css+js实现部分区域高亮可编辑遮罩层
Mar 04 #Javascript
You might like
php md5下16位和32位的实现代码
2008/04/09 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
React应用中使用Bootstrap的方法
2017/08/15 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python学习之asyncore模块用法实例教程
2014/09/29 Python
python单例模式实例解析
2018/08/28 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
爱情保证书范文
2014/02/01 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
内乡县衙导游词
2015/02/05 职场文书
2016党校学习心得体会
2016/01/07 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
python process模块的使用简介
2021/05/14 Python