分类 web 下的文章

搭建 http server

下面是一个 http server 的示例:

const http = require('http')
process.env.PORT = 3000
const port = process.env.PORT

const server = http.createServer((req, res) => {
    res.statusCode = 200
    res.setHeader('Content-Type', 'text/html')
    res.end('<h1>hello world</h1>')
})
server.listen(port, () => console.log(`server running at port ${port}`))

访问 http://localhost:3000 就会看到页面显示 hello world

- 阅读剩余部分 -

Event Loop 事件循环

event loop 是我们学习 node.js 中最重要的方面之一。因为它解释了 node.js 如何进行异步动作,同时不会出现 IO 阻塞问题。这也是 node.js 能够变得如此流行的原因之一。

node.js 代码运行在单进程中,也就是说它在一刻只能执行一个任务。这一限制特性使得我们不用担心任务间冲突问题。我们在变开发中只需要专注于代码本身,同时应避免进程阻塞,例如同步方式等待网络请求,死循环等。

通常情况下,浏览器中的每个 tab 页面都是都有各自独立的 event loop,防止某个页面的死循环或过高的资源消耗影响到整个浏览器的体验。我们只需要关注于我们的代码运行在一个单一的 event loop 中,编程中要注意到这一点,防止进程阻塞。

- 阅读剩余部分 -

调用 node.js 文件

node.js 有内建的 module system 模块系统,一个node.js 文件可以导入其他 node.js 文件内定义的功能。

语法如下:

const library = require('./libs')

和导入其他第三方模块类似使用 require 指令,需要指定 node.js 文件路径。以上示例表示导入当前目录下的 libs.js 文件。

js 文件中默认定义的 objects 等元素是私有的,不能够被外部使用。在被导入的文件中,需要在引用前 expose 暴漏出需要被外部使用的功能。需要使用到 module system 的 module.exports API 来实现。

- 阅读剩余部分 -

V8 JavaScript Engine

V8 是 chrome 浏览器的 JavaScript Engine 名称,它是用来在 chrome 中获取和执行 JavaScript 代码的工具。V8 提供了一个 JavaScript 的运行环境,DOM 及其他 web API 是由 browser 提供的。

JavaScript Engine 是独立于其所寄生的浏览器的,这一特性才使 node.js 得以诞生。node.js 选择了 V8 Engine 且随着 node.js 的不断成长,大量服务端通过 JavaScript 编写的程序使用 v8 Engine。

基于 V8 同样可以创造桌面应用,例如 Electron 项目。

不同的浏览器有着各自的 Engine:

  • Firefox has SpiderMonkey
  • Safari has JavaScriptCore (also called Nitro)
  • Edge was originally based on Chakra but has more recently been rebuilt using Chromium and the V8 engine.

所有的 Engine 都遵守 ECMAScript 标准。

- 阅读剩余部分 -

Node.js 是一个开源跨平台的 JavaScript 运行环境,它是时下最流行的工具,能够应用于几乎所有的项目。Node.js 运行 V8 JavaScript engine。它是 chrome 的核心,这让 Node.js 可以脱离浏览器运行 JavaScript 代码。

一个 Node.js app 运行在一个线程中,不会给每个 request 建立一个进程。Node.js 在其标准库中提供了一个 asynchronous I/O primitives 异步 IO 原生语法库来防止阻塞,同时 Node.js 中的库使用一种 non-blocking paradigms 无阻塞范式,将阻塞作为一种 exception 来处理。

当 Node.js 执行 IO 动作,例如读取文件,访问数据库等,不同于等待进程,占用 CPU 资源,Node.js 会在收到 request 响应后再去处理后续操作。这将使 Node.js 可以在一个 server 上同时处理上千条链接而不会引入大量的进程而导致 bug 出现。

Node.js 的另一大优势是使用 JavaScript 的前端开发者可以同时编写 server 端的代码而不用学习新的语言。

最新的 ECMAScript 标准可以在 Node.js 中使用,你不需要等待用户去更新浏览器。通过使用不同版本的 Node.js 来切换不同的 ECMAScript 标准。

- 阅读剩余部分 -