【NodeJS 学习笔记01】不学就老了
前言
再不学nodeJs,我们就老了......在HTML5大浪袭来的时候,很多先辈就开始了NodeJs之旅,而那时我还在做服务器端的程序
后来转成前端,和梯队的距离已经很大了,因为我会服务器端语言,还干了很久,所以至今才开始学习NodeJs,向完整的前端前进
这次学习NodeJs的计划是:
① 1-2周学习基础知识
② 1周左右开发一个简单项目
③ 利用NodeJs开发一套用于移动端调试的工具
④ 打包相关(这个可能比较远了)
NodeJs特点
① 异步
从文件读取到网络请求,NodeJs皆以异步完成,回调函数占据重要作用,在编程模型上Node是领先的
② 事件回调
事件回调让程序变得轻巧,但是具体怎么样还是取决于程序员。但是回调函数在阅读上其实还是有一定难度的
③ 单线程
Node是单线程的,如果多线程的话,这门语言水又深了,问几句进程中的通信时很讨厌的,但线程也没有死锁等问题
但是性能相关就有问题了,因为不能利用多核;
模块机制/CommonJs
我们原来做服务器端的开发,如果没有很好的组织代码的话,后期维护非常困难,所以才会有什么MVC,什么三层架构
而现在前端的业务逻辑逐向后端靠拢,就单页应用来说,已经超过后端的程序逻辑
页面view不停的增加会带来js代码量的激增,如何很好的管理我们的前端代码成了一个问题,所以requireJs出现了......
PS:尼玛这段和nodeJs有一毛钱关系哇......
javascript是没有模块化系统的,于是就有CommonJs的提出,让js具备开发大型应用的基础
模块引用
我们如果要引用一个模块,比如数学计算相关:
var math = require('math');
模块定义
我们如果要定义自己的模块可以这样干
exports.add = function () {
return sum;
}
如果此函数在math中定义的话,就能使用了
math.add();
模块标识
模块标识就是传递给require的参数,需要为驼峰命名,指向的是一个文件路径,这里和requireJS很类似的
模块实现
Node中模块实现分为两类,一种是系统级别的核心模块,一种是用户编写的文件模块
核心模块在编译过程被翻译成了二进制文件,Node进程启动后,一些核心的模块会直接加载进内存(文件定位、编译执行)
文件模块需要动态加载,速度相对慢一点
但是一旦加载后,那些文件便会被缓存,二次引入时候便会读取缓存文件(编译后的文件)
这里扯远一点,我们在使用underscore过程中,会编译Html形成模板函数(他真的只是一个函数),其实这个就可以做缓存
在部署项目之前保存编译过后的函数,去掉html模板文件(优化效果不知)
在node中,每个模块都是一个对象:
function Module(id, parent) {
this.id = id;
this.exports = {};
//parent是关键字,不应该乱用
this.parent = parent;
if (parent && parent.children) {
parent.children.push(this);
}
this.filename = null;
this.loaded = false;
this.children = [];
}
编译和执行时引入文件模块的最后一个阶段,定位到具体文件后,node会新建一个模块对象,然后根据路径载入并编译
每一个编译成功的模块都会将其文件路径作为索引缓存在Module._cache上
每个模块文件都存在require、exports、module三个变量,但是在文件中并未定义(__filename__、__dirname__ 变量也是)
其实在编译过程中,Node对javascript文件内容进行了头尾包装(相当于自定义函数传入window)
(function (exports, require, module, __filename__, __dirname__) {
var math = require('math');
exports.area = function (radius) {
return '';
};
});
这样,模块与模块之间做了隔离,不会互相影响,这里和underscore的编译有些类似......
包与NPM
Node组织了自身的核心模块,所以第三方文件模块可以有序的编写和使用,但是在第三方模块中,模块与模块之间仍然散列在各地
相互之间不能直接引用,在模块外包和NPM则是将联系建立起来的一种机制
PS:很多模块会形成一个包,这个包的概念和java包的概念,才#程序集的概念应该相似
一个包结构解压后会形成几个文件:
① package.json 描述文件
② bin 可执行二进制目录
③ lib javascript代码目录
④ doc 文档(尼玛基本没有)
⑤ test demo
以上都是CommonJS包的规范的一些东西,但是我们稍微了解一下便可(初学嘛),NPM则需要熟练掌握,借助NPM我们可以熟练安装管理包
安装依赖包
安装依赖包是常用方法:
npm install express
执行后就会在当前目录下创建node_modules目录,然后再其下面创建express目录......
PS:express是NodeJs上流行的web开发框架,帮助我们快速开发一个web应用
安装结束后就可调用了:
var express = require('express');
结语
这段简单结束,后面我们项目实战过程逐步深化
【NodeJS 学习笔记01】不学就老了的更多相关文章
- Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...
- Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识
前言 前面经过五篇Node.js的学习,基本可以开始动手构建一个网站应用了,先用这一篇了解一些构建网站的知识! 主要是些基础的东西... 如何去创建路由规则.如何去提交表单并接收表单项的值.如何去给密 ...
- NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇
个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- Nodejs学习笔记(四)——支持Mongodb
前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- Nodejs学习笔记(二)——Eclipse中运行调试Nodejs
前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...
随机推荐
- 【原创】C#搭建足球赛事资料库与预测平台(6) 赔率数据表设计2
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...
- Java多线程系列--“JUC原子类”02之 AtomicLong原子类
概要 AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似.本章以AtomicLong对基本类型的原子类进行介绍.内容包括:Atomic ...
- 整理的一些PHP面试题目
1.strlen()和mb_strlen()的作用分别是什么? strlen()和mb_strlen()的作用都是来获取字符串的长度,其中strlen()只针对单字节编码字符,也就是计算字符串的总字节 ...
- 50款免费 PSD 名片设计模板源文件下载《下篇》
名片是陌生人之间建立联系的最便捷.最有效的工具.名片它可能是给你的客户留下正面的印象第一步,另一方面,名片是一个企业最重要和最符合成本效益的营销工具之一,尤其是对于刚刚起步的企业.这里收集了50款免费 ...
- Moon.Orm 5.0 (MQL版) 实战实例
))) .) { ) { ) { ...
- EDNS
随着业务的复杂化和多样化,RFC1035中定义的DNS消息格式和它支持的消息内容已经不足以满足一些DNS服务器的需求,于是,RFC2671中提出了一种扩展DNS机制EDNS(Extension Mec ...
- [水煮 ASP.NET Web API2 方法论](3-8)怎样给指定路由配置处理器
阅读导航 问题 解决方案 工作原理 代码演示 问题 如果仅仅针对指定的路由进行某些特定的消息处理,而不是应用于所有路由,我们应该怎么做呢? 解决方案 ASP.NET WEB API 的很多功能都内建了 ...
- 炉石传说 C# 开发笔记 (初版)
法术资料说明 1.资料的准备 从GitHub上面获得的工程里面,是没有XML卡牌资料配置的,这个是需要你自己生成的. 打开炉边处说的客户端 然后按下 卡牌资料生成 将炉石资料文件设定为 Github ...
- 自己动手写计算器v1.2
1.2版本主要添加了分数.取负.开方三个功能,由于这三中运算输入单目运算,所以,新声明了一个新类 class OPeratorV1_2 至此基本完成了一个标准计算器,至于拥有更多功能的科学计算器,日后 ...
- 【Java每日一题】20161128
package Nov2016; import java.util.ArrayList; import java.util.List; public class Ques1128 { public s ...