Node.js 是一种建立在Google Chrome’s v8 engine上的 non-blocking (非阻塞), event-driven (基于事件的) I/O平台.
事件驱动架构是建立在软件开发中一种通用模式上的,这种模式被称为发布-订阅或观察者模式。
前言:本文根据最近做的一次分享整理而成,希望能帮忙大家深入理解Node.js的一些原理和实现。
本文内容主要分为两大部分,第一部分是 Node.js 的基础和架构,第二部分是 Node.js 核心模块的实现。
《深入浅出Node.js》:Node异步编程解决方案 之 生成器(Generator)函数
PubSubJS具有同步解耦,因此主题是异步发布的。这有助于保持程序的可预测性,因为在消费者处理主题时,主题的发起者不会被阻止。
前言:之前分享了 Node.js 的底层原理,主要是简单介绍了 Node.js 的一些基础原理和一些核心模块的实现,本文从 Node.js 整体方面介绍 Node.js 的底层原理。
在构建你的第一个Node.js应用程序时,了解node开箱即用的实用工具和API是很有帮助的,可以帮助解决常见的用例和开发需求。
前言:perf_hooks 是 Node.js 中用于收集性能数据的模块,Node.js 本身基于 perf_hooks 提供了性能数据,同时也提供了机制给用户上报性能数据。文本介绍一下 perk_hooks。
近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用。
1.从https://github.com/cornflourblue/node-role-based-authorization-api下载或克隆教程项目代码 2.通过从项目根文件夹(package.json所在的位置)中的命令行运行npm install来安装所有必需的npm软件包。 3.通过从项目根文件夹中的命令行运行npm start来启动api,您应该看到消息 Server listening on port 4000。您可以使用诸如Postman之类的应用程序直接测试api,也可以使用下面的单个页面的示例应用程序来测试它。
在本教程中我们学习 Node.js 的原生 EvenEmitter 类。学完后你将了解事件、怎样使用 EvenEmitter 以及如何在程序中利用事件。另外还会学习 EventEmitter 类从其他本地模块扩展的内容,并通过一些例子了解背后的原理。
这是一个系列文章,你可以关注公众号「五月君」订阅话题《JavaScript 异步编程指南》获取最新信息。
大家好,我是 ConardLi,不知不觉中,2021 年已经接近尾声了,不知道在 2021 这一年,你收获了什么?又失去了什么呢?
发布/订阅者模式应该是我在开发过程中遇到的最多的设计模式。发布/订阅者模式,也可以称之为消息机制,定义了一种依赖关系,这种依赖关系可以理解为 1对N (注意:不一定是1对多,有时候也会1对1哦),观察者们同时监听某一个对象相应的状态变换,一旦变化则通知到所有观察者,从而触发观察者相应的事件,该设计模式解决了主体对象与观察者之间功能的 耦合。
本文翻译自Base64 Encoding and Decoding in Node.js
超快速度 Node.js 所带来的超快生成速度,让上百个页面在几秒内瞬间完成渲染。
本文翻译自How to read and write a JSON object to a file in Node.js
Node中大量运用了事件回调,所以Node对事件做了单独的封装。所有能触发事件的对象都是 EventEmitter 类的实例,所以上一篇我们提到的文件操作的可读流、可写流等都是继承了 EventEmitter。当然我们也可以自定义具有事件行为的自定义对象,仅需要对其继承即可。 继承EventEmitter node的events模块封装了EventEmitter类型,此类型里面封装了事件注册、触发等API。 // 引入events模块 const EventEmitter = require('events
本文翻译自How to encrypt and decrypt data in Node.js
前面一篇文章setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop详细讲解了浏览器和Node.js的异步API及其底层原理Event Loop。本文会讲一下不用原生API怎么达到异步的效果,也就是发布订阅模式。发布订阅模式在面试中也是高频考点,本文会自己实现一个发布订阅模式,弄懂了他的原理后,我们就可以去读Node.js的EventEmitter源码,这也是一个典型的发布订阅模式。
提到 Node.js, 我们脑海就会浮现异步、非阻塞、单线程等关键词,进一步我们还会想到 buffer、模块机制、事件循环、进程、V8、libuv 等知识点。本文起初旨在理顺 Node.js 以上易混淆概念,然而一入异步深似海,本文尝试基于 Node.js 的异步展开讨论,其他的主题只能日后慢慢补上了。(附:亦可以把本文当作是朴灵老师所著的《深入浅出 Node.js》一书的小结)。 异步 I/O Node.js 正是依靠构建了一套完善的高性能异步 I/O 框架,从而打破了 JavaScript 在服务器
https://github.com/webVueBlog/express-node
不同的浏览器使用不同的 JavaScript 解析引擎 Chrome 浏览器 => V8 Firefox 浏览器 => OdinMonkey(奥丁猴) Safri浏览器 => JSCore IE 浏览器 => Chakra(查克拉) 其中,Chrome 浏览器的 V8 解析引擎性能最好!
Websocket 库 现在大部分新版浏览器、Android、IOS 都已经支持了 Websocket,直接使用 Websocket 问题不大,那么 Websocket 库的作用是什么呢? Websocket库提供了不少辅助功能,使开发更简单,例如 心跳检测机制、重连、不支持Websocket情况下的后退方案 engine.io 跨浏览器、跨设备的双向通信层实现,小巧,非常稳定,具有高可用性,而且对负载均衡器友好,易扩展 https://github.com/socketio/engine.io WS 一
第一次接触Node.js时,就觉得他只不过是用javascript实现的服务端。但实际上他提供了许多浏览器端不具备的方法,比如EventEmitter类。我们在本文中来学习如何使用EventEmitter。
注意:文件名不要使用node.js 来命名,否则执行 node 文件名 会打开文件。也就是说除node这个名字你随便起,而且最好也不要使用中文。
正值春节,新冠病毒现状猖狂,每天宅在家里学习(睡了一上午还有一下午)也不忘关注疫情数据,所有人都在担心今天又有多少人成为了生化武器...为了防止这种情况的再次发生,我决定做个邮件推送的小工具...
MapAttack是一款实时的,基于地理位置的游戏,其通过Socket.io,node.js,和Redis实现了其实时性。下面文章对整个游戏及其技术实现进行了描述,推荐给大家。
工欲善其事必先利其器,要实现在MATLAB中直接调用Javascript函数,首先需要准备好一款可在当前系统中执行Javascript语言的工具,咱这里推荐大家使用Node.js (nodejs.org/en/),直接下载推荐的版本即可。
前言:trace 系统用于收集内核的数据,本文介绍在 Node.js 中 trace 的架构和实现,因为 Node.js 的 trace 系统是基于 V8 的,所以也会介绍 V8 部分。因为实现细节比较多,逻辑也比较复杂,有兴趣的同学可以配合源码一起阅读或者看一下前面的相关文章。
在本章中,我们将构建一个典型的Web应用程序,在前端和后端使用RxJS。我们将转换文档对象模型(DOM)并使用Node.js服务器中的WebSockets进行客户端 - 服务器通信。
在Node.js开发中,选择合适的库对于提高开发效率和优化应用程序性能至关重要。本文将介绍七个备受关注的Node.js库,它们在各自的领域中展现了出色的功能和性能。这些库分别是:Config、Fetch、Ioredis、Multer、Cache、Fast-xml-parser和Cron。我们将深入了解它们的特点、用法和优势,帮助你更好地利用它们来开发出高质量的Node.js应用程序。
经常需要创建新项目,然而项目结构,一些初始代码等往往是相同的,这个时候可以制作模板来解决,为了更方便创建模板项目,甚至可以控制远程同步创建GitHub仓库,自动配置CI/CD等,于是我选择开发一个CLI工具来加快日常开发效率,之前有使用过Node.js开发CLI(moq就是其作品),但效果不佳,总的说来其实还是对Node.js不熟悉,如果过多的花费时间在工具的开发上就得不偿失了,于是便有了使用熟悉的C#来开发CLI工具。注:本文只是记录如何使用C#开发一个简单的CLI工具。
将素材目录下的index.html页面,拆分成三个文件,分别是:index.css,index.js,index.html
注意:文件名不要用node.js来命名,也就是说除了node这个名字随便起,最好不要使用中文。
Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境
在 Node.js 中一个很重要的模块 Events(EventEmitter 事件触发器),也称为发布/订阅模式,为什么说它重要,因为在 Node.js 中绝大多数模块都依赖于此,例如 Net、HTTP、FS、Stream 等,除了这些系统模块比较知名的 Express、Koa 框架中也能看到 EventEmitter 的踪迹。
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。
当我们谈到语言时,你会有无数种选择。为了方便你做决定,我把它们分成几类。对于刚开始进入后端开发的初学者,我建议你随便选一门脚本语言去学,它们都有大量的需求,也能让你很快地成长。如果你已经有了前端开发的一些知识,你可能会发现 Node.js 会比较容易,再加上它有很大的就业市场。
Express.js 是用于开发 Node.js REST API 的优秀框架,但是它并没有为您提供有关如何组织 Node.js 项目的任何线索。
1. 背景 在日常的项目中,常常需要在用户侧记录一些关键的行为,以日志的形式存储在用户本地,对日志进行定期上报。这样能够在用户反馈问题时,准确及时的对问题进行定位。 为了保证日志信息传输的安全、缩小日志文件的体积,在实际的日志上传过程中会对日志进行加密和压缩,最后上传由若干个加密文件组成的一个压缩包。 为了更清晰的查看用户的日志信息。需要搭建一个用户日志管理系统,在管理系统中可以清晰的查看用户的日志信息。但是用户上传的都是经过加密和压缩过的文件,所以就需要在用户上传日志后,实时的对用户上传的日志
@mgattozzi 写了一个Rust executor项目,只有一个文件,只使用了标准库的功能,这个项目有良好的注释,帮助开发者理解像 tokio_rs 这样的库底层的逻辑。
主要学习:JavaScript+Node.js内置API模块(fs、path、http等)+第三方API模块(express、mysql等)
1. 基本概念 1.1. 流的历史演变 流不是 Node.js 特有的概念。它们是几十年前在 Unix 操作系统中引入的,程序可以通过管道运算符(|)对流进行相互交互。 在基于 Unix 系统的 MacOS 以及 Linux 中都可以使用管道运算符(|),它可以将运算符左侧进程的输出转换成右侧的输入。 在 Node 中,我们使用传统的 readFile 去读取文件的话,会将文件从头到尾都读到内存中,当所有内容都被读取完毕之后才会对加载到内存中的文件内容进行统一处理。 这样做会有两个缺点: 内存方面:占用大量
在这一代码中有一个非常奇特的地方,就是 setImmediate 会在 setTimeout 之后输出。有以下几点原因:
领取专属 10元无门槛券
手把手带您无忧上云