首页 > 编程知识 正文

commonjs缺点(ES6 Modules 相对于 CommonJS 的优势是什么?)

时间:2023-12-23 11:38:06 阅读:319265 作者:IDLS

本文目录一览:

在node环境下怎么使用commonjs模块去使用require方法

最初的 CommonJS 小组 的参与者们决定弄一份于时下的 JavaScript 编程语言有效,但不必束缚于浏览器 JS 环境的限制,的模块规范。开始的愿景是在浏览器里使用一些权宜之计, 并希望能借此影响浏览器厂商,促使它们为这种模块规范的原生支持提供解决方案。权宜之计有:

要么使用一个服务来转译 CJS 模块成浏览器中可用的代码

要么使用 XMLHttpRequest(XHR)以文本形式加载模块,再在浏览器中做文本变换、解析的工作

CJS 模块规范仅允许每文件一个模块,所以为优化、打包,可使用某种“转换格式”将多个模块合并到单个文件。

通过这种方式,CommonJS 小组搞定了依赖引用、如何处理循环依赖,以及如何获得当前模块的某些属性等问题。 但是,他们并没能接纳浏览器环境里不可改变、并且仍将影响模块设计的某些特性:

网络加载

异步继承 … 这也同时意味着他们为了实现这个规范,将负担更多地放到了 Web 开发者身上,而这些权宜之计也使调试变得更麻烦。 调试 eval 的代码,或者调试多个文件合并之后的单个文件,都有实际使用时的坏处。 这些缺点或许在未来某天会被浏览器调试工具解决掉,但结论仍然是:在最普遍的 JS 环境,浏览器中,使用 CommonJS 模块并不是最好的办法。

webpack 常用loader、Plugins和Mode配置及解析规则

css-loader 用于加载 .css 文件,并且转换成commonjs 对象;

style-loader 将样式通过 style 标签插入到 head 中。

loader 的调用顺序是链式调用的,是从右到左的,所以在配置 rules 的时候,要注意两者的先后顺序

加载 less 和 less-loader

同 css 解析规则一样,需要将 less-loader 放置到 use 最右面

进行图片、字体等的打包,还可设置较小资源的自动base64

优点:可以减少一次http请求

缺点:会使打包文件变大,延长首次加载白屏时间

requirejs 支持 commonjs规范吗

commonjs是一套javascript标准,requireJS和seajs都有用到这个标准

当然主要还是requireJS的AMD标准

其实要说优缺点可能就是文件大小了,同步加载,异步的并发加载两个都支持,nodejs一样能跑,如果中文社区的活跃度的话建议seajs吧,玉伯有时候会在github上面答疑解惑的

javascript同步和异步的区别与实现方式

javascript语言是单线程机制。所谓单线程就是按次序执行,执行完一个任务再执行下一个。

对于浏览器来说,也就是无法在渲染页面的同时执行代码。

单线程机制的优点在于实现起来较为简单,运行环境相对简单。缺点在于,如果中间有任务需要响应时间过长,经常会导致

页面加载错误或者浏览器无响应的状况。这就是所谓的“同步模式”,程序执行顺序与任务排列顺序一致。对于浏览器来说,

同步模式效率较低,耗时长的任务都应该使用异步模式;而在服务器端,异步模式则是唯一的模式,如果采用同步模式个人认为

服务器很快就会出现12306在高峰期的表现。。。。

异步模式的四种方式:

1.回调函数callback

所谓回调函数,就是将函数作为参数传到需要回调的函数内部再执行。

典型的例子就是发送ajax请求。例如:

$.ajax({

async: false,

cache: false,

dataType: 'json',

url: "url",

success: function(data) {

console.log('success');

},

error: function(data) {

console.log('error');

}

})

当发送ajax请求后,等待回应的过程不会堵塞程序运行,耗时的操作相当于延后执行。

回调函数的优点在于简单,容易理解,但是可读性较差,耦合度较高,不易于维护。

2.事件驱动

javascript可以称之为是基于对象的语言,而基于对象的基本特征就是事件驱动(Event-Driven)。

事件驱动,指的是由鼠标和热键的动作引发的一连串的程序操作。

例如,为页面上的某个

$('#btn').onclick(function(){

console.log('click button');

});

绑定事件相当于在元素上进行监听,是否执行注册的事件代码取决于事件是否发生。

优点在于容易理解,一个元素上可以绑定多个事件,有利于实现模块化;但是缺点在于称为事件驱动的模型后,流程不清晰。

3.发布/订阅

发布订阅模式(publish-subscribe pattern)又称为观察者模式(Observer pattern)。

该模式中,有两类对象:观察者和目标对象。目标对象中存在着一份观察者的列表,当目标对象

的状态发生改变时,主动通知观察者,从而建立一种发布/订阅的关系。

jquery有相关的插件,在这不是重点不细说了。。。。回头写个实现贴上来

4.promise模式

promise对象是CommonJS工作组提供的一种规范,用于异步编程的统一接口。

