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 相关文章推荐
比较详细的javascript对象的property和prototype是什么一种关系
Aug 06 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
Dec 14 Javascript
分享Javascript中最常用的55个经典小技巧
Nov 29 Javascript
JavaScript中数据结构与算法(二):队列
Jun 19 Javascript
jQuery对JSON数据进行排序输出的方法
Jun 24 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
Nov 18 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
Feb 08 Javascript
详解js几个绕不开的事件兼容写法
Aug 30 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
讲解vue-router之命名路由和命名视图
May 28 Javascript
解决layui下拉框监听问题(监听不到值的变化)
Sep 28 Javascript
Vue双向数据绑定(MVVM)的原理
Oct 03 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
人族 TERRAN 概述
2020/03/14 星际争霸
风格模板初级不完全修改教程
2006/10/09 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
js浮动图片的动态效果
2013/07/10 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
js实现简单的验证码
2015/12/25 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
局域网标准
2016/09/10 面试题
领导干部作风建设剖析材料
2014/10/11 职场文书
升职感谢信
2015/01/22 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
任长霞观后感
2015/06/16 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers