node.js的代码都是构建在模块化开发的基础之上,模块化开始也是node.js的核心之一。

node.js跳过了服务器,它自己不用建设在任何服务器软件之上,node.js的许多设计理念与经典架构(LAMP=linux +apache +mysql+php)有着很大的不同,它可以提供强大的伸缩能力,node.js没有web容器。

node.js的自身哲学:花最小的成本,追求更高的并发,更高的处理性能

node.js的特点:1.单线程

       2.非阻塞I/O

          什么是IO? 就是输入和输出(input,output),什么会输入输出?如:硬盘,网络,file,socket,其他mysql,tcp都是网络IO的一种

       3.事件驱动

阻塞模式下,一个线程只能处理一个任务,想要提高吞吐量必须通过多线程,而非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%。

node.js底层是C++ (V8也是C++写的).底层代码中,近半数都用于事件队列,回调函数队列的构建,用事件驱动来完成服务器的任务调度。(鬼才)

node.js没有根目录,没有web容器,让node.js实现一个静态服务都非常难!!

传统非模块化开发的缺点:1.命名冲突   2.文件依赖

标准的模块化规范:

1。AMD -requirejs

2。CMD- seajs

模块化的规范定义的一些写代码的规则,只要遵循了同样的标准,基本上风格都是一致的

服务端的模块化规范:

1.Common.js  -Node.js

模块化相关的规则:

1.一个js文件 都是一个独立的模块,模块内部的成员都是相互独立的

2.模块化的导入和导出

案例1(exports):

在01.js文件中

var sum=function(a,b){
sum = parseInt(a)+parseInt(b); } exports.sum=sum;

在02.js文件中

  //用require 进入模块

var module =require(./01.js)   //当前文件夹下的01.js文件
var ret =module.sum(12,13);
console.log(ret);

案例2(moudle)

在01.js文件中

var sum=function(a,b){
sum = parseInt(a)+parseInt(b); } module.exports=sum;

在02.js文件中

var module=require('./01.js')

var ret=moudle(12,15);
console.log(ret);

成员的导出,还可以用global这个全局对象来实现

模块化的一些特性:

1.已经加载的模块会缓存(根据文件的路径,知晓已经加载的模块,不会重复加载),提高了性能

2.模块文件的后缀的3中情况:  js  json  node   (不加文件后缀,同名文件的优先级是按照从左到右的文件加载)

除了自定义模块还有

系统的核心模块(mudule):

  1.fs文件操作

  2.http网络操作

    创建服务器  http.create( function(req,res)   {... } )

  3.path路径操作

  4.querystring查询参数解析(与url有重叠)

  5.url     url解析   url.parse(a,b)   能将url拆分成很多个部分

node.js的特点与模块化开发的更多相关文章

  1. 1.Node.js 接入微信公众平台开发

    一.写在前面的话   Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...

  2. Node.js配合node-http-proxy解决本地开发ajax跨域问题

    情景: 前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 1. 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦) 2. ...

  3. 使用Node.js的socket.io模块开发实时web程序

    首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统 ...

  4. Node.js学习(12)----Web应用开发

    1.使用http模块 Node.js 由于不需要另外的 HTTP 服务器,因此减少了一层抽象,给性能带来不少提升, 但同时也因此而提高了开发难度.举例来说,我们要实现一个 POST 数据的表单,例如: ...

  5. 《React Native 精解与实战》书籍连载「Node.js 简介与 React Native 开发环境配置」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  6. [node.js]express+mongoose+mongodb的开发笔记

    时间过得很快,6月和7月忙的不可开交,糟心的事儿也是不少,杭州大连来回飞,也是呵呵. 希望下个阶段能沉浸下来,接着学自己想学的.记一下上几周用了几天时间写的课设.因为课设的缘故,所以在短时间里了解下e ...

  7. Vue-cli+Vue.js2.0+Vuex2.0+vue-router+es6+webpack+node.js脚手架搭建和Vue开发实战

    Vue.js是一个构建数据驱动的web界面的渐进式框架.在写这边文章时Vue版本分为1.0++和2.0++,这个是基于Vue2.0的项目. Vue-cli是构建单页应用的脚手架,这个可是官方的. Vu ...

  8. Node.js中的自定义模块化

      打造步骤: 1. 创建模块 [ Function / Object / String 2. 导出模块 - module.exports = 模块名称 导出一个 - module.exports = ...

  9. edp 基于node.js和npm的前端开发平台

    edp能做什么? 简洁的项目创建及包管理,多种工具进行本地调试,快速项目构建及代码检测,可扩展插件... 1. 安装 $ npm install -g edp 2. 包管理-导入依赖包 >edp ...

随机推荐

  1. 使用.csv文件

    引用自:https://blog.csdn.net/vision_tung/article/details/79845758 通用爬虫:https://blog.csdn.net/Vision_Tun ...

  2. chapter01

    1.请用命令查出ifconfig命令程序的绝对路径[root@localhost ~]# which ifconfig 答:/usr/sbin/ifconfig 2.请用命令展示以下命令哪些是内部命令 ...

  3. 【Python3爬虫】当爬虫碰到表单提交,有点意思

    一.写在前面 我写爬虫已经写了一段时间了,对于那些使用GET请求或者POST请求的网页,爬取的时候都还算得心应手.不过最近遇到了一个有趣的网站,虽然爬取的难度不大,不过因为表单提交的存在,所以一开始还 ...

  4. windows上使用pip下载东西时报编码错误问题解决方法

    原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码.解决办法是: python目录 Python27\Lib\site-packages 建一个文件site ...

  5. 对ThreadLocal的一些理解

    ThreadLocal也是在面试过程中经常被问到的,本文主要从以下三个方面来谈对ThreadLocal的一些理解: ThreadLocal用在什么地方 ThreadLocal一些细节 ThreadLo ...

  6. JAVA-Spring AOP基础 - 代理设计模式

    利用IOC DI实现软件分层,虽然解决了耦合问题,但是很多地方仍然存在非该层应该实现的功能,造成了无法“高内聚”的现象,同时存在大量重复的代码,开发效率低下. @Service public clas ...

  7. 关于STM32GPIO按键上下拉配置的认识

    说真的,后知后觉这个问题还是有点值得研究的,一开始学习我用的板子在按键模块电路中GPIO输入脚是有外部上下拉电阻的,如下图所示:当KEY1接V3.3,在其后为它接一个下拉电阻,可以保证按下按键输入高电 ...

  8. 第四章 文件的基本管理和XFS文件系统备份恢复 随堂笔记

    第四章 文件的基本管理和XFS文件系统备份恢复 本节所讲内容: 4.1 Linux系统目录结构和相对/绝对路径. 4.2 创建/复制/删除文件,rm -rf / 意外事故 4.3 查看文件内容的命令 ...

  9. Java泛型使用的简单介绍

    目录 一. 泛型是什么 二. 使用泛型有什么好处 三. 泛型类 四. 泛型接口 五. 泛型方法 六. 限定类型变量 七. 泛型通配符 7.1 上界通配符 7.2 下界通配符 7.3 无限定通配符 八. ...

  10. Java并发编程实战笔记—— 并发编程3

    1.实例封闭 class personset{ private final Set<Person> myset = new HashSet<Person>(); public ...