前端(Node.js)(1)-- 初识Node.js
1、认识 Node.js
诞生、发展、应用现状、生态圈等方面
1.1、
2008年
RyanDahl的目标是创建一个易扩展、适用于现代Web应用通信的服务器平台
1.2、国内外的应用情况
LinkedIn移动版From ROR to Node.js,base on Joyent
Paypal From Java to Node.js
Twitter的队列:收集需要保存从Tweets,传给负责写入的进程
知乎的推送
网易
阿里
各种创业团队
1.3、主要应用领域
RESTFul API
实时通信:如消息推送等
高并发
I/O阻塞
1.4、社区
生于社区
社区推进
Github
国内
1.5、生态圈
以NPM为中心
基础服务提供商的支持
周边服务提供商的支持
1.6、知名度较高的Node.js开源项目
express(web服务器框架)
PM2(Node本来是单进程,PM2实现和管理多进程)
jade(优秀的模板引擎,还支持其他一些语言)
coffeeScript(JavaScript的转义语言(类似于python),相对JS它更加简洁、具有更好的高毒性,coffeescript的代码也可以转换为JS的代码,有很多js代码和Node.js代码是用coffeescript完成的)
itom(文本编译器,主要使用coffeescript完成,他的文件系统子进程管理以及用于调试和测试的服务器部分都是使用Node.js来支撑的)
socket.io是一个实时通信框架(应用他可以在Node.js中方便地使用websocket进行通信)
Pomelo是一个网易公司推出的一个策略游戏服务器端框架,mongoose是Node.js中使用mongodb的扩展、mocha是功能强大的Nnode.js测试框架
1.7、IO.js
Joyent的目标:兼容性、性能
社区:New features
IO.js: A friendly fork of Node.js with an open governance model
现状: IO.js的发展速度成为了有史以来成长最快的开源项目
关系:全面兼容,二者依然有可能并存
2、Node.js 与 JavaScript 的关系
诞生、发展、2004年以后的新浪潮、服务器端运行 JavaScript 的解决方案,以及 Node.js 与 JavaScript 之间的关系
2.1、JavaScript的诞生
1995年
JavaScript诞生:Branden Eich,10天时间
JavaScript的目标:业余人士,浏览器上的脚本语言
2.2、ECMAScript与DOM/BOM
1996-08,包含JScript的IE3.0发布
1996-11,Netscape将JavaScript提交给ECMA
1997-06,ECMA-262发布
JavaScript = ECMAScript + DOM + BOM
2.3、Gmai与GoogleV8
2004-04-01,Gmail发布
2005-0208,Google Maps发布,后又推出街景服务
2008-09-02,Google Chrome发布,一同面世的还有V8
2.4、新浪潮中的前端框架
DOM操作:jQuery/ExtJS/YUI
结构化前端框架:AngularJS/backbone.js/Ember.js
2.5、在服务器上运行JavaScript的尝试
Rhino引擎
javax.script API
2.6、Node为何选择了JavaScript
原生支持异步
历史包袱
开发门槛
2.7、Node.js与JavaScript的关系 -- 另一种实现:Fibjs
{fib:JS}
2.8、全栈语言:JavaScript
前端:AngularJS、BACKBONE.JS、emben
后端:Node.js、{fib:JS}
移动端:PhoneGap、ReactNative
3、Node.js 的特点
优点与缺点
3.1、部署简单方便
环境配置简单,只需要安装Node.js即可
注重约定
项目所需要扩展、插件、资源相对独立,不易冲突
3.2、事件驱动
主要观点:根据当前出现的事件,调动资源进行相关的处理
3.3、异步编程

