JavaScript模块化开发&&模块规范
在做项目的过程中通常会有一些可复用的通用性功能,之前的做法是把这个功能抽取出来独立为一个函数统一放到commonFunctions.js里面(捂脸),实现类似于snippets的代码片段收集。
function sub(){
//...
}
function sum(){
//...
}
在理想情况下,开发者只需要实现核心的业务逻辑,其他通用功能可以加载已经实现的模块。
然而,这样的做法并不是最佳实践,在实际的运用中。业务代码时常会与应用的通用代码中的命名出现冲突。这让我想起了cSharp,当初学习cSharp的时候,一些有经验的学长就指点说,做.Net方向的一定要有自己的类库,这样在以后的开发中直接应用对应的命名空间,调用相关函数即可。于是乎琢磨起在目前尚没有命名空间的Javascript中,是不是可以用对象模拟命名空间作为替代方案呢?恰好与前辈想法暗合Why SeaJS
var FocusTech = {};
FocusTech.print = function(str){
// code!
}
然而其中的弊端文中也已给出。即通过命名空间,也只是降低函数命名冲突的概率。
命名冲突和文件依赖,面对前端开发过程中的这两个经典问题。或许前端模块化开发是一个解决方案。
模块规范
异步模块定义AMD:(Asynchronous Module Definition)是 RequireJS 在推广过程中对模块定义的规范化产出。通用模块定义CMD:(Common Module Definition)是Sea.js在推广过程中对模块定义的规范化产出的。
- AMD 运行时核心思想是「Early Executing」,也就是提前执行依赖。EX:
define(['a', 'b'], function(A, B) {
//运行至此,a.js 和 b.js 已下载完成(运行于浏览器的 Loader 必须如此);
//A、B 两个模块已经执行完,直接可用(这是 AMD 的特性);
return function () {};
});
CMD 推崇 as lazy as possible.
在 CMD 规范中,一个模块就是一个文件。代码的书写格式如下:
define(factory);AMD 是提前执行,CMD 是延迟执行。
CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:
// 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()
...
})
对象模拟命名空间
Javascript模块化编程(二):AMD规范
Javascript模块化编程(一):模块的写法
SeaJS与RequireJS最大的区别
让我们再聊聊浏览器资源加载优化
SeaJS 和 RequireJS 的异同
JavaScript模块化开发&&模块规范的更多相关文章
- 详解JavaScript模块化开发
什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等 ...
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
- Javascript模块化开发-轻巧自制
Javascript模块化开发-轻巧自制 一.前言现在javascript的流行,前端的代码越来越复杂,所以我们需要软件工程的思想来开发前端.模块化是必不可少的,这样不仅能够提高代码的可维护性.可扩展 ...
- (转)详解JavaScript模块化开发
https://segmentfault.com/a/1190000000733959 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来j ...
- Javascript 模块化开发上线解决方案
最近又换部门了,好频繁地说...于是把这段时间搞的小工具们简单整理了一下,作了一个小的总结.这次用一个简单业务demo来向大家介绍一下Javascript模块化开发的方式和自动化合并压缩的一些自己的处 ...
- JavaScript模块化开发整理
在网上已经有很多关于模块化开发的文章了,这里还是按照自己的理解来整理一下. 随着项目文件的越来越大和需求的越来越贴近现实(我发现现在客户不如:一个领导说我要审批你们报上来的资料,系统发布以后用的还不错 ...
- JavaScript模块化开发的那些事
模块化开发在编程开发中是一个非常重要的概念,一个优秀的模块化项目的后期维护成本可以大大降低.本文主要介绍了JavaScript模块化开发的那些事,文中通过一个小故事比较直观地阐述了模块化开发的过程. ...
- JavaScript进阶【一】JavaScript模块化开发的基础知识
//模块化的最初写法 //1.最初写法 //下面的m1和m2就组成了一个模块 //缺点:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系. f ...
- javascript 模块化开发(一)
什么是模块化 将一组模块(及其依赖项)以正确的顺序拼接到一个文件(或一组文件)中的过程. 传统的模块化做法. 模块是实现特定功能的一组属性和方法的封装. 将模块写成一个对象,所有的模块成员都放到这个对 ...
随机推荐
- ionic 图片轮播问题
1.使用ion-slide可以实现图片轮播,但是如果在html中仅仅增加ion-slide是远远不够的,会出现两个问题: (注:使用的是angularjs.首先需要在,js文件中注入:$ionicSl ...
- ArcEngine 添加字段
private void AddField(IFeatureClass pFeatureClass, string name, string aliasName, esriFieldType Fiel ...
- Windows - 远程桌面无证书
可以从命令行启动远程桌面,输入:mstsc /v:地址:端口 /admin
- IE下使用jquery ajax失效
ie是根据请求的url是不是一样来是否发送请求,对于同一请求,ie只发送一次http请求,得到缓存之后就不再请求,所以同一请求发送多次,但ie实际是不会发送的 在你的第二次请求之前 使用 $.ajax ...
- CSS3实现时间表
一直想学CSS3,今天别的论坛看到的例子,挺好,mark起来以后自己看. <!doctype html> <html> <head> <meta charse ...
- socket.setNoDelay([noDelay]) 用的是Nagle算法
Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息:这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率.Nagle算法于1984 ...
- Java 学习 第一篇
1:Java文档注释:使用javadoc工具可以提取程序中文档注释来生成API文档:javadoc命令的基本用法:javadoc 选项 java源文件/包javadoc -d {} -windowti ...
- Effective Java设定游戏 - 就是爱Java
首先,我们先设定游戏,一个网页游戏的基本场景,主角拥有各种能力,但一开始数值都只有系统初始,随着故事的发展,会接触到各种不同的场景,获得提升角色的道具与装备,来参与更高难度的任务. 阅读全文>& ...
- CSS之清除浮动
一.清除浮动的目的. 1.当一个父元素的高度不写或为auto时,而且这个父元素内又有浮动的子元素,那么这时候该父元素的高度将不会自动适应子元素的高度,也可以说高度是0px; 有如下代码: <di ...
- 杀死MySQL的连接
命令 kill 执行线程号 C# 执行杀死指定的连接 1 强制Kill掉 internal protected void KillConnection(MySqlConnection c) { i ...