标签: Node.js

34 个内容

笔记(32)

Hono作为极简Web框架,其优雅停机依赖Runtime(如Node.js、Bun)。**关键问题**:Runtime差异及异步任务卡死。**方案**:Node.js用@hono/node-server的server.close()监听SIGTERM;Bun用server.stop();追踪activeRequests轮询等待任务完成。Serverless环境无需处理。

Elliot Yang·
48 浏览

**Node.js 优雅停机实现**:监听 SIGTERM/SIGINT 信号,关闭服务器停止新请求,清理数据库/定时器等资源,设置 30s 硬超时强制退出。解决直接 kill/OOM 导致数据不一致问题,提供 Express+Mongoose 代码模板,支持消息队列、容器化环境。

Elliot Yang·
37 浏览

Node.js 当前依赖libuv的epoll处理高并发网络I/O(非阻塞),但文件I/O需线程池(阻塞开销大)。io_uring支持正实验集成(Node.js 18+,需UV_USE_IO_URING=1),消除线程池、减少系统调用,实现高效异步磁盘与网络I/O。

Elliot Yang·
41 浏览

本文探讨Node.js中安全注入DSL模板变量的核心挑战,提供Handlebars(文本替换)、Jexl(逻辑表达式)和json-rules-engine(结构化规则)等方案。建议封装DSLEngine预编译模板,避免eval()注入风险,优化性能并处理类型转换。(148字符)

Elliot Yang·
44 浏览

文章介绍Node.js中`NODE_OPTIONS="--import ./instrument.server.mjs"`配置,用于不修改业务代码即注入全局逻辑(如监控)。**关键问题**:ESM时代需预加载模块。**方案**:Node.js 18.19+/20.6+的`--import`参数,先执行ESM模块再启动主程序,支持性能追踪、Loader注册等场景,优于`--require`。

Elliot Yang·
53 浏览

Node.js v20.6.0+引入原生`--env-file`加载.env文件(取代dotenv,早加载、多文件覆盖)和`--enable-source-maps`支持源码映射(错误栈重定向源代码,提升调试)。命令:`node --env-file .env --enable-source-maps dist/index.cjs`。

Elliot Yang·
69 浏览

文章解释Prisma中`db.$queryRaw`标签模板字符串的工作原理:分解为SQL骨架和变量数组,自动转为参数化查询(占位符? +独立数据),有效防止SQL注入。与`$queryRawUnsafe`直接执行字符串形成对比,后者易受注入攻击。

Elliot Yang·
102 浏览

Node.js中动态正则匹配通过`RegExp`构造函数实现,需注意转义和性能。优化策略包括缓存、防ReDoS攻击。可用于动态路由、模式组合。最佳实践包括输入验证、性能监控。V8引擎优化和WebAssembly是前沿趋势。需警惕回溯失控,注意Unicode和多行匹配。

Elliot Yang·
109 浏览

Node.js内存管理涉及V8引擎的分代垃圾回收机制,包括新生代Scavenge算法和老生代Mark-Sweep-Compact算法。手动GC应谨慎,生产环境依赖自动回收。内存泄漏需用Chrome DevTools等工具诊断,WeakRef可辅助管理。优化包括对象池、调整V8参数和利用并行/增量/并发标记。监控heap_used等指标,压力测试并拆分微服务,减少内存分配是最佳实践。未来趋势包括ML驱动的GC和异构计算内存管理。

Elliot Yang·
156 浏览

本文对比Go、Java和Node.js运行时机制,剖析其核心差异与设计哲学。Go静态编译,协程并发,适用于云原生;Java基于JVM,生态成熟,但冷启动慢;Node.js单线程事件循环,适合I/O密集型。选型需权衡性能、生态和团队能力。

Elliot Yang·
166 浏览

本文深入解析 Express 响应机制,涵盖 HTTP 响应生命周期、核心方法原理(头操作、状态切换、响应体)、Express 扩展(类型推断、渲染引擎)、工程实践(错误、优化)、现代 Web 开发趋势、争议思考及学习路径。着重强调理解底层原理和最佳实践。