3.4、异步编程
异步的实现方式
回调函数
事件监听
订阅/发布
3.5、高效与性能
单个操作的性能并不优于其它解决方案
通过优化资源调配和I/O操作来实现高效
其它语言对IO的处理:
PHP:原地等待,开多进程
C/C++:利用线程,程序要自己维护线程和资源的状态
3.6、单线程与多线程
Google V8 是单线程的,所以与Node.js同样是单线程的。为了更好地利用CPU资源,可以利用子进程和多进程:
子进程:Node.js的child_process模块
多进程:PM2等等第三方工具
3.7、Node.js的缺点
大量采用匿名函数,使得抛出的异常不易阅读
try/catch限于同步代码,使得异常捕获较为复杂
单线程:可靠性
不适合CPU密集型的场景
回调的代码习惯影响阅读
3.8、你需要着重了解以下知识
Node.js的应用领域
Node.js的特点与缺点
前端(Node.js)(1)-- 初识Node.js的更多相关文章
- 前端知识(一)02 初识 Node.js-谷粒学院
目录 初识Node.js 一.Node.js的概念 1.JavaScript引擎 2.什么是Node.js 3.Node.js有什么用 二.BFF 1.BFF 解决什么问题 2.BFF是什么 三.安装 ...
- 【Node.js】初识Node.js
因组里项目需要,我和另外一名同事要学习Node.js.之前接触过Javascript,都是前台处理html时用到,现在要用Javascript做后端,学习Node.js,用一段时间专心学习一门新技术, ...
- Node学习笔记---初识Node
博客原文地址:Claiyre的个人博客 https://claiyre.github.io/ 博客园地址:http://www.cnblogs.com/nuannuan7362/ 如需转载,请在文章开 ...
- 初识node.js(通过npm下载项目依赖的包的过程)
一.初识node.js 简单的说Node.js 就是运行在服务器端的JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事 ...
- Node.js实战项目学习系列(1) 初识Node.js
前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...
- node初识——node中的require方法与require.js的区别
出处:http://blog.csdn.net/u013613428/article/details/51966500 作为一个前端的新手,总是诧异于js的模块载入方式,看到了通过requireJs提 ...
- 初识Node.js之Node与java作为后台服务器的对比
> 文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 和Unix套接字(一般叫socket或者sock) 大部分情况下,可以用localhost代表本机127.,但是在MySQL连接 ...
- 异常处理记录: Unable to compile class for JSP
出错信息截图: 经过搜索引擎的帮助, 发现这些引发异常的可能原因: 1. tomcat的版本必须大于等于JDK的版本 2. maven中的jar与tomcat中jar冲突 看看pom.xml, 果然j ...
- bzoj1913: [Apio2010]signaling 信号覆盖
传送门 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #includ ...
- 正则获取html标签字符串中图片地址
html标签字符串: var htmlStr = "<div class='testClass'><img=http://www.chinanews.com/part/ho ...
- python中的多线程编程与暂停、播放音频的结合
先给两个原文链接: https://blog.csdn.net/u013755307/article/details/19913655 https://www.cnblogs.com/scolia/p ...
- 我的服装DRP之即时通讯——为WCF增加UDP绑定(应用篇)
发个牢骚,博客园发博文竟然不能写副标题.这篇既为我的服装DRP系列第二篇,也给为WCF增加UDP绑定系列收个尾.原本我打算记录开发过程中遇到的一些问题和个人见解,不过写到一半发现要写的东西实在太多,有 ...
- Windows 系统文件夹目录挂载到 Linux服务器中
在Windows系统文件上传到Linux服务器时有时候很麻烦,因为Linux无界面的系统不像Windows系统一样,可以直接复制粘贴,下面方法可以解决Windows系统文件拷贝到Linux服务器. 1 ...
- apache+flask部署
wsgi方式 1.安装apache 1.解压httpd并进行安装 # tar zxvf httpd-2.2.15.tar.gz # cd httpd-2.2.15 # ./configure - ...
- vue:使用不同参数跳转同一组件,实现动态加载图片和数据,以及利用localStorage和vuex持久化数据
需求:通过不同的参数复用同一组件,实现动态加载数据和图片,同时,在页面刷新时,图片依旧可以加载成功. 过程出现的bug和问题: 1.使用params传参后,再次刷新页面,参数丢失导致数据无法再次加载 ...
- 快速I/O 51node 1406
#include <bits/stdc++.h> using namespace std; #define LL long long typedef pair<int,int> ...