×

seajs require lab

labjs,requirejs,sea.js 哪个最好用为什么?sea.js的用法

admin admin 发表于2022-09-04 03:09:16 浏览90 评论0

抢沙发发表评论

本文目录

labjs,requirejs,sea.js 哪个最好用为什么


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

sea.js的用法


seajs的作用:
当你的网站开发越来越复杂的时候,会经常遇到这些问题吗?
冲突
性能
依赖
seajs如何解决?
①引入sea.js的库
②如何变成模块?
define 在模块grunt合并的时候 define里面要多2个参数 一个id ,一个依赖模块的数组
③如何调用模块?
exports
seajs.use
④如何依赖模块?
require (但是自己在rrd上却看到被修改了很疑惑)
深入学习seajs
define
require
seajs.use
seajs.config
alias
preload
debug
模块化历史
ECMAScrpt第六版将正式支持模块语法
nodeJS
commonJS
AMD
requireJS
跟seajs一样,web端模块化
seajs采用cmd规范

seajs是什么


seajs

百科释义
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaScript文件及对象依赖处理中解放出来,可以专注于代码本身的逻辑。SeaJS可以与jQuery这类框架完美集成。
-require

Seajs优缺点 什么是CMD 和AMD 如何使用


1.简介

Seajs,一个Web模块加载框架,追求简单、自然的代码书写和组织方式,:Sea.js 遵循 CMD 规范,模块化JS代码。依赖的自动加载、配置的简洁清晰,可以让程序员更多地专注编码。

2.优缺点

优点:
1).提高可维护性。
2).模块化编程。
3).动态加载,前端性能优化

缺点:
1).学习文档偏少且混乱,会更改团队使用JS的编写习惯,必须使用模块化编程。
2).不太适合团队目前的情况,多JS文件但少改动,动态加载优势和模块化优势不明显。
3). 需要配套使用SPM工具,JS的打包和管理工具。

2.什么是CMD 和AMD ?

异步模块定义(AMD)是Asynchronous Module Definition的缩写,是 RequireJS 在推广过程中对模块定义的规范化产出。
通用模块定义(CMD)是Common Module Definition的缩写,是SeaJS 在推广过程中对模块定义的规范化产出。
RequireJS 和 SeaJS 都是模块化框架的代表,AMD和CMD,是他们各自定义模块化的方式,大同小异,主要是代码风格和API不同。

3.如何使用?
代码如下:《script src=“../js/examples-master/sea-modules/seajs/seajs/2.1.1/sea.js“》《/script》
《script》
//配置js路径
seajs.config({
alias:{
“jquery“:“../examples-master/sea-modules/jquery/jquery/1.10.1/jquery.js“
}
});
//加载模块
seajs.use(’../js/seajs/init’,function($){
$(“#test_div“).click(function(){alert(1);});
});
《/script》
代码如下:
//init.js
define(function(require,exports,module){
var $ = require(’jquery’);
return $;
});
-lab

用了webpack还需要用seajs吗


webpack是后台工具,是负责:开发过程中的代码模块化,代码压缩、检查等的功能的插件。
而seajs是一个CMD的一个前端引js的东西,解决前端依赖的
可以在使用webpack就不用使用seajs了,使用了反而更多的加载seajs的文件了
-require

sea.js是怎么调用别的JS文件的


用require对外提供接口的javascript代码

/*
用require对外提供接口的javascript代码
*/
define(function(require, exports, module) {

function tab () {
alert(“这是模块化tab函数“)
}

exports.tab = tab;

});

tab();
  那么在页面中,想要调用模块化的tab函数,应该怎么调用呢?就是通过seaJs中的use 方法调到模块。这个方法有两个参数:第一个参数是模块的地址;第二个参数是地址加载成功后的回调函数。我们先写一个地址,先看看js能不能加载进来。
  通过seaJs中的use方法进行调用的HTML代码1

《meta charset=“utf-8“》
《title》梦龙小站《/title》
《!-- 引入sea.js --》
《script type=“text/javascript“ src=“sea.js“》《/script》

《!-- 调用模块tab函数 --》
《script type=“text/javascript“》
/*
这个方法有两个参数:第一个参数是模块的地址;第二个参数是地址加载成功后的回调函数。
*/
seajs.use(“a.js“)
《/script》
  通过服务器运行一下。用火狐firebug的网络查看,状态发现都是304错误。如下图
  于是我分别把sea.js放到了sea文件夹中,把a.js放到了js文件夹中,就能看到真实的效果了。
  通过seaJs中的use方法进行调用的HTML代码2
《meta charset=“utf-8“》
《title》梦龙小站《/title》
《!-- 引入sea.js --》
《script type=“text/javascript“ src=“sea/sea.js“》《/script》

《!-- 调用模块tab函数 --》
《script type=“text/javascript“》
/*
这个方法有两个参数:第一个参数是模块的地址;第二个参数是地址加载成功后的回调函数。
*/
seajs.use(“js/a.js“)
《/script》
-lab

Seajs是什么及sea.js 由来,特点以及优势


1.简介 Seajs,一个Web模块加载框架,追求简单、自然的代码书写和组织方式,:Sea.js 遵循 CMD 规范,模块化JS代码。依赖的自动加载、配置的简洁清晰,可以让程序员更多地专注编码。 2.优缺点 优点: 1).提高可维护性。 2).模块化编程。
-require