Elliot Yang·
125 浏览

pnpm 通过内容寻址存储和虚拟存储目录实现高效依赖管理,`pnpm prune --prod` 可优化生产环境依赖。全局存储通过硬链接节省空间,定期清理可释放磁盘。pnpm patch 用于修复和定制依赖。`.npmrc` 配置优化安装和存储,可进行依赖完整性验证和安全审计。未来趋势包括 Zstandard 压缩、多包仓库优化和签名验证。

Elliot Yang·
270 浏览

本文深入解析了 TypeScript 类型声明、ESLint 规则、Node.js 子进程管理、WebStorm 性能优化及 Copilot 代理配置等多个技术领域。强调理解原理、性能测量、优化实施和效果验证,并在技术迭代中保持对底层机制的敬畏。

Elliot Yang·
158 浏览

本文针对 Node.js 项目中 OpenSSL 兼容性与依赖管理问题,分析了 OpenSSL 3.0 升级带来的兼容性挑战,并提供了降级 Node.js、启用旧版 Provider 等临时解决方案,以及锁定版本、多阶段构建、安全依赖白名单等工程化实践,帮助开发者应对历史遗留项目的维护困境。

Elliot Yang·
128 浏览

Node.js文件读取性能分析揭示了readFileSync和readFile的性能差异。小文件同步读取利用缓存,但异步读取在高并发下存在调度延迟和GC压力。io_uring有望提升异步I/O性能。最佳策略是混合模式,并需关注未来技术发展,如V8指针压缩和PMEM。性能优化需根据具体场景选择。

Elliot Yang·
126 浏览

Node.js核心机制包括高精度计时(process.hrtime),异步资源追踪(async_hooks)和上下文管理(AsyncLocalStorage)。文件系统操作需注意同步写入风险。PowerShell假死问题可通过检查事件循环和缓冲机制解决。了解全局对象差异,掌握二进制数据处理技巧,结合性能分析工具和安全措施,能构建高性能Node.js应用。

Elliot Yang·
108 浏览

本文深入解析现代前端技术体系,涵盖同构渲染与激活机制、React Hooks原理、Fiber架构与时间切片、Node.js链路追踪、Linux tar工具应用及前沿趋势。强调理解底层原理并融入系统编程,以提升工程能力。

Elliot Yang·
106 浏览

Node.js同步I/O阻塞主线程,异步I/O利用libuv线程池。流式读取I/O性能最佳,Promise存在内存合并损耗。工程实践中,I/O密集型场景用异步流,CPU密集型用Worker Threads。同步I/O适于启动阶段。需警惕Promise陷阱和内存泄漏,并监控事件循环延迟。

Elliot Yang·
98 浏览

Node.js中使用RabbitMQ或Kafka限制并发:RabbitMQ通过`prefetch(1)`限制每个消费者的并发数;Kafka通过控制消费者实例数量和消息处理逻辑(如共享计数器配合Redis)限制总并发数,避免系统过载。

Elliot Yang·
342 浏览

该文介绍了使用 Sharp 库优雅解决 iOS 图片方向问题的方法。Sharp 基于 libvips,性能卓越,能自动处理 EXIF 方向信息,并提供多种图片处理功能,如调整大小、压缩、格式转换等。最佳实践包括备份原始图片、选择合适压缩率、使用 WebP 格式和实施缓存策略。

Elliot Yang·
101 浏览

浏览器通常自动解压服务器返回的 GZIP 数据。若需手动解压,前端可用 `pako` 库,Node.js 可用 `zlib` 模块。浏览器 `fetch` 获取的数据默认解压。

Elliot Yang·
101 浏览

使用npm命令或`.npmrc`文件设置npm国内镜像源,包括主registry、node编译依赖、sass、electron等二进制包镜像,并提供清除缓存命令。

Elliot Yang·
152 浏览

该文探讨Node.js同步/异步文件读取性能差异及阻塞问题。背景:`fs.promises.readFile`比`fs.readFile`慢。问题:同步读取阻塞事件循环,影响并发。方案:避免同步I/O,采用异步方式,如`fs.promises.readFile`,提升服务器并发性能。

