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创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
javascript页面加载完执行事件代码
Feb 11 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
Jun 16 Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 Javascript
jQuery图片轮播插件——前端开发必看
May 31 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
Mar 30 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
Apr 17 Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 Javascript
angular2 NgModel模块的具体使用方法
Apr 10 Javascript
Express结合Webpack的全栈自动刷新
May 23 Javascript
jQuery ajax - getScript() 方法和getJSON方法
May 14 jQuery
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
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
PHP简单遍历对象示例
2016/09/28 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
jQuery的slideToggle方法实例
2013/05/07 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
Python reduce函数作用及实例解析
2020/05/08 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
python基于opencv 实现图像时钟
2021/01/04 Python
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
计算机应用专业毕业生求职信
2014/06/03 职场文书
实验室的标语
2014/06/20 职场文书
计划生育证明格式范本
2014/09/12 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL
浅谈JavaScript作用域
2021/12/06 Javascript