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(数据库)

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


猜你喜欢

转载自blog.csdn.net/plpldog/article/details/80801788
今日推荐