You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何浏览器发起API请求的响应速度远快于NodeJS、Rust等编程语言?

为什么Chrome中请求耗时远低于Node.js/Rust?以及Node.js请求优化方案

一、耗时差异的核心原因

  1. TCP连接复用差异
    Chrome浏览器会维护长期的TCP连接池,针对常用测试域名会预建立连接,且HTTP/2默认支持多路复用,避免了每次请求都重新执行TCP三次握手+TLS握手的开销。而Node.js中默认的axios请求会创建新连接,单次请求的握手时间(通常几十到上百毫秒)占比极高,这是核心差异。

  2. DNS缓存与解析优化
    Chrome会利用系统级DNS缓存,甚至提前预解析常用域名的DNS记录;而Node.js默认的DNS缓存策略(TTL较短)可能导致每次请求都重新发起DNS解析,增加额外耗时。

  3. 网络栈与调度差异
    Chrome的网络栈经过多年深度优化,采用独立的网络线程处理IO,调度效率更高;Node.js的事件循环虽异步高效,但客户端库(如axios)的封装开销、连接池默认配置不足等因素,会放大单次请求的初始化耗时。

注:Rust reqwest的耗时接近Node.js,是因为同样是单次请求新建连接,未利用连接池复用,且Rust的网络栈优化程度介于Chrome和Node.js之间。

二、Node.js请求速度优化方案

1. 复用HTTP客户端连接池

axios默认每次请求会创建新的HTTP Agent,启用keepAlive可以复用TCP连接,避免重复握手:

import axios from 'axios';
import http from 'http';
import https from 'https';

// 创建带连接池的单例axios实例
const axiosInstance = axios.create({
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true })
});

// 后续所有请求使用该实例
const start = Date.now();
axiosInstance
  .get('https://jsonplaceholder.typicode.com/todos/1')
  .then(() => console.log((Date.now() - start) + 'ms'))
  .catch(err => console.error(err));

2. 使用高性能HTTP客户端

替换axios为更轻量、优化更好的客户端,比如Node.js官方推荐的undici,它基于HTTP/2默认优化,性能接近浏览器:

import { fetch } from 'undici';

const start = Date.now();
fetch('https://jsonplaceholder.typicode.com/todos/1')
  .then(() => console.log((Date.now() - start) + 'ms'))
  .catch(err => console.error(err));

3. 优化DNS解析

通过强制IPv4优先(避免IPv6解析延迟)或配置DNS缓存,减少解析耗时:

// 强制IPv4优先解析
import dns from 'dns';
dns.setDefaultResultOrder('ipv4first');

4. 启用HTTP/2

axios可以通过配置adapter支持HTTP/2,利用多路复用进一步提升性能:

import axios from 'axios';
import http2 from 'http2';

const axiosInstance = axios.create({
  adapter: require('axios/lib/adapters/http2')
});

内容的提问来源于stack exchange,提问作者Shinigami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:35:19