学习链接
Differences between Node.js and the Browser (nodejs.dev)
译文
在Node.js中编写JavaScript应用程序与在浏览器内为网络编程有何不同?
浏览器和Node.js都使用JavaScript作为其编程语言。
构建在浏览器中运行的应用程序与构建Node.js应用程序是完全不同的事情。
尽管都是使用JavaScript,但有一些关键的区别,使得体验完全不同。
从一个广泛使用JavaScript的前端开发者的角度来看,Node.js应用程序带来了一个巨大的优势:
- 用一种单一的语言对所有东西--前端和后端--进行编程。
你有一个巨大的机会,因为我们知道全面、深入地学习一门编程语言有多难,而通过使用同一种语言来完成你在网络上的所有工作--无论是在客户端还是在服务器上,你都处于一个独特的优势地位。
变化的是生态系统。
在浏览器中,大多数时候你所做的是与DOM或其他网络平台API(如Cookies)进行交互。
当然,这些并不存在于Node.js中。你没有文档、窗口和所有其他由浏览器提供的对象。
而在浏览器中,我们没有Node.js通过其模块提供的所有漂亮的API,如文件系统访问功能。
另一个很大的区别是,在Node.js中你可以控制环境。除非你正在构建一个任何人都可以在任何地方部署的开源应用程序,否则你知道你将在哪个版本的Node.js上运行该应用程序。与浏览器环境相比,你不能奢侈地选择你的访问者将使用什么浏览器,这非常方便。
这意味着你可以编写所有你的Node.js版本支持的现代ES2015+JavaScript。由于JavaScript的发展如此之快,但浏览器的升级速度却有点慢,有时在网络上你只能使用旧的JavaScript/ECMAScript版本。你可以使用Babel将你的代码转换为与ES5兼容的代码,然后再运送到浏览器,但在Node.js中,你不需要这样。
另一个区别是,Node.js同时支持CommonJS和ES模块系统(从Node.js v12开始),而在浏览器中,我们开始看到ES模块标准被实施。
在实践中,这意味着你可以在Node.js中同时使用require()和import,而你在浏览器中则仅限于import。
总结
Node.js和浏览器之间的差异
- 工作环境不同 - 浏览器拥有文档、窗口以及浏览器提供的对象,Node.js中没有,主要负责通过模块提供API
- 控制环境 - Node.js可以控制运行的版本,并且都支持运行,浏览器必须要考虑不同浏览器的兼容性(Babel)
- 模块化 - Node.js同时支持CommonJS和ES模块系统,浏览器主要支持ES模块。。
山中何事?松花酿酒,春水煎茶。——张可久《人月圆•山中书事》