标签: 后端开发

35 个内容

笔记(33)

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 浏览

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

Elliot Yang·
102 浏览

**问题**:Prisma 无法连接 WSL 中 PostgreSQL,因 `localhost` 解析为 IPv6,而仅 `127.0.0.1` 转发至 WSL。 **方案**:用 WSL IP 替换(如 `172.25.x.x:5432`),Windows CMD 测试 `Test-NetConnection -ComputerName <IP> -Port 5432`,排查防火墙/Postgres 配置或连接字符串问题。(128 字符)

Elliot Yang·
83 浏览

本文提供了一份 JWT 签名算法速查表,对比了 HS256、RS256、ES256 等算法在性能、体积和部署难度上的差异。针对不同应用场景,如内网高 QPS、对外开放平台和移动端,给出了选型建议,并提供了 Go 语言的性能基准测试代码。

Elliot Yang·
181 浏览

针对耗时较长的接口,建议采用异步加状态轮询的方案。同步请求负责状态修改,异步处理实际任务,客户端通过轮询查询任务状态。

Elliot Yang·
89 浏览

软删除是中大型项目中常见的需求,但实现不当会影响性能和数据一致性。本文针对软删除提出最佳实践,包括使用时间戳字段`deleted_at`代替布尔值,采用联合索引优化查询,ORM层封装处理,定期物理删除过期数据,以及数据归档等架构演进建议。同时,还讨论了软删除可能遇到的问题及规避方法。

Elliot Yang·
195 浏览

Hono框架中,`app.use(auth).get(...)`会导致`auth`中间件全局生效。推荐使用子应用`app.route()`或精确路径方式注册中间件,限制`auth`的作用范围,避免影响其他路由。子应用方式在大项目中更易维护。

Elliot Yang·
121 浏览

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 浏览

为实现SSE实时流,需禁用Nginx默认缓冲。`X-Accel-Buffering: no`可关闭缓冲,提升实时性,但需关注吞吐量和多级代理兼容性。结合tcp_nodelay优化,监控内存压力,利用基准测试验证。

Elliot Yang·
397 浏览

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

Elliot Yang·
125 浏览

本文深入探讨了 NestJS 高级 OpenAPI 实践,包括类型安全响应、ESM 支持、模型冲突解决、Schema 组合及测试策略。强调类型安全、效率、规范和灵活性间的平衡,并展望了基于 TSDoc 的文档生成趋势。

Elliot Yang·
138 浏览

本文深入探讨了Nginx负载均衡和TypeScript类型扩展。涵盖TS声明合并、Nginx负载均衡算法(Round Robin, Least Conn, IP Hash, Generic Hash)、Keepalive连接优化、压缩算法、分层缓存、TLS 1.3和监控调试,并展望了服务网格、WebAssembly扩展和AI驱动的自动调优趋势。

Elliot Yang·
103 浏览

本文深入解析GraphQL架构,包括类型系统、执行引擎及NestJS集成。重点讲解了Resolver设计、订阅实现、性能优化和安全防护。探讨了Schema Federation等架构演进,并分析了适用场景及性能争议,强调结合业务场景合理选型。

Elliot Yang·
107 浏览

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

Elliot Yang·
128 浏览

Prisma在大规模应用中面临类型系统性能和分库分表支持的挑战。类型膨胀导致VSCode卡顿,可通过拆分schema、优化TS配置和硬件升级缓解。分库分表方面,Prisma对分区表支持不足,可采用混合架构,注入分区元数据并扩展Prisma Client。Prisma未来将优化类型生成、支持分布式引擎和智能分区感知。应克制schema设计、混合使用原生SQL,并监控编译时长。

Elliot Yang·
117 浏览

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 浏览

RESTful API的资源更新机制中,`PUT`用于完整替换资源,而`PATCH`用于部分修改。`PUT`需发送完整资源表示并具有幂等性,`PATCH`则需指定修改指令集和格式。实践中,JSON Merge Patch和JSON Patch提供不同粒度的修改方案。分布式系统需考虑最终一致性挑战,可采用批量PATCH和乐观锁定等策略优化。GraphQL和OpenAPI为API设计提供了新思路,需注意字段冲突和版本兼容等问题。

Elliot Yang·
94 浏览

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·
343 浏览

tRPC 支持 `FormData` 和二进制类型(如 `File`, `Blob`, `Uint8Array`)的提交。`FormData` 可以直接使用,也可用 `zod-form-data` 校验。二进制类型会被转换为 `ReadableStream`,可通过 `octetInputParser` 处理。

Elliot Yang·
288 浏览

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

Elliot Yang·
141 浏览

RESTful API 设计中,`PUT`和`PATCH`均用于更新资源。`PUT`用于完整更新,需提供资源完整表示,且操作幂等;`PATCH`用于部分更新,只需发送修改数据,通常非幂等。`PUT`适用于更新全部数据,`PATCH`适用于更新部分数据。

Elliot Yang·
89 浏览

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

Elliot Yang·
110 浏览

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

Elliot Yang·
96 浏览

本文介绍了 NestJS 中 Swagger 的自定义装饰器实现泛型返回、解决 schema 覆盖问题的方法,并提及 Swagger CLI 插件的使用。针对 NestJS 不支持 ESM 的问题,提出了使用动态 import 的解决方案。最后介绍了在 Jest 单元测试中,使用 `onModuleDestroy` 来优雅关闭连接。

Elliot Yang·
157 浏览

本文档是作者记录的问题和解决方案集锦。包括iOS Chrome下`history.pushState`导致toolbar消失的bug,monaco-editor禁用overflow-x滚动条的方法,Safari的cookie处理问题,Nest.js的header错误,OpenWrt的DNS解析,TypeScript装饰器问题,以及Docker日志无颜色、Windows键盘Win键失效等问题的解决办法。

Elliot Yang·
131 浏览

动态(2)

E
Elliot Yang
公开

NestJS 使用 @HttpCode 注解

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

浏览:136点赞:0