【Node.js入门学习】彻底理解Node.js(非语法篇)

news/2024/11/30 18:28:56/

导论:入门新的技术,尽量从历史发展的路径来理解它出现的原因

一、Node.js的总体概况

1. JavaScript的诞生

在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器,成为Web时代开启时最著名的第一代互联网公司。由于网景公司希望能在静态html页面上添加一些动态效果,于是叫Brendan Eich这哥们在两周之内设计出了JavaScript语言。为什么起名叫JavaScript?这是因为当时Java语言就已经非常热门了,所以网景公司希望借助Java的名气来推广,但事实上JavaScript除了语法上有点像Java,其他部分基本上没啥关系。

2. ECMAScript的诞生

因为网景开发了JavaScript,一年后微软又模仿JavaScript开发了JScript,为了让JavaScript成为全球标准,几个公司联合ECMA组织制定了JavaScript语言的标准,被称为ECMAScript标准。

所以简单来说就是,ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。

目前JavaScript最新版本就是ECMAScript 6,简写为ES6

3. JavaScript引擎Chrome V8

为什么需要JavaScript引擎?因为我们写的JavaScript代码直接交给CPU是无法执行的,所以我们还要使用汇编语言来写一个JavaScript解释器来解释JavaScript,但是写汇编代码是一件很痛苦的事情,并且不同类型的CPU的指令集是不一样的,那就意味着需要给每一种CPU重写汇编代码。

那么我们可不可以用高级语言来解释JavaScript,然后高级语言再转变成汇编语言。这是可以的,例如谷歌的Chrome V8就是一款JavaScript引擎,是C++代码写的。

JavaScript——高级语言——汇编语言——机器语言——CPU执行

通过这个过程,就不需要自己再写一套符合JavaScript的解释程序。

4. Node.js的诞生

话说有个叫Ryan Dahl的外国人,他的工作是用C/C++写高性能Web服务,对于高性能,异步IO、事件驱动是基本原则,但是用C/C++来实现就太痛苦了。于是这位仁兄开始设想用其他高级语言开发Web服务。他评估了很多其他语言,发现很多语言虽然同时提供同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以最终Ryan选择了JavaScript,因为JavaScript是单线程执行的,根本不能执行同步IO操作,只能进行异步IO操作。

虽然当时已经有JavaScript引擎Chrome V8了,但是无法满足小伙Ryan对后端服务的需求,所以小伙Ryan就自己计划写个JavaScript引擎,不过他很快明智地放弃了,因为Chrome V8是开源的,虽然不满足需求,但是可以以用户体验不佳为理由,让Google投资区优化V8,小伙只负责改造一下拿来用,还不用付钱。

于是在2009年,Ryan正式推出了基于JavaScript引擎Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。

5. 名词解释:事件驱动

事件驱动
浏览者通过鼠标或键盘执行的操作称为事件,对此事件做出响应的代码称为事件处理程序,事件的发生使得响应的事件处理程序被执行称为事件驱动。


http://www.ppmy.cn/news/45427.html

相关文章

ajax 的入门案例

一、ajax ajax,Asynchronous JavaScript And XML,异步的JavaScript和XML 同步:伴随着页面的刷新或跳转,即全局刷新;同步请求会阻塞代码的执行,即同步请求会一个一个的执行 异步:在不刷新页面…

出口欧盟认证机构为什么推荐CE认证

产品做CE证书要什么好处,CE证书要什么作用? 在中国很多中小企业困扰的是,好不容易走出国门接到来自国外的订单。却因为没有相应的产品安全认证而无法顺利取得订单。或者当产品到达目的地后,因为无法提供相应的产品安全认证证明文件…

【Leetcode -205.同构字符串 -228.汇总区间】

Leetcode Leetcode - 205.同构字符串Leetcode - 228.汇总区间 Leetcode - 205.同构字符串 题目:给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符…

设计模式:外观模式

一、定义 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。 二、角色 Facade:系统对外的统一接口,客户端连接子系统功能的入口SubSystem子系统…

前端配置项

默认下载安装所需插件的时候会自动添加配置,但有时候可能需要自己去配,比如系统重装(重装的是C盘,系统变量会丢失,软件在其他盘符并不需要重新下载)。 前端开发涉及到需要配置变量的软件有:git…

Ps 毛玻璃效果

哈喽,各位小伙伴!今天我们来学习一下如何制作毛玻璃效果? 复制图层 导入一张图片,Ctrlj复制一层,右键—智能对象(目的:方便后期更换图片) 画矩形 画矩形(不要描边),…

day10 线程池及gdb调试多线程

目录 线程池的概念 概念: 必要性: 线程池的基本结构: 线程池的实现 完整代码 线程的GDB调试 线程池的概念 概念: 通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合; 必要性&#xff…

Spring Security 权限控制

Spring Security 是一个为 Java 应用程序提供身份验证和授权功能的强大框架。其中一个核心特性就是能够为特定的资源强制执行权限和访问控制规则。本文将探讨 Spring Security 权限控制的场景、使用和实现原理。 场景 Spring Security 权限控制可以用于多种场景,其…