LABjs、RequireJS、SeaJS 哪个最好用?为什么?

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 类库。

作者:玉伯
链接:http://www.zhihu.com/question/20342350/answer/14828786

时间: 2024-12-22 10:28:01

LABjs、RequireJS、SeaJS 哪个最好用?为什么?的相关文章

浏览器中JavaScript执行原理

原文:浏览器中JavaScript执行原理 本章我们讨论javascript在浏览器中是如果工作的,包括:下载.解析.执行的全过程.javascript的这些讨人嫌的地方我们是知道的: i.需要串行下载 ii.需要解析 iii.需要串行执行 而在chrchromium中,js是这样解析的:(其实第一章末尾已经有了) 至于一些步骤的解释,这里就不再复述了,不懂的请戳:浏览器渲染过程 拉至末尾. 简直就是大魔王有木有?心中可有一万只草泥马奔腾而过?为什么在所有的下载线程中: i.css加载不会阻塞页

RequireJS、SeaJS的区别

引用自知乎(卢勃) 1. RequireJS的异步模块加载迎合了浏览器端JS程序员固有的异步思维,学习成本低 -------------------------------- Sea.js的主页中写到: Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码 依赖的自动加载.配置的简洁清晰,可以让我们更多地享受编码的乐趣 两年前,我看到Sea.js这样的自我描述,第一感觉是:为什么浏览器的JS编程和NodeJS相仿就是优雅呢? 那么,来讨论RequireJS和Sea.js的学

网页前端设计资源:前端设计资源收藏夹

文章简介:今天在邮件中收到一个由 Dimi Navrotskyy在Github上发布的前端收藏夹,里面的资源太丰富了.我在想很多同学肯定喜欢.本想直接发个链接与大家分享,但时间久了,找起来辛苦.特意copy了一份发在w3cplus上. 今天在邮件中收到一个由 Dimi Navrotskyy在Github上发布的前端收藏夹,里面的资源太丰富了.我在想很多同学肯定喜欢.本想直接发个链接与大家分享,但时间久了,找起来辛苦.特意copy了一份发在w3cplus上.而且我在后面还增加了一份我自己整理的学习

javascript框架设计之框架分类及主要功能

这篇文章主要介绍了javascript框架设计之框架分类及主要功能的相关资料,需要的朋友可以参考下 从内部架构和理念划分,目前JavaScript框架可以划分为5类. 第一种是以命名空间为导向的类库或框架,如果创建一个数组用new Array(),生成一个对象用new Object(),完全的java风格,因此,我们以某一对象为跟,不断为它添加对象和二级对象属性来组织代码,如金字塔般垒起来,早期代表YUI,EXT(so,不是有活力的公司都还用它们) 第二种是以类工厂为导向的框架.著名的有Prot

使用npm+gulp+browserify网页前端开发

本文的目的在于使用npm进行js类库依赖管理,同时精简html中繁杂的<script>导入. 目前类库加载器(如requirejs/seajs等)可以解决script加载的问题.但对依赖处理不好,还需要开发者一个一个去下载js库,根据个人喜好把js堆砌在项目中. nodejs中的npm等工具可以很好的处理依赖,但它是为nodejs服务的,它的模块打包格式是CMD,而requirejs是AMD.seajs官方倒是推荐了spm,据说该项目已经终止维护了. 在一定程度上,nodejs的bower插件

前端模块化要解决的两个问题

前言 前端模块化,主要是解决两个问题--"命名空间冲突","文件依赖管理". 坑___命名空间冲突 我自己测试好的代码和大家合并后怎么起冲突了? 页面脚本的变量或函数覆盖了公有脚本的. 坑___文件依赖管理 明明项目需要引入的包都引进来了怎么还报缺少包? 手动管理依赖,有天要更换某个插件,要深入代码内部进行修改 如下图,显示的代码加载,依赖关系复杂.在F.js中,分不清某个变量是来自C.js,还是E.js 两次加载同一个模块.比如引入了两遍JQ 其他的坑 为了实现脚

javascript框架设计之框架分类及主要功能_javascript技巧

从内部架构和理念划分,目前JavaScript框架可以划分为5类. 第一种是以命名空间为导向的类库或框架,如果创建一个数组用new Array(),生成一个对象用new Object(),完全的java风格,因此,我们以某一对象为跟,不断为它添加对象和二级对象属性来组织代码,如金字塔般垒起来,早期代表YUI,EXT(so,不是有活力的公司都还用它们) 第二种是以类工厂为导向的框架.著名的有Prototype,还有mootools.Base2.Ten,它们基本上除了最基本的命名空间,其它模块都是一

bower 强大的管理web包管理工具_其它综合

Bower介绍 bower官方地址:http://bower.io/ bower是twitter的又一个开源项目,使用nodejs开发,用于web包管理.如果越来越多得开源项目都托管在github上,bower只需要将github上项目加上一个配置文件既可以使用bower方式使用安装包.作为包管理,bower能提供添加新web包,更新web包,删除web包,发布web包功能,管理包依赖.web包通常认为由html+css+javascript构成. quick start: 解决实际问题 试想我

LABjs、RequireJS、SeaJS的区别

这篇文章主要介绍了LABjs.RequireJS.SeaJS的区别.JS文件加载器.JS块加载器等知识,需要的朋友可以参考下 一.LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行.LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化.LABjs 是一个文件加载器. 二.RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 Ja