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 相关文章推荐
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 Javascript
微信小程序 Nginx环境配置详细介绍
Feb 14 Javascript
angular中实现控制器之间传递参数的方式
Apr 24 Javascript
React.js中常用的ES6写法总结(推荐)
May 09 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
VSCode使用之Vue工程配置eslint
Apr 30 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 Javascript
vue 封装面包屑组件教程
Nov 16 Javascript
JavaScript 定时器详情
Nov 11 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通用检测函数集合
2006/11/25 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
python解析文件示例
2014/01/23 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
python异常触发及自定义异常类解析
2019/08/06 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
Python类继承和多态原理解析
2020/02/05 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
酒店销售主管岗位职责
2014/01/04 职场文书
中专自我鉴定
2014/02/05 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
六一儿童节开幕词
2015/01/29 职场文书
初中教师个人总结
2015/02/10 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书