react.js和seajs有什么区别


react.js和seajs的区别:
SeaJS只会在真正需要使用(依赖)模块时才执行该模块;
SeaJS是异步加载模块的没错, 但执行模块的顺序也是严格按照模块在代码中出现(require)的顺序。
而RequireJS会先尽早地执行(依赖)模块, 相当于所有的require都被提前了, 而且模块执行的顺序也不一定100%就是先mod1再mod2。
-lab

requirejs和seajs的区别


  两者的区别如下:
  定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。SeaJS 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 服务器端。
  遵循的规范不同。RequireJS 遵循的是 AMD(异步模块定义)规范,SeaJS 遵循的是 CMD (通用模块定义)规范。规范的不同,导致了两者 API 的不同。SeaJS 更简洁优雅,更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
  社区理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。SeaJS 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
  代码质量有差异。RequireJS 是没有明显的 bug,SeaJS 是明显没有 bug。
  对调试等的支持有差异。SeaJS 通过插件,可以实现 Fiddler 中自动映射的功能,还可以实现自动 combo 等功能,非常方便。RequireJS 无这方面的支持。
  插件机制不同。RequireJS 采取的是在源码中预留接口的形式,源码中留有为插件而写的代码。SeaJS 采取的插件机制则与 JavaScript 语言以及Node 的方式一致:开放自身,让插件开发者可直接访问或修改,从而非常灵活,可以实现各种类型的插件。
-require

怎么让sea.js自身异步加载


为了极限性能,也为了做一些封装,我需要对seajs自身进行异步加载,通过以下代码加载seajs发现config与use都未执行。
《script》
// 其他代码
// sea.js 的异步载入代码:
;(function(m, o, d, u, l, a, r) {
if(m[o]) return
function f(n) { return function() { r.push(n, arguments); return a } }
m[o] = a = { args: (r = ), config: f(1), use: f(2), on: f(3) }
m.define = f(0)
u = d.createElement(“script“)
u.id = o + “node“
u.async = true
u.src = “path/to/sea.js“
l = d.getElementsByTagName(“head“)
l.appendChild(u)
})(window, “seajs“, document);
// 立刻就可以调用 seajs 的方法了:
seajs.config({
alias: {
’jquery’: ’path/to/jquery-1.9.1.min.js’
}
});
seajs.use(’./main’, function(main) {
// do some cool things.
});
《/script》
然后在网上查了以下,发现玉伯去除 sea.js 自身的异步加载内置支持,
https://github.com/seajs/seajs/issues/733
木有办法,只能自己改一改了,我当前使用的版本是2.1.1,为了兼容以后新的版本就不动他的源代码,只在sea.js 底部加上一段:
G = this;
var k = G.PagurianObjectName;
var Pagurian = function(a) {
this.push = function(a) {
if (a === ’config’) {
seajs[a](a);
}
if (a === “use“) {
seajs[a](a, a);
}
}
if (a && a.length) {
for (var b = 0; b 《 a.length; b++) this.push(a[b])
}
};
G[k] = new Pagurian(G[k].q);
然后在用的时候,这样用:
(function(i, d, o, u, p) {
if (i[u]) return;
i[’PagurianObjectName’] = p;
i[p] = i[p] || function() {
return (i[p].q = i[p].q || ).push(arguments)
};
s = d.createElement(o);
s.src = “src/core/sea.ext.js“;
s.charset = “utf-8“;
s.async = true;
s.id = u + “node“;
f = d.getElementsByTagName(o);
f.parentNode.insertBefore(s, f);
})(window, document, ’script’, “seajs“, “pagurian“);
pagurian(“config“, {
base:“src“,
alias: {
“jquery“: “plugins/jquery/1.11.1/jquery.js“
},
preload: [“jquery“],
charset: ’utf-8’,
timeout: 20000,
debug: false
});
pagurian(“use“, “presenter/standard/standard.app“, function(app) {
app.page.message();
});
-lab