后端开发技术深度解析

发表时间: 2024-06-22 16:42

当我和同事讨论到这个问题的时候,我开始纳闷,“我当时正在学PHP动态脚本。”他说,你可以用Node.js这个以JavaScript为核心的非常成熟的框架来写后端,没必要学PHP。

首先我们来了解一下Node.js的六大特性

01. 它是一个 Javascript 运行时

02. 依赖 Chrome V8 引擎进行代码解释

03.事件驱动

04.非阻塞 I/O

05.轻量级、可扩展,适合实时数据交互应用

06.单进程,单线程

两大优势

01.高并发(最重要的优势)

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

说完了优点,再来说说缺点

01.不适合CPU密集型应用程序。

02、CPU 密集型应用给 Node 带来的主要挑战是:由于 JavaScript 的单线程特性,如果有长时间运行的计算(比如大循环),则无法释放 CPU 时间片,从而无法发起后续的 I/O。应将大型计算任务分解为多个小任务,以便计算能够及时释放,而不会阻塞 I/O 调用的发起。

03.仅支持单核CPU,不能充分利用CPU。

04、可靠性低。一旦某一部分代码崩溃,整个系统就会崩溃。

原因:因为是单进程,单线程

告诉我们它为我们解决了什么问题?

nodejs解决的问题

01. 并发连接数

02.异步、事件驱动模型

03.异步机制、事件驱动整个过程不阻塞新用户的连接,也不需要维护老用户的连接。

04.基于这样的机制,理论上 NodeJS 可以陆续响应用户的连接请求,因此 NodeJS 可以支持比 Java、PHP 程序更高的并发。虽然维护事件队列也是需要成本的,而且由于 NodeJS 是单线程的,事件队列越长,得到响应的时间就越长,还是会无法应对并发的增加。

05.NodeJS 解决了并发连接的问题:它改变了连接服务器的方式,每个连接都会发出一个在 Node.js 引擎进程中运行的事件并将其放入事件队列中,而不是为每个连接生成一个新的 OS 线程(并为其分配一些支持内存)。

06.I/O阻塞Java和PHP也有实现并行请求(子线程)的方法,但是Node.js可以很自然地通过回调函数和异步机制来实现。

但是!但是!但是!会有些问题~

问题 01.

浮点数据丢失精度

精度损失问题的表现形式,源码如下:

console.log(0.1+0.2);    //0.30000000000000004

结果应该是0.3,但是运行结果出现了一个神秘的问题,这在后端开发中是绝对不允许的,这个问题不只出现在JS中,经测试JAVA和PHP中也存在,唯独C中不存在,我怎么没学过其他语言!我怎么不知道!

源码如下(借用了别人的代码[偷来的,呵呵呵]):

const floatAdd = (arg1, arg2) => {    let r1,r2,m;    try {    	r1 = arg1.toString().split(".")[1].length;    } catch(e) {    	r1 = 0;    }    try {    	r2 = arg2.toString().split(".")[1].length;    } catch(e) {    	r2 = 0;    }    m  =Math.pow(10,Math.max(r1,r2));    return (arg1*m+arg2*m)/m;}; console.log(floatAdd(0.1,0.2));    // 0.3