Node.js 25 正式发布:性能飙升、安全升级、全面向 Web 靠拢!

一、Node.js 25 来了:一次更现代、更安全的"Web Runtime"进化

Node.js 25.0.0 已于本周正式发布。

这一版本不仅带来了 V8 引擎升级(14.1) ,还正式引入 细粒度权限模型默认启用的 Web Storage API,让 Node.js 在性能、安全性与 Web 标准兼容性上迈出关键一步。

从整体趋势上看,Node.js 正在从"后端运行时"演化为一个 更贴近浏览器语义的通用执行平台

本次版本代号 "Iron",象征稳定与强化 ------ 这也是官方对现代 Node 的定位:高性能 + 高安全 + 高兼容性


大家好,我是考拉!

这是我历时 1 个多月翻译的 Nest.js中文文档( V10.x 版本)。就在 1024 这天上线吧!网站访问速度还是蛮快的哦!

Nest中文文档访问地址 Nest中文文档 nestjs.inode.club

二、V8 升级到 14.1:性能全面提升

Node.js 25 最大的底层变化是 升级到 V8 14.1 引擎,这一版本带来了显著的性能与开发体验改进:

1. JSON.stringify 大幅提速

V8 优化了内部序列化逻辑,使 JSON.stringify 在处理大型对象时速度提升可达数倍,API 返回结果更稳定。

这对于需要序列化海量配置或响应数据的场景(如 SSR、API 网关)尤其显著。

2. 内置 Uint8Array Base64/Hex 转换

Node.js 25 新增了 Uint8Array.toBase64() / Uint8Array.fromBase64() 等内置方法,

让数据编码和解码无需依赖第三方库(如 Buffer 或 base64-js),简化脚本逻辑。

js 复制代码
// 示例:高效转换 Buffer ⇄ Base64
const buffer = Buffer.from('Hello, Node.js 25!');
const uint8 = new Uint8Array(buffer);
const base64 = uint8.toBase64();

console.log(base64); // 'SGVsbG8sIE5vZGUuanMgMjUh'

// 反向转换
const decoded = Uint8Array.fromBase64(base64);
console.log(Buffer.from(decoded).toString()); // 'Hello, Node.js 25!'

3. WebAssembly + JIT 优化

V8 持续改进了 JIT pipeline 与 wasm 编译路径,模块加载与执行延迟进一步降低。

这对于使用 Rust / C++ 模块或 AI 推理扩展的 Node 应用尤为有益。


三、安全模型全面增强:默认更安全的 Node.js

Node.js 25 引入了新的 权限模型(Permission Model),这项实验性特性正在成为默认安全策略的核心部分。

更细粒度的运行时控制

  • --allow-net:是否允许网络访问
  • --allow-inspector:是否允许调试访问
  • --experimental-permission:启用权限模型

这意味着开发者可以像在浏览器沙箱中一样,隔离敏感操作,防止包依赖被攻击或误用。

js 复制代码
// 示例:限制网络访问
import net from 'node:net';

try {
  const socket = net.createConnection({ host: 'example.com', port: 80 });
  socket.on('connect', () => console.log('Connected!'));
} catch (err) {
  console.error('Permission denied:', err.message);
}

💡 运行时需添加:

bash 复制代码
node --experimental-permission --allow-net app.js

这类安全控制为 Node CLI 工具、Electron 应用或服务端插件系统提供了新的"沙箱"基础。


四、Web 标准整合:默认启用 Web Storage

Node.js 25 正式取消了 --experimental-webstorage 标志,
Web Storage(localStorage / sessionStorage)现已默认可用!

这意味着 Node.js 现在可以像浏览器一样使用本地存储,

极大简化了 SSR(服务端渲染)与同构(isomorphic)开发流程。

js 复制代码
// 示例:Node 中的 localStorage
localStorage.setItem('user', JSON.stringify({ name: 'Developer' }));
const user = JSON.parse(localStorage.getItem('user'));
console.log(user); // { name: 'Developer' }

localStorage.clear();

