iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Module模块化编程的优点有哪些
  • 429
分享到

Module模块化编程的优点有哪些

2024-04-02 19:04:59 429人浏览 薄情痞子
摘要

这篇文章主要讲解了“Module模块化编程的优点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Module模块化编程的优点有哪些”吧!背景随着前端功能

这篇文章主要讲解了“Module模块化编程的优点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Module模块化编程的优点有哪些”吧!

Module模块化编程的优点有哪些

背景

随着前端功能越来越复杂,前端代码日益膨胀,为了减少维护成本,提高代码的可复用性,前端模块化势在必行。

所有js文件都在一个html中引入,造成以下不良影响:

  • 请求过多。首先我们要依赖多个模块,那样就会发送多个请求,导致请求过多

  • 依赖模糊。我们不知道他们的具体依赖关系是什么,也就是说很容易因为不了解他们之间的依赖关系导致加载先后顺序出错。

  • 难以维护。以上两种原因就导致了很难维护,很可能出现牵一发而动全身的情况导致项目出现严重的问题。

模块的概念

webpack中是这样定义的:

在模块化编程中,开发者将程序分解成离散功能块(discrete chunks of functionality),并称之为模块。 每个模块具有比完整程序更小的接触面,使得校验、调试、测试轻而易举。 精心编写的模块提供了可靠的抽象和封装界限,使得应用程序中每个模块都具有条理清楚的设计和明确的目的。

模块应该是职责单一、相互独立、低耦合的、高度内聚且可替换的离散功能块。

模块化的概念

模块化是一种处理复杂系统分解成为更好的可管理模块的方式,它可以把系统代码划分为一系列职责单一,高度解耦且可替换的模块,系统中某一部分的变化将如何影响其它部分就会变得显而易见,系统的可维护性更加简单易得。

模块化是一种分治的思想,通过分解复杂系统为独立的模块实现细粒度的精细控制,对于复杂系统的维护和管理十分有益。模块化也是组件化的基石,是构成现在色彩斑斓的前端世界的前提条件。

为什么需要模块化

前端开发和其他开发工作的主要区别,首先是前端是基于多语言、多层次的编码和组织工作,其次前端产品的交付是基于浏览器,这些资源是通过增量加载的方式运行到浏览器端,如何在开发环境组织好这些碎片化的代码和资源,并且保证他们在浏览器端快速、优雅的加载和更新,就需要一个模块化系统。

模块化的好处

  • 可维护性。 因为模块是独立的,一个设计良好的模块会让外面的代码对自己的依赖越少越好,这样自己就可以独立去更新和改进。

  • 命名空间。 在 javascript 里面,如果一个变量在最顶级的函数之外声明,它就直接变成全局可用。因此,常常不小心出现命名冲突的情况。使用模块化开发来封装变量,可以避免污染全局环境。

  • 重用代码。 我们有时候会喜欢从之前写过的项目中拷贝代码到新的项目,这没有问题,但是更好的方法是,通过模块引用的方式,来避免重复的代码库。我们可以在更新了模块之后,让引用了该模块的所有项目都同步更新,还能指定版本号,避免 api 变更带来的麻烦。

模块化简史

1. 最简单粗暴的方式

function fn1(){
  // ...
}
function fn2(){
  // ...
}

通过 script 标签引入文件,调用相关的函数。这样需要手动去管理依赖顺序,容易造成命名冲突,污染全局,随着项目的复杂度增加维护成本也越来越高。

2. 用对象来模拟命名空间

var output = {
  _count: 0,
  fn1: function(){
    // ...
  }
}

这样可以解决上面的全局污染的问题,有那么点命名空间的意思,但是随着项目复杂度增加需要越来越多的这样的对象需要维护,不说别的,取名字都是个问题。最关键的还是内部的属性还是可以被直接访问和修改。

3. 闭包

var module = (function(){
  var _count = 0;
  var fn1 = function (){
    // ...
  }
  var fn2 = function fn2(){
    // ...
  }
  return {
    fn1: fn1,
    fn2: fn2
  }
})()
module.fn1();
module._count; // undefined

这样就拥有独立的词法作用域,内存中只会存在一份 copy。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域,通过 return 暴露出公共接口供外界调用。这其实就是现代模块化实现的基础。

4. 更多

还有基于闭包实现的松耦合拓展、紧耦合拓展、继承、子模块、跨文件共享私有对象、基于 new 构造的各种方式,这种方式在现在看来都不再优雅。

