谈一谈最近学了一段时间的node.js
官方说明
1.NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”。
2.node是一个基于Chrome V8引擎进行代码解释的、轻量、可伸缩的具有事件驱动和非阻塞I/O机制的js运行环境。
3.node适合处理高并发要求的项目,适合高I/O密集型应用。
所以:不适合CPU密集型应用;
CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起。不过,可以分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起。
4.node当下很火。
/-----------------------------------------------------------------------/
我的理解
对于node.js我的了解是从我开始使用git和webpack的时候,因为要用到node环境,而且要接触一部分的node控制台代码,不过这些都是简单的了解,让我知道了,node是可以让git和webpack运行的一种安装环境,并且是个npm包管理工具,你需要什么代码,node的包也会有一部分,比如说jquery,bootstrap等;
然后就是开始看到node官网的文档,了解到node可以作为后台的语言进行一系列的操作,能够自己搭建服务器,作为服务器的时候我们会用到http模块,这属于node自带的模块,然后就是createserver搭建服务器,后来觉得一直npm创建开启服务器比较麻烦,就在网上了解到有个supervisor这个插件吧,可以监听服务器,然后就开始考虑作为后台的功能,比后台给数据之前自己先测试一下,再比如,了解一下服务器与终端之间的交流Socket和H5新增的webSocket,做点聊天室的demo,当然了有点丑陋,不过基本的对话功能也是基于sorket实现了。
有时候node也需要进行与数据库的链接,数据库的端口为27017---下面以node中的路由/liuyan---->数据库User,集合liuyan做一个简单的查找demo
MySQL我就有点看不懂了,而对于SQLServer也是仅限于学校的知识,那么在网上学的时候就看到了另一种Mongodb,(稍后谈一下下);
var router = express.Router();
var mongodb = require("mongodb").MongodbClient;
var db_str = "mongodb://127.0.0.1:27017/{{你数据库的名字}}" router.get("/liuyan", (req, res) => {
// res.render("liuyan",{});
var findLy = function(db, cb) {
var conn = db.collection("liuyan");
conn.find({}).toArray((err, result) => {
cb(result);
})
} mongodb.connect(db_str, (err, db) => {
if (!err) {
findLy(db, (result) => {
res.render("liuyan", { result: result });
db.close();
})
}
}) })
简单说一下Mongodb,我用这个数据库也是由于node.js,而且,控制台的代码我也没有记得很清楚,所以就常在小火箭V3可视化工具里操作Mongodb的数据。
Mongodb:作为数据库是一种不难的数据库,他的流行应该归于他的分布式和非关系型数据库上,以及操作简单,有大量的查询指令,但是他已经不支持32位系统了,并且占用空间比较大。
而且和一般数据库不同的是,他的三元素构成是数据库,集合,文档,当然也和关系型数据库中的数据库,表,行相对应。并且,使用前(仅限于window系统,Mac等有钱了再买吧)需要将在盘符下的mogodb/bin/mongod.exe和mongo.exe依次打开,敲黑板这是重点操作,并且,直接盘符下还要有一个空的db文件夹,用来存储数据。
后来,了解到node可以创建后台项目,摸索着用express框架做了个个人的系统,express -e pro创建pro文件目录结构,
pro
|----bin
| |----www
|
|----public
| |----images
| |----javascript
| |----stylesheet
|
|----router
| |----index.js
| |----users.js
|
|----view
| |----index.ejs
| |----error.ejs
|
|----app.js
当然,express也需要进行npm install下载,页面虽说不够完美不过也在一直完善,页面的ejs文件也是从最初的index.ejs到现在的有了简单的登录注册留言等,虽然里面的数据是我写的假的数据,但是也是我用node.js链接数据库,再使用mongodb的查询或者是写入的代码进行的浏览以及写入,而数据库的控制台的代码查看着有点费劲,我就用他的可视化工具“v3小火箭”进行操作。
--------------------------------------------------------------------------------------------
在接下来的了解中发现,node.js不是很适合作为纯粹的后台,和java,php这种成熟的语言来说,他本身就有一定的缺陷,比如不能充分利用cpu,而且他是单线程的,有一部分可能性会崩溃。但他也有好处,高并发的场景下很实用,就是因为他的非阻塞I/O机制,很适合那种大量ajax请求的情况,而且他和前端js的合作很好,让我一个前端人员也有机会接触到了后台的语言。
虽然现在node.js出现没几年,东西比较新,但是,他作为和js合作的很融洽的后台,再加上非常好用的npm,可以加快我们的代码开发速度.
不过要说node火了,我觉得不然,而为隐隐觉得这是假象,虽然node用起来真的很顺心,也放宽了撸代码时间。不过,就目前来说,node还算是挺新的,还算是在开荒的状态,想让他真的火起来,可能还需要一点时间。而他火起来的原因,大概是,前端同志们被后台大哥们"打压"的太久了吧,哈哈哈,好不容易有了可能翻身的机会,抓住机会就开始学,当然,不能否认node和前端的接触真的很融洽,而且接触的Mongodb这个数据库也不是很艰难。
(ps:做项目和它火不火有什么关系啊,项目以最优的水平做出来,bug调试好,我觉得就很不错了,哈哈哈)
谈一谈最近学了一段时间的node.js的更多相关文章
- 一段经典的node.js 数据库高并发实现
var proxy = new EventProxy();var status = "ready";var select = function(callback){ proxy.o ...
- 学废了系列 - WebGL与Node.js中的Buffer
WebGL 和 Node.js 中都有 Buffer 的使用,简单对比记录一下两个完全不相干的领域中 Buffer 异同,加强记忆. Buffer 是用来存储二进制数据的「缓冲区」,其本身的定义和用途 ...
- 阿里面试回来,想和Java程序员谈一谈(转载)
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- 谈一谈JDK8的函数式编程 (一)
系列之前我想说的 最近有一段时间没写博客了,这几天回到学校,才闲下来,决定写一写最近学习到的只是,既是为了分享,也是为了巩固.之前看到过一篇调查,文章的数据是学习新知识,光是看只能获得大约5%,然 ...
- 阿里面试回来,想和Java程序员谈一谈
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- 谈一谈前端多容器(多webview平台)处理方案
文中是我个人的一些开发经验,希望对各位有用,也希望各位多多支持讨论,指出文中不足以及提出您的一些建议. 双容器 得益于近几年移动端的发展,前端早已今非昔比,从大型框架来说angularJS.react ...
- 谈一谈Java8的函数式编程(二) --Java8中的流
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...
- 谈一谈深度学习之semantic Segmentation
上一次发博客已经是9月份的事了....这段时间公司的事实在是多,有写博客的时间都拿去看paper了..正好春节回来写点东西,也正好对这段时间做一个总结. 首先当然还是好好说点这段时间的主要工作:语义分 ...
- 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统
***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...
随机推荐
- 9.19.1 反射构造Class对象
构造Class对象的三种方式: 第一种方式: (1)对于系统的类,必须写全名! (2)该方式会将.Cla ...
- Java中的方法
Java方法/函数 方法的定义: Java方法是语句的集合,他们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 方法的优点 使程序 ...
- redi安装
借鉴文章:https://segmentfault.com/a/1190000010709337 在linux中使用wget时,若报-bash: wget: command not found,则表明 ...
- bam文件softclip , hardclip ,markduplicate的探究
测序产生的bam文件,有一些reads在cigar值里显示存在softclip,有一些存在hardclip,究竟softclip和hardclip是怎么判断出来的,还有是怎么标记duplicate ...
- python的引用计数分析(二)
python所有对象引用计数被减少1的情况: 一.对象的别名被赋予新的对象; a = 23345455 # 增加了一个引用 b = a # 增加了一个引用 print(sys.getrefcount( ...
- JSP慕课网阶段用户登录小例子(不用数据库)
getAttribute和setAttribute一起使用,而getParameter用于取得如request传来的参数. Web是请求/响应架构的使用,而request和response就是在服务器 ...
- SSH:Action中Service无法实例化
原来的代码: MailAction: public class MailAction extends ActionSupport { private SysuserinfoService sysuse ...
- pprint模块介绍
简介pprint模块 提供了打印出任何Python数据结构类和方法. 模块方法: 1.class pprint.PrettyPrinter(indent=1,width=80,depth=None, ...
- QQ无法通过ISA2006&TMG2010代理收发图片问题解决
近期公司有业务需求通过TMG访问QQ,但配置多次均无法通过QQ收发图片,文字输入正常. 目前已解决,供参考: 这个问题是SSL端口默认使用了443,但QQ的离线文件不使用这个端口.所以ISA会把QQ的 ...
- log4j日志框架学习
初识Log4j: log4j有三个部分: 1.loggers 负责捕获日志信息. 2.appenders 负责输出信息到不同的目的地 ...