本人吐槽!本人是学渣,然后网上关于nodeJS的大多都是坑,简直让人要奔溃了。若非最近总是被要求要nodeJS,坚决不会去碰的。。。天生对cmd命令觉得无比的高大上,尽管一直在用git版本控制器!然后我也和估计和看此文的小白们同一起点,如果有node大神,跪求传授必杀技,吐槽完毕!

首先无非就是什么是NodeJS?

简单的说 Node.js 就是运行在服务端的 JavaScript。

Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

谁适合阅读本教程?

如果你是一个前端程序员,你不懂的像PHP、Python或Java等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。

Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。

当然,如果你是后端程序员,想部署一些高性能的服务,那么学习Node.js也是一个非常好的选择。


学习本教程前你需要了解

在继续本教程之前,你应该了解一些基本的计算机编程术语。如果你学习过Javascript,PHP,Java等编程语言,将有助于你更快的了解Node.js编程。


第一个Node.js程序:Hello World!

脚本模式

以下是我们的第一个Node.js程序:

console.log("Hello World");

保存该文件,文件名为 helloworld.js, 并通过 node命令来执行:

node helloworld.js

程序执行后,正常的话,就会在终端输出 Hello World。

估计就是这么个鬼

交互模式

打开终端,键入node进入命令交互模式,可以输入一条代码语句后立即执行并显示结果,例如:

$ node
> console.log('Hello World!');
Hello World!

可能就是这么个玩意

NodeJS的优缺点(也就是面试的时候用用)

优点:1. 高并发(最重要的优点)

2. 适合I/O密集型应用

缺点:1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;

2. 只支持单核CPU,不能充分利用CPU

3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

原因:单进程,单线程

解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;

(2)开多个进程监听同一个端口,使用cluster模块;

4. 开源组件库质量参差不齐,更新快,向下不兼容

5. Debug不方便,错误没有stack trace

 适合NodeJS的场景

1. RESTful API

这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找 一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。

2. 统一Web应用的UI层

目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。

不讨论这种架构是好是坏,但是有另外一种实践,面向服务的架构,更好的做前后端的依赖分离。如果所有的关键业务逻辑都封装成REST调用,就意味着在上层 只需要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另一个页面的,他们也不用管用户数据更新是 通过Ajax异步获取的还是通过刷新页面。

3. 大量Ajax请求的应用

例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,NodeJS能响应大量的并发请求。  总而言之,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。

 

最新文章

  1. C# 中使用Word文档对图像进行操作
  2. 使用enum建立简单的状态机
  3. 纪念逝去的岁月——C/C++字符串反转
  4. ORACLE RAC集群的体系结构
  5. draw call 的优化
  6. Win7安装IDL8.0以及破解
  7. IE6 背景透明
  8. 【转】简单几步让App Store软件下载快如迅雷 -- 不错!!!
  9. 关于ADO.NET的一些知识整理
  10. [BestCoder Round#26] Apple 【组合数学】
  11. Android Paint之 setXfermode PorterDuffXfermode 讲解
  12. Android4.0设置界面改动总结(三)
  13. RQNOJ PID2 / 开心的金明
  14. Yii2中限制访问某控制器的IP(IP白名单)
  15. Safari Private 模式下 localStorage 的问题
  16. Palindrome poj3974
  17. iOS objc_msgSend 野指针Crash 从 Log 提取 Crash 时 selector 的地址和名字并打印
  18. 解决Maven依赖报错问题
  19. Redis 通过 info 查看信息和状态
  20. C/C++基础----用于大型程序的工具(异常处理,命名空间,多重继承)

热门文章

  1. 20135220谈愈敏Blog7_可执行程序的装载
  2. MFC中对话框类(Dialog)的应用
  3. 使用OneNote的COM组件,实现OCR功能。
  4. OSX 上安装 Scrapy 的那些坑
  5. 【web必知必会】—— 使用DOM完成属性填充
  6. PS转换图片——我教你
  7. Javascript 使用小案例
  8. Html设置图标icon
  9. Java-异常Throwable,Exception,Error
  10. 详解HTML中的window对象和document对象