// 松耦合拓展
// 这种方式使得可以在不同的文件中以相同结构共同实现一个功能块,且不用考虑在引入这些文件时候的顺序问题。
// 缺点是没办法重写你的一些属性或者函数,也不能在初始化的时候就是用module的属性。
var module = (function(my){
  // ...
  return my
})(module || {})
// 紧耦合拓展(没有传默认参数)
// 加载顺序不再自由,但是可以重载
var module = (function(my){
  var old = my.someOldFunc
  
  my.someOldFunc = function(){
    // 重载方法,依然可通过old调用旧的方法...
  }
  return my
})(module)

实现模块化的方案规范总览

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍。

es6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。比如,CommonJS 模块就是对象,输入时必须查找对象属性。

目前实现模块化的规范主要有:

  • CommonJS

CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中。

采用同步加载模块的方式,也就是说只有加载完成,才能执行后面的操作。CommonJS 代表:node 应用中的模块,通俗的说就是你用 npm 安装的模块。

它使用 require 引用和加载模块,exports 定义和导出模块,module 标识模块。使用 require 时需要去读取并执行该文件,然后返回 exports 导出的内容。

  • CMD

CMD(Common Module Definition)

CMD是SeaJS在推广过程中生产的对模块定义的规范,在WEB浏览器端的模块加载器中,SeaJS与RequireJS并称,SeaJS作者为阿里的玉伯。

CMD规范专门用于浏览器端,模块的加载是异步的,模块使用时才会加载执行。CMD规范整合了CommonJS和AMD规范的特点。在 Sea.js 中,所有 JavaScript 模块都遵循 CMD模块定义规范。

  • AMD

AMD(Asynchronous Module Definition)

异步模块定义,所谓异步是指模块和模块的依赖可以被异步加载,他们的加载不会影响它后面语句的运行。有效避免了采用同步加载方式中导致的页面假死现象。AMD代表:RequireJS。

AMD一开始是CommonJS规范中的一个草案,全称是Asynchronous Module Definition,即异步模块加载机制。后来由该草案的作者以RequireJS实现了AMD规范,所以一般说AMD也是指RequireJS。

RequireJS是一个工具库,主要用于客户端的模块管理。它的模块管理遵守AMD规范,RequireJS的基本思想是,通过define方法,将代码定义为模块;通过require方法,实现代码的模块加载。

  • ES6模块

ES6模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。所以说ES6是编译时加载,不同于CommonJS的运行时加载(实际加载的是一整个对象),ES6模块不是对象,而是通过export命令显式指定输出的代码,输入时也采用静态命令的形式。

ES6 的模块自动采用严格模式,不管你有没有在模块头部加上”use strict”;。

严格模式主要有以下限制。

  • 变量必须声明后再使用

  • 函数的参数不能有同名属性,否则报错

  • 不能使用with语句

  • 不能对只读属性赋值,否则报错

  • 不能使用前缀 0 表示八进制数,否则报错

  • 不能删除不可删除的属性,否则报错

  • 不能删除变量delete prop,会报错,只能删除属性delete global[prop]

  • eval不会在它的外层作用域引入变量

  • eval和arguments不能被重新赋值

  • arguments不会自动反映函数参数的变化

  • 不能使用arguments.callee

  • 不能使用arguments.caller

  • 禁止this指向全局对象

  • 不能使用fn.caller和fn.arguments获取函数调用的堆栈

  • 增加了保留字(比如protected、static和interface)

上面这些限制,模块都必须遵守。

感谢各位的阅读,以上就是“Module模块化编程的优点有哪些”的内容了,经过本文的学习后,相信大家对Module模块化编程的优点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Module模块化编程的优点有哪些

