【前端编码】模块化编程

摘要:

慢慢开始使用模块化编程,学着使用define,require这类的东西。一开始使用只是单纯觉得页面加载时会立刻请求加载所有文件会影响速度,后面慢慢使用发现,还能解决文件之间的相互依赖关系,解决文件上线版本问题。

再继续发现自己学的还很浅,网上看了这篇文章http://blog.chinaunix.net/uid-26672038-id-4112229.html  深入了解下。

一、为什么要使用模块化编程



1)解耦软件系统的复杂性,使维护“有理可循”

2)定义封装,遵循低耦合高内聚

3)解决文件之间依赖关系

4)解决文件加载版本缓存问题

备注:

依赖分为两种,“强依赖” —— 肯定需要 和“弱依赖” —— 可能需要。
对于强依赖,如果要性能优先,则考虑参照依赖前置的思想设计,个人更推崇,能够清晰明了文件依赖关系;如果考虑开发成本优先,则考虑按照依赖就近的思想。
对于弱依赖,只需要将弱依赖的部分改写到回调函数内即可。

二、规范


  区别 代表
AMD
 异步模块定义,预加载,在使用模块之前加载依赖的模块。

格式:define( id, dependencies, factory ); 


requirejs

requirejs2.0+也可以支持延迟加载

CMD
模块使用时才加载,需要的异步加载模块可以使用 require.async 来进行加载。

格式:define( id, deps, factory );

 require 是 factory 的第一个参数。

seajs

三、requirejs 与 seajs   区别感觉带有偏见



requirejs    提前执行,推崇依赖前置,RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳(目前就我使用的库echart,hightchart等都能支持requirejs2.0)。

seajs  延迟执行,推崇就近依赖,非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。

用法

// CMD
define(function(require, exports, module) {
    var a = require(‘./a‘)
    a.doSomething()
    // 此处略去 100 行
    var b = require(‘./b‘) // 依赖可以就近书写
    b.doSomething()
    // ...
})

// AMD 默认推荐的是
define([‘./a‘, ‘./b‘], function(a, b) { // 依赖必须一开始就写好
    a.doSomething()
    // 此处略去 100 行
    b.doSomething()
    // ...
})

四、参考资料



AMD规范文档 https://github.com/amdjs/amdjs-api/wiki/AMD

amdjs 的 require 接口文档 https://github.com/amdjs/amdjs-api/wiki/require
amdjs 的接口文档 https://github.com/amdjs/amdjs-api/wiki

RequireJS官网接口文档  http://www.requirejs.org/docs/api.html

模块系统 https://github.com/seajs/seajs/issues/240

前端模块化开发的价值 https://github.com/seajs/seajs/issues/547

前端模块化开发那点历史 https://github.com/seajs/seajs/issues/588

CMD 模块定义规范 https://github.com/seajs/seajs/issues/242

SeaJS API快速参考 https://github.com/seajs/seajs/issues/266

从 CommonJS 到 Sea.js https://github.com/seajs/seajs/issues/269

RequireJS和AMD规范  http://javascript.ruanyifeng.com/tool/requirejs.html

CommonJS规范  http://javascript.ruanyifeng.com/nodejs/commonjs.html

Javascript模块化编程 http://www.ruanyifeng.com/blog/2012/10/javascript_module.html

Javascript模块化编程 http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html

知乎  AMD 和 CMD 的区别有哪些? http://www.zhihu.com/question/20351507

JavaScript模块化开发 - CommonJS规范 http://www.feeldesignstudio.com/2013/09/javascript-module-pattern-commonjs 
JavaScript模块化开发 - AMD规范 http://www.feeldesignstudio.com/2013/09/javascript-module-pattern-amd
模块化设计 http://baike.baidu.com/view/189730.htm 
模块化  http://baike.baidu.com/view/182267.htm

时间: 2024-10-05 21:09:41

【前端编码】模块化编程的相关文章

前端的模块化编程

对前端模块化的认识一个大型项目时候,通常需要一个团队分工合作,模块化编程就是开发者把逻辑相关的代码放在一个module里面,我们只需要实现核心的业务逻辑,不用担心命名冲突,需要时再加载就可以.Javascript不是一种模块化编程语言,开发者需要模拟出类似的功能,来将一个大程序拆分成相互依赖的小文件,我们称为模块化.有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 早期模块化编程的方法 1)函数最早期,我们的函数的功能就是把实现特定逻辑的一组语句打包,在一个文件里面编写

【模块化编程】理解requireJS-实现一个简单的模块加载器

在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ...... 为了深入了解加载器,中间阅读过一点requireJS的源码,但对于很多同学来说,对加载器的实现依旧不太清楚 事实上不通过代码实现,单单凭阅读想理解一个库或者框架只能达到一知半解的地步,所以今天便来实现一个简单的加载器 加载器原理分析 分与合 事实上,一个程序运行需要完整的模块,以下代码为例: 1

JS模块化编程

js模块化编程演化 博客文章: 1 传统模块化:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 2 AMD规范:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html 3 RequireJs:http://www.ruanyifeng.com/blog/2012/11/require_js.html 现在有两大模块化规范,使用在

js模块化编程总结

大家都知道,js中的变量(variable)有其作用范围,比如:函数里用var定义的变量在函数外是看不到的,而定义在函数外面的变量(不能有没有var修饰)均是全局变量,在js程序的任何位置都可以访问.嗯,实际上我们在工作过程中,业务逻辑比较多,而一个业务逻辑包含多个函数,函数之间共享使用某个变量,这样问题就来了,如果另外一个业务逻辑不小心定义了或者修改了这个变量,就会造成这个全局变量被污染,前一个业务逻辑就会出现脏读,过程测试如下: 一个很长的页面脚本程序包含两个子业务处理过程1和2,业务处理程

模块化编程AMD&CommonJS

为什么要模块化编程 如果JS也可以像类似python,Java使用import,引入我们想要的模块,想要什么模块,就加载什么模块,可以给前端编程带来更多的便捷,结构更加清晰明了.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块. 目前,Javascript模块规范共有两种:CommonJS和AMD. CommonJS 2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程,标志"Javascript模块化编程"正式诞生.在

WEB前端研发工程师编程能力成长之路(1)(转)

WEB前端研发工程师编程能力成长之路(1) [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧: 如果你是四五年的前端开发高手,没有难题能难得住你的寂寞高手,来看这篇文章吧: WEB前端研发工程师,在国内是一个朝阳职业,自07-08年正式有这个职业以来,也不过三四年的时间.这个领域没有学校的正规教育,没有行内成体系的理论指引,几乎所有从事这个职业的人都是靠自己自学成才.自学成才,一条艰辛的坎坷路,

前端开发模块化高效重构

说起模块化,也许我们首先想到的是编程中的模块设计,以功能块为单位进行程序设计,最后通过模块的选择和组合构成最终产品.把这种思想运用到页面构建中,也已经不是什么新鲜事.相信很大一部分页面构建工程师都经历了这样几个阶段:第一阶段是在一个css文件中把多个页面按自己的习惯顺序从上往下编写样式,基本不考虑有无公用样式,以完成设计呈现为首要目的:第二阶段是提取不同页面中的通用样式,如公用颜色.图标.按钮等,实现一些基本元素的复用:第三阶段是提取公用功能模块,如导航.版权信息等,实现部分公用模块的复用. 刚

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

先回答我:为什么模块很重要? 答:因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套! 于是下面三个模块规范出来了,这篇文章也出来了(拼出来的 {捂脸笑}). JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧,这些规范

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

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