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. PIVOT内置函数实现行转列

    PIVOT用于将列值旋转为列名(即行转列),PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(va ...

  2. 贪心算法---The best time to buy and sell store-ii

    Say you have an array for which the i th element is the price of a given stock on day i. Design an a ...

  3. 传输层的TCP和UDP协议

    作者:HerryLo 原文永久链接: https://github.com/AttemptWeb... TCP/IP协议, 你一定常常听到,其中TCP(Transmission Control Pro ...

  4. web渗透---第二天

    协议常识 HTTP协议 百度百科的解释:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. 所有的WWW文件都必须遵守这个标准. ...

  5. 15分钟让你了解如何实现并发中的Barrier

    说到Barrier,很多语言中已经是标准库中自带的概念,一般情况下,只需要直接使用就行了.而最近一些机缘巧合的机会,我需要在c++中使用这么个玩意儿.但是c++标准库里还没有这个概念,只有boost里 ...

  6. Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及区别

    本篇博客主要讲解Map接口的4个实现类HashMap.Hashtable.LinkedHashMap.TreeMap的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 ...

  7. ssm 搭建项目各项配置

    首先配置 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

  8. win7 python pdf2image入坑经历

    Python开发菜鸟入坑 项目要求pdf转成图片,网上较多的方案对于windows极其不友好,wand,Pythonmagick(win下载地址:www.lfd.uci.edu/~gohlke/pyt ...

  9. 浏览器输入URL到返回页面的全过程

    [问题描述] 在浏览器输入www.baidu.com,然后,浏览器显示相应的百度页面,这个过程究竟发生了什么呢? [第一步,解析域名,找到主机] 正常情况下,浏览器会缓存DNS一段时间,一般2分钟到3 ...

  10. 【Java例题】7.3 线程题3-素数线程

    3.素数线程.设计一个线程子类,依次随机产生10000个随机整数(100-999):再设计另一个线程子类,依次对每一个随机整数判断是不是素数,是则显示:然后编写主类,在主函数中定义这两个线程类的线程对 ...