什么是nodejs
nodejs从性能上来说是编写高性能网络服务器的JavaScript工具包。(翻译过来就是:用js开发服务端程序)
1、单线程、异步、事件驱动、
2、特点是:快。耗内存多。
3、异步消除内存测试:
网上一百万级并发测试,未优化的情况下消耗了16G内存。
如何理解nodejs执行速度快,但耗内存多的特点
PHP的知识点
PHP本身是不支持多线程的,是因为PHP的服务器Apache本身支持多线程。当Apache启动的时候,它先提供150个线程给PHP,假设在并发的条件下,打比方也就是同一时间突然有1万多个用户打开了浏览器访问这个网页的话,那么最多150用户先从线程池中取得这150个线程,这150个线程中有上传的线程,有下载的线程,在线程执行完任务后,将结果返回给客户时,才能放回线程池中,然后被其他用户使用。
这个过程是PHP的运行过程。
nodejs是单线程,那么它是如何运行的呢,它如果采用像以上PHP一样的单线程操作,操作起来会特点的慢,所以nodejs在这里采用了异步操作,大大的提供了工作的效率。那么nodejs是如何操作的呢。
首先nodejs中只有一个线程,假设有1万个用户并发访问,nodejs会采用异库操作,在第一个用户访问的时候,这个线程会为该用户访问在内存中开辟出一块小的内存让他进行上传下载。在第二个用户到来的时候,这个线程又会给他开辟一块小的内存,以此类推来完成用户同一时间的大批量并发访问。
举一个恰当的例子,这就相当于病人去医院看病,一个护士只负责给病人挂号,让病人去各个科室看医生。护士扮演了单线程的角色,而各个科室扮演了被开辟出的内存的角色。
nodejs这种访问的特点是:
速度快,(我不管你干什么,你到对应的内存中去就可以了)
耗内存多。(多个用户并发访问就需要开辟多个内存)
PHP在完成任务后才能去运行其他的任务。
补充:
在面试PHP时可能会碰到以下面试问题:
高并发,大数据量的情况下如何去更快的完成?
去优化这种情况,而优化的核心内容都这围绕着一个线程更快的去结束来提高这个PHP的性能。
nodejs对比PHP
有人说 nodejs和JavaScript是竞争关系,实际上可以说这两者是互补关系,而nodejs和PHP的竞争才是最大的,有国外的人曾在技术论坛上从这两者的性能上提出了如下对比:
nodejs的优点:
性能高,(机制问题)
开发效率高,(省不了优化的事)
应用范围广(可以开发桌面系统,electrom框架)
nodejs的缺点:
新,人少
中间件少
IDE不完善。
nodejs的劣势和解决方案
?默认不支持多核,但用cluster可以解决
?默认不支持服务器集群,node-http-proxy可以解决
?使用nginx做负载均衡,静态的有nginx处理,动态的由nodejs处理
?forever或node-cluster实现灾难恢复
我们学习框架选择
?比较热门的包括:express、koa、Hapi
?以及express基础之上的sails
?express:完善、稳定、文档全、社区大
?koa:超前,正在完善中,用ex6开发的。
?Hapi:(不适合初学者)复杂(一个简单的hello,world都要做出很多堆砌),适合做复杂的大型项目。
本教程学习路径
node.js基础(让你跟深入了解他的底层原理)
Express框架
sail框架
项目(微信开发):
sails+vue.js
sails+react
代码拷贝方式教学:http://www.yuankuwang.com
编辑器(IDE):
?记事本(Editplus)
?webstorm
?Atom或sublime
学习方法:
?多看文档
?摸索测试