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 是好兄弟,一起努力推广模块化开发思想,这才是最重要的。

本文转自:http://www.zhihu.com/question/20342350

LABjs、RequireJS、SeaJS相关推荐

  1. requirejs、vue、vuex、vue-route的结合使用,您认为可行吗?

    在五一节之前和一网友讨论前端技术时,对方提到vue.vue-route如果配合requirejs应用.当时的我没有想得很明白,也没能这位网友一个准确的回复,但我许诺于他五一研究后给他一个回复.本是一天 ...

  2. javascript模块化之CommonJS、AMD、CMD、UMD、ES6

    javascript模块化之CommonJS.AMD.CMD.UMD.ES6 一.总结 一句话总结: CommonJS是同步加载模块,用在服务端:AMD是异步加载模块,用于浏览器端 1.为什么服务器端 ...

  3. AMD、CMD、CommonJS、ES6(import/export)

    AMD.CMD.CommonJS.ES6(import/export) AMD.CMD.CommonJS是ES5模块化解决方案 AMD -- 异步模块 Asynchronous Module Defi ...

  4. 前端构建工具的用法—grunt、gulp、browserify、webpack

    随着前端项目的飞速发展,项目越来越大.文件越来越多,前端工程化的工具也越来越多.下面介绍目前最流行的四种构建工具--grunt.gulp.browserify.webpack 所有的构建工具都是基于N ...

  5. CMD、AMD、commonJs 规范的写法

    比较好的文章: http://www.jianshu.com/p/d67b... AMD 是 RequireJS 在推广过程中对模块定义的规范化产出. CMD 是 SeaJS 在推广过程中对模块定义的 ...

  6. JavaScript 中的 require / exports、import / export、浅谈JavaScript、ES5、ES6

    Node.js 的基础教学 之 exports 和 module.exports:https://zhuanlan.zhihu.com/p/82057593 浅谈 JavaScript.ES5.ES6 ...

  7. AMD、CMD、CommonJs、ES6的对比

    都是用于在模块化定义中使用 AMD.CMD.CommonJs是ES5中提供的模块化编程的方案 import/export是ES6中定义新增的 AMD-异步模块定义[依赖前置.异步定义] Require ...

  8. 前端经典面试题(60道前端面试题包含JS、CSS、React、网络、浏览器、程序题等)

    (以下所有答案仅供参考) 简答题 1.什么是防抖和节流?有什么区别?如何实现? 参考答案 防抖 触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 思路: 每次触发事件 ...

  9. amd、cmd、esmodule、commonjs区别

    AMD.CMD.ESModule和CommonJS是JavaScript中最常用的模块化规范.在这篇文章中,我将会深入探讨这些规范的区别,以及它们在实际开发中的应用. AMD规范 AMD规范(Asyn ...

最新文章

  1. springmvc静态资源;mvc:default-servlet-handler后Controller失效
  2. 产品经理——pm具备的五项技能
  3. 介绍理想工作计算机 英语作文,我的理想工作英语作文(精选5篇)
  4. boost::gursoy_atun_layout用法的测试程序
  5. Web组件 – 构建商业化应用的基石
  6. C# XML添加删除/SelectNodes/xpath
  7. “智企云中享“,首届SAP中国云大会召开
  8. 【JAVA基础篇】对象初始化过程
  9. CFD分析过程(CFD Analysis Process)
  10. canvas笔记-lineJoin和miterLimit的使用
  11. 再谈迭代器,生成器,yield,及和类的使用
  12. ubuntu下安装tftp
  13. linux mingw32安装,在Linux上安装mingw
  14. LM393(寻迹原理)
  15. 量化基金投资常用策略简介
  16. 我的Mac键盘失灵了(u,i,o,j,k,l,k,m无效了)-- Mac鼠标键的开启和关闭
  17. Java桌面应用程序设计新贵:SWT 简介
  18. 菜谱 延安特色美食小吃
  19. 基于TI-RTOS的CC2650DK开发(20)---硬件抽象层
  20. Spring Boot 从入门到精通(一)HelloWorld(构建项目,热部署,测试)

热门文章

  1. Python+Vue计算机毕业设计淘宝客的导购网站的设计与实现7n318(源码+程序+LW+部署)
  2. 弱符号实现 iOS 组件化解耦
  3. ubuntu20.04安装kismet
  4. 创业:PK一回再重来 虽败犹荣
  5. 大数据展示 定位_大数据营销定位客户
  6. vim 文件编辑器配色(colorscheme)主题方案
  7. 垓下古战场发现龙山文化时期城址
  8. 西农计算机专业进入华为,3所处境尴尬的985院校,学霸看不上学渣进不去,学校:太心酸...
  9. Photoshop中的线性减淡
  10. 光纤收发器的LFP和EFE