模块化编程

·模块化编程是一种处理复杂系统分解成更好的可管理模块的方式,它可以把系统代码划分为职责单一高度解耦切可替代的模块。

·系统中某一部分的变化将如何影响其他部分就会变得显而易见,系统的可维护性更加简单易得。

    引入模块化就是为了降低系统的可维护性,把成本降低,把一个复杂的项目解耦成为一个细小单一的模块,这样好维护好开发出现问题也可以快速的锁定。

模块化发展历史

1. 早期函数封装

function foo() { //... }

好处:可以把复杂的应用进行解耦

缺点:污染全局命名空间

    2.nameEspace
var obj = {
count: 1,
foo: function() { //... }
}
好处:解决污染全局命名空间
缺点:私有成员暴露,内部状态可被外部改写 3.立即执行函数
(function(root) {
//...
})(this)
好处:避免上面两个问题
缺点:提供逻辑划分,不解决代码本身问题

不使用模块化开发之前我们需要考虑的问题。

1.可维护成本。

2.命名空间。

3.依赖管理。

Commonjs

CommonJS 规范加载模块是同步的,也就是说,加载完成才执行后面的操作,Node.js主要用于服务器编程模块都是存在本地硬盘中加载比较快,所以Node.js采用CommonJS规范。

CommonJS规范分为三部分:module(模块标识)require(模块引用)exports(模块定义)

module 变量在每个模块内部,就代表当前模块;

exports 属性是对外的接口,用于导出当前模块的方法或变量;

require() 用来加载外部模块,读取并执行js文件,返回该模块的exports对象;

    Commonjs里的规范每一个文件就是一个模块,它们都会有自己的作用域。,以文件做为一个作用域。但是有一个问题commonjs它这种规范只适用于服务端。因为在服务端它是具有同步去加载模块的条件的,如果换作是在浏览器客户端使用commonjs 这个规范,我们知道在浏览器客户端使用的是ECMA规范,JS天生异步,所以不能去同步加载模块,比如说前面加载的模块造成了阻塞,后面的东西就显示不出来了。所以在客户端这个先天条件下是不适用的。

AMD(require.js)

AMD 也就是异步模块定义。它采用异步的方式去加载模块。通过define方法去定义模块。requrie方法去加载模块。

    AMD模块定义
如果这个模块还需要依赖其他模块,那么define函数的第一个参数,必须是一个数组,指名该模块的依赖。
define([tools],function() { //... }); AMD模块的加载
require([module], callback);
第一个参数[module],是一个数组里面的成员就是需要加载的模块;第二个参数callback,则是加载成功之后的回调函数。例如加载math.js。
require([math], function(math) { //... }); require()异步加载math,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。
AMD有一个不足就是依赖前置,如果用不到的模块这样就带来了不必要的性能消耗。

依赖前置? "懒加载的书写方式 用到了谁就加载谁" 异步加载

ES6 module

第五篇,理解JS模块化编程思想的更多相关文章

  1. 初步理解require.js模块化编程

    初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...

  2. [转]js模块化编程之彻底弄懂CommonJS和AMD/CMD!

    原文: https://www.cnblogs.com/chenguangliang/p/5856701.html ------------------------------------------ ...

  3. require.js实现js模块化编程(二):RequireJS Optimizer

    require.js实现js模块化编程(二):RequireJS Optimizer 这一节,我们主要学习一下require.js所提供的一个优化工具r.js的用法. 1.认识RequireJS Op ...

  4. 爬虫逆向基础,理解 JavaScript 模块化编程 webpack

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 简介 在分析一些站点的 JavaScript 代码时,比较简单的代码,函数通常都是一个一个的,例 ...

  5. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  6. require.js实现js模块化编程(一)

    1.认识require.js: 官方文档:http://requirejs.org/RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的Requ ...

  7. js模块化编程之彻底弄懂CommonJS和AMD/CMD!

    先回答我:为什么模块很重要? 答:因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写 ...

  8. 好文推荐系列-------(5)js模块化编程

    本文主要来源于阮一峰的<Javascript模块化编程>系列文章整合,原文地址:http://www.ruanyifeng.com/blog/2012/10/javascript_modu ...

  9. js 模块化编程

    Javascript模块化编程(一):模块的写法   作者: 阮一峰 日期: 2012年10月26日 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞 ...

随机推荐

  1. js返回时间差

    function CalcTimeSub(endTime, startTime, type) { var bool = endTime == defaultDateTime || startTime ...

  2. python中的__dict__和dir()的区别

    Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: __di ...

  3. PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) (找最值)

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  4. defender 月考总结

    今天是2019年5月28日,昨天月考了,也是C**生日.昨天考完之后,还是那种考完试的释然感.目前,已经批出来了数学.英语.物理三门学科的成绩,语文还没有批出来.应该明天就能够批出来吧.现在趁着休息, ...

  5. 题解 AT4278 【[ABC115A] Christmas Eve Eve Eve】

    题目传送门. 分析 根据题目,我们可以发现要求如下: \(d\)的值 输出 \(d=25\) Christmas \(d=24\) Christmas Eve \(d=23\) Christmas E ...

  6. 题解 AT4556 【12/22】

    题目传送门. ___________ 主要思路 我们可以使用\(C++\)语言中的\(string\)字符串来解. 先定义一个字符串\(s\),并输入\(s\). string s; cin>& ...

  7. RSA学习档案

    RSA 学习档案 基本原理 随机选择两个质数p,q模数n=p*qφ(n)=(p−1)(q−1)选择加密指数e: 1 < e < φ(n)计算机密指数d: e*d % φ(n) = 1c = ...

  8. std::ref和std::cref使用(转载)

    转载于:https://blog.csdn.net/lmb1612977696/article/details/81543802 std::ref和std::cref 解释: std::ref 用于包 ...

  9. 基于Dapper的开源Lambda扩展LnskyDB 3.0已支持Mysql数据库

    LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.,现在已经支持MySql和Sql serv ...

  10. Mysql快速入门(三)

    MySQL性能优化之查看执行计划explain 介绍: (1).MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发 ...