对于使用 React Server Components、Next.js、Remix 等框架的开发者来说,

这一步让"前后端共享逻辑"更自然,也减少了环境兼容层的复杂性。


五、弃用与清理:告别旧时代的 API

Node.js 25 同时对历史遗留 API 做了重要清理:

  • 移除 SlowBuffer(长期弃用)
  • 废弃 fs.rmdir(..., { recursive: true }) 的 recursive 选项
    → 改用 fs.rm(path, { recursive: true })
  • 🧰 支持便携编译缓存(Portable Compile Cache)
    提升跨平台构建与 CI/CD 性能
  • 🔬 WebAssembly 新增 JSPI(JavaScript Plugin Interface)
    支持 JS ↔ Wasm 的高效交互

同时,内部依赖也迎来更新:

  • npm → 11.6.2
  • nghttp3 → 1.11.0
  • ngtcp2 → 1.14.0(增强 QUIC 协议支持)
  • 新增 V8 CPU 分析与 QUIC 测试服务器工具

六、Node.js 25 的意义:从"服务端"走向"通用执行平台"

如果说 v18~v20 是"稳定性时代",

那么 v25 明显代表了 Node.js 向"Web 统一运行时"的进一步靠拢:

演进方向 具体体现
性能现代化 V8 14.1 + 编译缓存 + JIT 优化
安全默认化 权限模型 + 沙箱机制
Web 标准化 Web Storage、ErrorEvent 全局可用
跨环境一致性 SSR、CLI、Wasm 都可共享 API

这一切,让 Node.js 不再只是"后端的 JS",

而是逐步成为一个 可在浏览器、服务端、边缘计算中无缝运行的通用平台


七、升级建议

  • v25 属于 Current(实验)版本,不建议立即用于生产环境
  • 适合探索新特性、验证兼容性、提前适配 v26 LTS
  • 重点关注代码中使用的:
    • fs.rmdirSlowBuffer
    • 自定义权限模型(--allow-*)
    • Base64/Hex 编码逻辑
  • 对 CLI / SSR / AI 推理类项目建议创建独立分支进行试用

八、结语:更"Web"的 Node,更强的生态未来

Node.js 25 的每一次改动都在回应一个趋势:
前端与后端的边界,正在消失。

当你可以在同一份代码中同时使用 fetchlocalStoragePermission APIUint8Array 编码、甚至 Wasm 插件时,

Node.js 已不再只是运行脚本的工具,而是 下一代 Web Runtime 的重要一环

中文文档刚上线,如果发现文档中有什么问题,欢迎指出,一定及时更新, 希望可以方便更多小伙伴。

1024 程序员节日快乐,无BUG,祝大家都能早早下班!

我这边也有一些Node Nest.js 技术交流交流群,感兴趣的可以加我的私人微信 ikoala520 进群,一起学习,共同进步。

相关推荐
陈振wx:zchen20086 小时前
前端-ES6-11
前端·es6
菜鸟una6 小时前
【瀑布流大全】分析原理及实现方式(微信小程序和网页都适用)
前端·css·vue.js·微信小程序·小程序·typescript
木易 士心6 小时前
Android 开发核心知识体系与面试指南精简版
android·面试·职场和发展
专注前端30年7 小时前
2025 最新 Vue2/Vue3 高频面试题(10月最新版)
前端·javascript·vue.js·面试
文火冰糖的硅基工坊7 小时前
[嵌入式系统-146]:五次工业革命对应的机器人形态的演进、主要功能的演进以及操作系统的演进
前端·网络·人工智能·嵌入式硬件·机器人
2401_837088508 小时前
ResponseEntity - Spring框架的“标准回复模板“
java·前端·spring
yaoganjili8 小时前
用 Tinymce 打造智能写作
前端
angelQ8 小时前
Vue 3 中 ref 获取 scrollHeight 属性为 undefined 问题定位
前端·javascript
Dontla8 小时前
(临时解决)Chrome调试避免跳入第三方源码(设置Blackbox Scripts、将目录添加到忽略列表、向忽略列表添加脚本)
前端·chrome