promise对象通常实现一种then的方法,用来在注册状态发生改变时作为对应的回调函数。

promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled)、已完成(resolved)和拒绝(rejected)。以CommonJS

Promise/A

标准为例,promise对象上的then方法负责添加针对已完成和拒绝状态下的处理函数。then方法会返回另一个promise对象,以便于形成promise管道,这种返回promise对象的方式能够支持开发人员把异步操作串联起来,如then(resolvedHandler,

rejectedHandler); 。resolvedHandler

回调函数在promise对象进入完成状态时会触发,并传递结果;rejectedHandler函数会在拒绝状态下调用。

Jquery在1.5的版本中引入了一个新的概念叫Deferred,就是CommonJS promise A标准的一种衍生。可以在jQuery中创建

$.Deferref的对象。同时也对发送ajax请求以及数据类型有了新的修改,参考JQuery API。

除了以上四种,javascript中还可以利用各种函数模拟异步方式,更有诡异的诸如用同步调用异步的case

只能用team里同事形容java和javascript的一句话作为结尾:

“写java像在高速路上开车,写javascript像在草原上开车”-------------以此来形容javascript这种无类型的语言有多自由

but,如果草原上都是坑。

javascript模块化是什么及其优缺点介绍

如今backbone、emberjs、spinejs、batmanjs

等MVC框架侵袭而来。CommonJS、AMD、NodeJS、RequireJS、SeaJS、curljs等模块化的JavaScript扑面而

来。web前端已经演变成大前端,web前端的发展速度之快。

1)我们来看看什么是模块化?

模块化是一种将系统分离成独立功能部分的方法,可将系统分割成独立的功能部分,严格定义模块接口、模块间具有透明性。javascript中的模块在一些C、PHP、java中比较常见:

c中使用include 包含.h文件;php中使用require_once包含.php文件

java使用import导入包

此中都有模块化的思想。

2)模块化的优缺点:

a优点:

可维护性

1.灵活架构,焦点分离

2.方便模块间组合、分解

3.方便单个模块功能调试、升级

4.多人协作互不干扰

可测试性

1.可分单元测试

b缺点:

性能损耗

1.系统分层,调用链会很长

2.模块间通信,模块间发送消息会很耗性能

3)最近的项目中也有用到模块化,

使用的是seajs,但是当引用到jquery,jquery easyui/或者jquery

UI组件时,有可能会用到很多jquery插件,那这样要是实现一个很复杂的交互时,模块间的依赖会很多,使用define()方法引入模块会很多,不知

有么有什么好的方法?

4)附:

内聚度

内聚度指模块内部实现,它是信息隐藏和局部化概念的自然扩展,它标志着一个模块内部各成分彼此结合的紧密程度。好处也很明显,当把相关的任务分组后去阅读就容易多了。 设计时应该尽可能的提高模块内聚度,从而获得较高的模块独立性。

耦合度

耦合度则是指模块之间的关联程度的度量。耦合度取决于模块之间接口的复杂性,进入或调用模块的位置等。与内聚度相反,在设计时应尽量追求松散耦合的系统。

与AMD和CommonJS相比,UMD有什么缺点

linux技巧-使用screen管理你的远程会话当我们用ssh或是telent远程登录到linux服务器上,运行一些长时间的任务,必须等待任务完成才能离开该界面。在此期间不能关闭窗口或者断开连接。否则这个任务的进程就会别杀掉,一切半途而废,需要重新执行该任务。 如何解决这个问题? 首先来理解几个概念: 进程组:一个或多个进程的集合,每个进程组有唯一一个进程组ID,即进程组长进程的ID 会话期:一个或多个进程组的集合,有唯一一个会话期首进程,会话期ID为首进程的ID 会话期可以有一个单独的控制终端,与控制终端连接的会话期首进程叫控制进程,当前与终端交互的进程为前台进程。 挂断信号默认的动作为终止程序 当终端借口检测到网络连接断开,将挂断信号发送给控制进程 如果会话期首选进程终止,则该信号发送到该会话期前台进程组 一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组处于stop状态,发送SIGHUP和SIGCONT信号到该进程组的所有进程。 因此,当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出 方法一:nohup #nohup command 方法二:screen creen 是一个可以在多个进程间多路复用一个物理终端的窗口管理器。 使用方法: (1),[xuefeng@ku6]# screen screen将创建一个执行shell的全屏窗口,你可以执行任意shell,就像在ssh窗口一样。 (2),[xuefeng@ku6]#screen vi abc screen创建一个执行vi abc的单独窗口会话,退出vi 将退出该窗口 (3),还可以在已有screen会话窗口中创建新的窗口,在当前sceen窗口中键入C-a c,即Ctrl+a,再按下c键。重新控制各窗口中运行的程序。 例如:在一个screen窗口中编辑vi /tmp/abc,之后需要作另外的事情,那么可以在screen窗口键入C-a d,screen会提示暂时中断会话。继续前一个会话,#screen -ls 查看会话编号。重新连接screen -r 编号。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。