js和nodejs

JS 是一种语言规范。按照 JS 语言规范写的文本,可以称为 JS 代码。JS 代码需要执行才有效果,有多种不同的 JS 执行环境(又称 “引擎”),按照现代的技术可以称之为编译器和虚拟机的混合体,包括 V8 用于 Chrome 浏览器和 Node.js,Chakra 用于 IE,WebKit 用于 Safari。在浏览器里执行的 JS 引擎的上下文(又称为环境,Context)可以认为是一个网页,这个网页会有若干个 JS 代码文件。如果把 JS 引擎的上下文从浏览器移到操作系统(Windows,Linux,Darin)作为一个独立的进程,就是 Node.js。作为系统进程,Node.js 操作的东西就不是浏览器上的 DOM 和点击事件等,而是硬盘、内存、CPU,因此相比于前端开发,Node.js 是一种后端技术,会有很多后端才会用到的 API,比如从硬盘的文件系统里读文件的 API。Node.js 和前端 JS 通用的东西就是 JS 的语言规范和异步思想,使用的环境和目标完全不同,可以认为需要“重新”学习。


-----------------------------------------------------------------------------------

首先 Node.js 和前端用的 JavaScript 是一样的,有前端基础了,上手 Node.js 写点玩具 Web server 或者 REST api 是很容易的。

因为运行环境就是两回事儿了,理解运行环境的工作原理、熟悉提供的 API 远比学习一门语言要麻烦。

前端嘛,就是运行在浏览器环境里,主要需要理解浏览器和HTTP协议,用到 WebSocket 就再多看一个,天天打交道的就是 DOM、XHR 等等一众浏览器提供的 API,当然现在写原生API的人不多了,大多使用在这个基础上封装出来的框架或者库。

Node.js 就复杂一点,尽管它设计之初是拿来写高性能服务的,但发展到今天实际用途已经很广泛了,除了服务器端开发,桌面、命令行工具用得也挺广泛的。

Node.js 本身是 JavaScript(v8) + 事件驱动的异步I/O(libuv) + 基本库。要说有前端的基础,特别是 XHR、File 和 Fetch API 的基础,学习 Node.js 应该是容易的。

但是想要拿 Node.js 解决问题,需要理解问题领域的背景知识、熟悉相关的 API、库和工具链。比如后端可能学习 http(s)协议、Kao/Express之类的框架、REST规范、OAuth、要用 Redis 存 session、MongoDB/MySQL 存数据,上规模的话还要考虑负载均衡、水平扩展、一致性、容灾、安全性等一堆麻烦事儿;而桌面(GUI,OS,Media,fs等)、命令行(shell,term等)之类的也会各有一些自己的领域知识。

就我这儿而言,一个能搞定各种前端麻烦事儿的专家,比前后都会一点儿的前栈,价值要高很多。




---------------------------------------------------------

avaScript是一门动态脚本语言,可以运行于宿主环境(如,浏览器等包含js引擎的环境)。

浏览器通过内置一个Js引擎可以解释执行js代码,浏览器实现js标准规范(ECMAScript),提供API,可以使用JavaScript调用,支持我们操作页面DOM,调用某些浏览器操作等客户端功能,也可以说JavaScript = ECMAScript + DOM + 宿主环境(BOM),这就是所说的前端js;

而node.Js是一个基于Google V8引擎(js引擎的某一种)构建的JavaScript运行环境,提供API,可以使用JavaScript调用,支持我们读取本地文件,开启本地主机端口服务,发送,接受请求等服务端功能,node.JS = JavaScript + node环境(提供node API...);

所以,如果要执行JavaScript代码,需要一个js引擎,你可以安装一个浏览器(内置js引擎),或nodejs环境(内置js引擎),如果你在js代码中调用了浏览器提供的API,则必须安装一个浏览器,若调用了nodejs API,则必须安装nodejs环境,然后以各自规定的方式加载、执行JavaScript代码。


------------------------------------

一个是基于浏览器端的 javascript (前端 JS)

一个是基于服务端的 javascript (后端 Node.js)

  1. 语法一样
  2. 组成不一样

JavaScript:

  • ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
  • DOM(一些操作页面元素的方法)
  • BOM(一些操作浏览器的方法)

Node.js:

  • ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
  • OS(操作系统)
  • file(文件系统)
  • net(网络系统)
  • database(数据库)

----------------------------------------------


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript和Node.js都采用事件循环机制来处理异步操作。事件循环是一种执行模型,它允许JavaScript在单线程上运行,同时处理异步操作。下面是JavaScript和Node.js事件循环的简要介绍: JavaScript事件循环: JavaScript事件循环由一个事件队列和一个执行栈组成。当代码执行时,它会被添加到执行栈中。如果代码中包含异步操作,例如定时器或者事件监听器,那么这些操作会被添加到事件队列中。当执行栈为空时,事件队列中的下一个事件会被取出并添加到执行栈中执行。这个过程会一直重复,直到事件队列为空。 Node.js事件循环: Node.js事件循环与JavaScript事件循环类似,但是它包含了更多的阶段。Node.js事件循环包含了6个阶段,分别是timers、I/O callbacks、idle、prepare、poll和check。在每个阶段中,Node.js会执行相应的操作。例如,在timers阶段中,Node.js会执行所有的定时器回调函数。在poll阶段中,Node.js会等待I/O事件完成并执行相应的回调函数。如果事件队列为空并且没有被设置任何定时器,那么Node.js会在这个阶段等待新的事件被添加到事件队列中。 下面是一个简单的Node.js事件循环的例子: ```javascript // 输出结果:timer1 timer2 promise1 promise2 console.log('timer1'); setTimeout(() => { console.log('timer2'); }, 0); Promise.resolve().then(() => { console.log('promise1'); }).then(() => { console.log('promise2'); }); console.log('end'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值