本文链接: https://www.lsjlt.com/news/98524.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Module模块化编程的优点有哪些
    这篇文章主要讲解了“Module模块化编程的优点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Module模块化编程的优点有哪些”吧!背景随着前端功能...
    99+
    2024-04-02
  • Java9新特性Module模块化编程的方法
    这篇文章主要讲解了“Java9新特性Module模块化编程的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java9新特性Module模块化编程的方法”吧!在Java 9版本中Java ...
    99+
    2023-06-29
  • Node模块化的知识点有哪些
    今天小编给大家分享一下Node模块化的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是模块化模块化是指解决一...
    99+
    2023-07-04
  • 模板化的优点和缺点有哪些?
    模板化:优点与缺点 模板化是一种强大的编程技术,允许您创建可重复使用的代码块。它提供了一系列优点,但也存在一些缺点。 优点: 代码重用性:模板化使您可以创建通用代码,可在整个应用程...
    99+
    2024-05-08
    模板化 优缺点 python
  • Python的网络编程模块有哪些
    这篇文章主要介绍“Python的网络编程模块有哪些”,在日常操作中,相信很多人在Python的网络编程模块有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python的网络编程模块有哪些”的疑惑有所帮助!...
    99+
    2023-06-08
  • Java9新特性Module模块化编程示例演绎
    目录一、什么是Java module?二、模块导出package三、模块导入package四、Java module的意义五、实例第一个模块第二个模块尝试使用未被exports的pa...
    99+
    2024-04-02
  • JavaScript 模块化:模块化的编程之道
    CommonJS 模块:使用 require() 和 module.exports 语法,在 Node.js 中得到广泛应用。 ES 模块:使用 import 和 export 语法,是 ECMAScript 标准的一部分,在现代浏览器...
    99+
    2024-04-02
  • JavaScript 模块化:模块化编程的利器
    模块化的优势 代码重用性:将代码组织成模块化单元允许不同模块之间的代码重用,减少重复和错误。 可维护性:模块化使代码易于维护,因为可以独立处理和更新特定的功能。 可读性:模块化将代码组织成逻辑上相关的部分,提高了代码的可读性和理解性。 ...
    99+
    2024-04-02
  • 易语言编程的优点有哪些
    本篇内容介绍了“易语言编程的优点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最早接触易语言是三年前的事情了,那时候是因为DNF这个游...
    99+
    2023-06-25
  • java并发编程的优点有哪些
    Java并发编程的优点有以下几点:1. 提高程序性能:并发编程可以充分利用多核处理器,将程序的任务分配到不同的核心上并同时执行,从而...
    99+
    2023-09-12
    java
  • JavaScript 模块化:模块化编程的魔法棒
    模块的好处 模块化编程提供了许多好处: 代码重用:模块允许将代码块打包成可重用的单元,从而消除重复和提高效率。 解耦:模块将代码隔离到独立的单元中,减少不同组件之间的依赖关系,提高可维护性和可读性。 可扩展性:模块化结构使代码易于扩展,...
    99+
    2024-04-02
  • java socket编程有哪些优缺点
    Java Socket编程的优点和缺点如下:优点:1. 简单易用:Java提供了Socket类和ServerSocket类来实现网络...
    99+
    2023-08-09
    java
  • Java编程语言有哪些优点
    这篇文章主要介绍“Java编程语言有哪些优点”,在日常操作中,相信很多人在Java编程语言有哪些优点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java编程语言有哪些优点”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-15
  • JavaScript模块知识点有哪些
    这篇文章主要介绍“JavaScript模块知识点有哪些”,在日常操作中,相信很多人在JavaScript模块知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
    99+
    2024-04-02
  • JavaScript 模块化:模块化编程的未来之道
    模块化编程的好处 增强代码可读性和可维护性:模块化将代码组织成逻辑组件,使其更易于阅读和理解。清晰的模块边界使开发人员可以专注于特定模块的功能,而不必处理整个应用程序的复杂性。 促进代码重用:模块允许代码在应用程序的不同部分重复使用。这消...
    99+
    2024-04-02
  • asp编程语言有哪些优缺点
    优点:1. ASP是一种强大的服务器端脚本语言,能够处理大量的并发请求。2. ASP语言易于学习,因为它使用了一些与C和Visual...
    99+
    2023-06-14
    asp编程
  • julia函数式编程有哪些优点
    Julia的函数式编程具有以下优点:1. 高度抽象和表达能力:函数式编程强调函数的纯粹性,避免副作用和可变状态,使代码更具可读性和可...
    99+
    2023-09-21
    julia
  • Java流式编程有哪些优缺点
    Java流式编程的优点包括:1. 简化代码:流式编程能够将复杂的代码逻辑简化成一系列简洁的操作,提高代码的可读性和可维护性。2. 减...
    99+
    2023-10-10
    Java
  • HTML5模版有哪些优点
    本篇内容介绍了“HTML5模版有哪些优点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  开发版本XML/...
    99+
    2024-04-02
  • Singleton模式有哪些优点
    今天小编给大家分享一下Singleton模式有哪些优点的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Singleton模式有...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作