node.js准备知识(一)

最近为了拓宽知识面准备自学Node.js,不过在此之前有一些服务器端的知识需要了解,自己查阅了一些视频和网站后总结如下。新手上路,其中错误想必不少,还望各位同仁不吝指教。

一、浏览器工作原理:

客户端(浏览器/app)发送请求

服务器接(tomcat/apache/iis)收到请求,然后通过I/O从数据库(mysql/db2/oracle)中读取出数据

服务器将数据传输给客户端

客户端对数据进行解析,在页面进行显示

而我们提高性能的手段就是缩短发送到响应的时长。

二、提高性能的方法

1、  提高客户端发送速度(无法控制,该性能由用户网速决定)

2、  提高服务器响应速度(可以控制,通过提高服务器带宽,CDN加速等方法加速,但有一定程度的瓶颈,带宽不能无上限的提高)

3、  提高服务器处理请求任务的速度(通过算法优化,或者使用多线程来优化)

4、  提高服务器从磁盘读取/写入到数据库的速度(所有项目后期都会遇到的瓶颈,举例:饭店提高点菜速度(发送速度)、给厨师传话速度(响应速度)、服务员的数量和上菜速度(多线程和算法优化),但是后厨做饭的速度是有极限的(从数据库读取/写入的速度))同样有上限,我们通过分布式、矩阵式、刀片式等方式进行磁盘读取提高的读取速度是有限的。每个线程到达后,由于磁盘读取速度达到瓶颈,线程只能等待读取出的数据,这种情况下的阻塞称为I/O阻塞。

三、V8引擎的介绍

Chrome浏览器的引擎即V8引擎,实质是一个专门对JavaScript语言进行解释和执行的流程虚拟机。起初V8引擎内置在浏览器里,在浏览器中执行JS代码,也可以内置在node.js环境下,然后帮助服务器解析JS代码。

四、V8引擎的优势

1、  强大的编译和快速执行效率(通过运用大量算法和技巧)

2、  性能好,执行效率远超Python和ruby等脚本语言

3、  历史遗留问题少,没有同步I/O

4、  利用事件驱动机制

五、node.js的诞生

修改V8引擎的内核,将其用在了服务器开发后的一系列内容就是Node.js。其中作用最大的就是异步I/O和事件驱动。

六、node.js简介

它让JavaScript可以运行在服务器端的平台,进而使JavaScript能像其他后段语言一样与系统进行交互。而之前的JavaScript只能在浏览器(客户端)中运行,作用面很窄。

优势:不用架设在任何服务器软件上;更适合中小项目开发;投资回报率最高,最小的成本,最大的性能。

特点:

1、  单线程:

优势:减少了内存开销,不再有创建线程、销毁线程的事件开销;而多线程会占用内存。

劣势:不能做大型开发,在使用node.js时,一个8g内存的服务器能至少同时处理四万用户的连接;如果一个事件阻塞了I/O,那么唯一的线程就会瘫痪;

若node.js崩溃则整个系统崩溃。

2、  非阻塞I/O

传统I/O的劣势在于,当单线程采用阻塞I/O处理机制时,在执行了访问数据库的代码后,整个线程都会停顿下来等待数据库返回数据再执行下面的代码,也就是说I/O阻塞降低了代码的执行效率。而非阻塞I/O是在执行了数据库访问代码后立即执行后续的代码,把数据库返回的结果放在回调函数中,当函数执行完毕自动获取该结果,这就提高执行效率。

实现非阻塞I/O的前提条件:当某个I/O执行完毕后必须以事件形式通知执行I/O操作的线程,线程执行这个事件的回调函数;线程中要有事件循环,不停的遍历事件队列来发现待处理的事件。

优势:阻塞模式下一个线程只能处理了一个任务,想提高吞吐量必须通过多线程,而非阻塞模式下整个线程永远都在执行操作而没有等待时间。

3、  事件驱动

将事件放入一个事件环中,不停的查看事件环来让回调函数(可能是磁盘I/O,网络通信、数据库查询等操作)对其进行处理。

七、node.js的应用方向

1、  善于I/O,天生异步的特点让其非常擅长进行任务调度和处理并发I/O,但不善于计算。

2、  具体方向:网站开发、即时通信、小程序开发、跨平台开发等。

3、  node.js过于追求性能而导致健壮性有所不足,所以不适用于银行、证券等方向,但适合创业公司这种小体量、追求性能的公司。

4、  大型企业在客户端和服务器端直接加设node.js,适合用node.js做的就尽量用成本低回报高的node.js来做。

八、客户端与服务器

两种主要架构

C/S(Client/Server):客户端/服务器架构,如下载到本地的优酷视频客户端

优点:1、服务器中只有数据库,其他的业务逻辑和界面都交给客户端完成

           2、较为安全,用户界面丰富,用户体验好

3、速度快,由于业务逻辑和外部资源都已经下载到本地了,加载起来会毕竟迅速,很多大型的游戏都是C/S架构。

缺点:每次升级都要重新安装,针对不同的操作系统开发,可移植性差。

B/S(Browser/Server):浏览器/服务器架构,如访问优酷网

特点:基于浏览器访问,将业务层交给服务器完成,客户端仅仅提供界面的渲染和数据的交换等工作。

优点:因为只做服务器端,可以跨平台,移植性强。

缺点:安全性较低,所有的资源都由服务器端完成,加载速度较C/S架构慢,用户体验较差。

猜你喜欢

转载自www.cnblogs.com/i-can-do-this-alld-ay/p/9789695.html
今日推荐