Elliot Yang·
141 浏览

本文总结了React同构渲染中的Isomorphic和Hydrate概念,解释了React Hooks的实现原理,及React Fiber如何通过时间切片实现中断渲染。同时介绍了Node.js链路追踪和tar命令的常用参数及示例。

Elliot Yang·
100 浏览

本文总结了Node.js开发中的常见问题与技巧。包括:使用`process.hrtime()`进行高精度计时,利用`async_hooks`跟踪异步资源生命周期,以及`cls-hooked`简化上下文管理。讨论了`fs.writeFileSync()`在父目录不存在时报错的解决,PowerShell执行Node程序假死,`globalThis`、`global`和`window`的区别,`ArrayBuffer`和`Uint8Array`,以及`readFile()`和`readFileSync()`的选择。

Elliot Yang·
110 浏览

Prisma 在大型 schema 下生成过大的 `index.d.ts` 文件,导致编辑器自动补全和类型检查缓慢。社区提出了表分区 (Table Partitioning) 方案,但尚未解决。问题与 GitHub Issue #4807 和 #1708 相关。

Elliot Yang·
150 浏览

本文记录了老项目启动时遇到的常见问题。问题一为Node.js版本过高导致的OpenSSL错误,解决方案为降级Node.js版本或启用legacy OpenSSL provider。问题二为如何使用git协议安装npm依赖,解决方案为配置SSH密钥后,使用`npm install git+ssh://[email protected]:<username>/<repository>.git`命令安装。

Elliot Yang·
102 浏览

本文介绍了如何使用 Web Push API 和 Service Workers 在浏览器中实现系统通知。关键步骤包括:前端通过 JavaScript 获取用户许可并订阅推送服务,以及后端使用 Node.js 的 `web-push` 库,利用 VAPID keys 和订阅信息发送通知。

Elliot Yang·
134 浏览

本周报记录了开发中遇到的问题及解决方案。包括:`prisma-json-types-generator`在WebStorm的类型提示问题;Node.js使用`spawn`实时回显shell命令输出及`ENOENT`错误处理;WebStorm使用MUI卡顿优化;Copilot代理配置;Shadowrocket分流设置。

Elliot Yang·
183 浏览

本文介绍了使用pnpm优化Node.js项目依赖管理的技巧。包括:使用`pnpm install --prod`或`pnpm prune --prod`命令仅安装或保留生产依赖,避免引入开发依赖造成镜像臃肿;使用`pnpm store prune`清理pnpm全局存储,释放磁盘空间;以及使用`pnpm patch`。

Elliot Yang·
156 浏览

本文介绍了 GraphQL 的核心概念:查询、突变和订阅,以及如何在 Nest.JS 中实现。查询用于获取数据,突变用于修改数据,订阅用于实时获取数据更新。文章提供了 GraphQL 语法示例和 Nest.JS 的代码实现。

Elliot Yang·
96 浏览

本文整理了 Node.js/Express 中 response 对象的方法及其调用时机。根据 response 的状态转换,将方法分为 Head 状态保持、Head 转 Body、Body 状态保持、Body 转 Finished 以及 Head 转 Finished 几个类别,方便开发者理解和使用。

Elliot Yang·
136 浏览

动态(2)

E
Elliot Yang
公开

The queueMicrotask() method, which is exposed on the Window or Worker interface, queues a microtask to be executed at a safe time prior to control returning to the browser's event loop.
First, nextTick queue is checked to get tasks for its execution, once it is exhausted, the microTasks queue is checked. After finishing the tasks in the microtask queue the process of checking nextTick and microTasks queues are repeated until the queues have been emptied.
They have different queues. The nextTick's queue is managed by node and the microtask one is managed by v8.
The nextTick queue is checked first after the current function/script execution, and then the microTask one.

浏览:142点赞:0
E
Elliot Yang
公开

NestJS 使用 @HttpCode 注解

使用 @HttpCode(200) 防止 @Post() 的状态码为 201

浏览:136点赞:0