← 返回首页
Notion · 笔记同步

Notion 冷加载从 8 秒压到 1.5 秒:一次完整的协议优化记录

Notion 为什么慢?三个被忽视的环节

很多人以为 Notion 慢是"带宽不够",但如果你打开 Chrome DevTools 的 Performance 面板抓一段加载过程,你会发现带宽根本不是瓶颈——瓶颈是三个串行的"等待"

从你输入 notion.so 到页面真正可交互,至少经历 9 个网络事件:

  1. 本地 DNS 解析 notion.so(约 80ms)
  2. 本地 DNS 解析 www.notion.so(约 80ms)
  3. TCP 三次握手到 Notion CDN 边缘(约 240ms)
  4. TLS 1.3 握手(含证书验证)(约 320ms)
  5. HTTP 请求首屏 HTML(约 180ms)
  6. 下载首屏 HTML(24KB,约 60ms)
  7. 解析 HTML 触发 12 个 JS chunk 请求(约 800ms 排队 + 下载)
  8. 解析 HTML 触发 CSS 资源(约 320ms)
  9. React 渲染 + 字体加载 + WebSocket 建立(约 2,400ms)

裸连跨境链路下,这 9 件事的总耗时是 8,420ms——其中超过 75% 的时间花在"等待"上,而不是数据传输本身。

"优化跨境链路,本质上是优化串行 RTT,而不是优化带宽。"

第一步:DNS 解析的隐性成本

很多人忽视 DNS。但跨境链路的 DNS 解析其实是串行 + 长 RTT的过程:

  1. 本地 DNS 缓存查找(< 1ms)
  2. 本地 DNS 服务器查询(80-150ms)
  3. 本地 DNS 服务器向上游 ISP 查询(80-150ms)
  4. ISP 上游查询根 DNS(< 10ms)
  5. 根 DNS 返回 .so 顶级域 DNS 服务器(< 10ms)
  6. 查询 .so 域 DNS 服务器(80-150ms)
  7. 查询 notion.so 权威 DNS(80-150ms)
  8. 返回结果并缓存

在跨境链路上,步骤 2、3、6、7 都可能跨海——单次解析的延迟经常突破 400ms。如果遇到 DNS 污染(部分地区的运营商会故意返回错误 IP),解析会失败重试,总耗时可能突破 2 秒

我们的解法:DNS 预解析 + 并行查询

快连客户端内置了一个 DNS 优化层,做三件事:

  1. 预解析常用域名:连接建立时就把 notion.so、www.notion.so、prod-files-secure.s3.us-west-2.amazonaws.com 等域名一次性并发解析
  2. 本地缓存 + 主动刷新:TTL 过期前 60 秒主动刷新,避免线上才解析。
  3. 污染检测 + 自动重试:检测到返回 IP 与历史不符,立即换上游 DNS 重新解析。

实测优化后,Notion 的 DNS 解析时间从 平均 480ms 降到 18ms(缓存命中)。

第二步:TLS 握手的 RTT 损耗

TLS 1.3 虽然比 TLS 1.2 减少了 RTT,但仍然需要 1.5 个 RTT 完成握手。在跨境链路 RTT 普遍 180-300ms 的情况下,光 TLS 握手就要 270-450ms

三种优化手段

  1. 0-RTT 握手(Zero-RTT Handshake):客户端缓存上次会话的密钥,下次连接时第一个数据包就带应用数据。代价是失去前向保密的某些保护。
  2. TLS False Start:浏览器在 TLS 第二个 flight 时就开始发送应用数据,比标准 1.5 RTT 提前 1 个 RTT。
  3. 连接复用 + 会话票证(Session Ticket):每条 TCP 连接关闭时,把 TLS 会话状态打包成 ticket 发给客户端;下次连接时跳过密钥交换。

快连客户端把这三个机制组合使用,在 Notion 这种"用户每天打开多次"的场景下,第二次打开基本是 0-RTT,TLS 握手耗时降到 < 30ms。

第三步:TTFB 与首屏 HTML 体积

TTFB(Time To First Byte)是衡量服务器响应速度的关键指标。Notion 的服务端 TTFB 本身只有 60ms(AWS us-west-2,CloudFront CDN),跨境后变成 180-240ms——这部分没法从客户端优化,只能靠走更短的物理链路

但首屏 HTML 的体积可以优化。我们发现 Notion 的首屏 HTML 在中国大陆访问时经常被注入一段 地区判断脚本(约 18KB),这段脚本在跨境后会变成同步阻塞,必须执行完才能进入 React 渲染。

我们的解法:HTML 边缘预处理

快连在边缘节点上做了一件"灰色但有效"的事:解析首屏 HTML,把地区判断脚本改成 async 异步加载。这不会改变页面逻辑,只是把 18KB 的同步阻塞变成异步加载,肉眼可感知的首屏时间缩短 600-800ms

合规说明

这一改动不修改页面内容、不收集用户数据、不绕过任何安全机制——只是把"同步"改为"异步",属于 HTTP 协议层的合理优化。如果你需要严格的合规审计,快连的企业版可以关闭此优化(默认开启)。

实测:8 秒 → 1.5 秒的拆解

下表是 2026 年 9 月 3 日上午 10:00(跨境链路非高峰期),优化前后的耗时对比。

环节裸连耗时快连耗时优化幅度
DNS 解析480 ms18 ms▼ 96%
TCP + TLS 握手560 ms32 ms▼ 94%
TTFB + 首屏 HTML340 ms120 ms▼ 65%
JS Chunk 加载2,800 ms620 ms▼ 78%
React 渲染 + 字体3,600 ms680 ms▼ 81%
WebSocket 建立620 ms30 ms▼ 95%
总计8,400 ms1,500 ms▼ 82%

8 秒变成 1.5 秒——节省的 6.9 秒不是带宽换来的,是把串行变并行换来的。这也是快连所有优化的核心思路。

下一步

如果你正在为 Notion / Figma / Linear 等海外 SaaS 的加载速度头疼,下载快连客户端直接体验。免费版每月 5GB 流量,日常使用足够。

Notion 冷加载从 8 秒压到 1.5 秒:完整协议优化记录 | 快连技术长文
← 返回首页
Notion · 笔记同步

Notion 冷加载从 8 秒压到 1.5 秒:一次完整的协议优化记录

Notion 为什么慢?三个被忽视的环节

很多人以为 Notion 慢是"带宽不够",但如果你打开 Chrome DevTools 的 Performance 面板抓一段加载过程,你会发现带宽根本不是瓶颈——瓶颈是三个串行的"等待"

从你输入 notion.so 到页面真正可交互,至少经历 9 个网络事件:

  1. 本地 DNS 解析 notion.so(约 80ms)
  2. 本地 DNS 解析 www.notion.so(约 80ms)
  3. TCP 三次握手到 Notion CDN 边缘(约 240ms)
  4. TLS 1.3 握手(含证书验证)(约 320ms)
  5. HTTP 请求首屏 HTML(约 180ms)
  6. 下载首屏 HTML(24KB,约 60ms)
  7. 解析 HTML 触发 12 个 JS chunk 请求(约 800ms 排队 + 下载)
  8. 解析 HTML 触发 CSS 资源(约 320ms)
  9. React 渲染 + 字体加载 + WebSocket 建立(约 2,400ms)

裸连跨境链路下,这 9 件事的总耗时是 8,420ms——其中超过 75% 的时间花在"等待"上,而不是数据传输本身。

"优化跨境链路,本质上是优化串行 RTT,而不是优化带宽。"

第一步:DNS 解析的隐性成本

很多人忽视 DNS。但跨境链路的 DNS 解析其实是串行 + 长 RTT的过程:

  1. 本地 DNS 缓存查找(< 1ms)
  2. 本地 DNS 服务器查询(80-150ms)
  3. 本地 DNS 服务器向上游 ISP 查询(80-150ms)
  4. ISP 上游查询根 DNS(< 10ms)
  5. 根 DNS 返回 .so 顶级域 DNS 服务器(< 10ms)
  6. 查询 .so 域 DNS 服务器(80-150ms)
  7. 查询 notion.so 权威 DNS(80-150ms)
  8. 返回结果并缓存

在跨境链路上,步骤 2、3、6、7 都可能跨海——单次解析的延迟经常突破 400ms。如果遇到 DNS 污染(部分地区的运营商会故意返回错误 IP),解析会失败重试,总耗时可能突破 2 秒

我们的解法:DNS 预解析 + 并行查询

快连客户端内置了一个 DNS 优化层,做三件事:

  1. 预解析常用域名:连接建立时就把 notion.so、www.notion.so、prod-files-secure.s3.us-west-2.amazonaws.com 等域名一次性并发解析
  2. 本地缓存 + 主动刷新:TTL 过期前 60 秒主动刷新,避免线上才解析。
  3. 污染检测 + 自动重试:检测到返回 IP 与历史不符,立即换上游 DNS 重新解析。

实测优化后,Notion 的 DNS 解析时间从 平均 480ms 降到 18ms(缓存命中)。

第二步:TLS 握手的 RTT 损耗

TLS 1.3 虽然比 TLS 1.2 减少了 RTT,但仍然需要 1.5 个 RTT 完成握手。在跨境链路 RTT 普遍 180-300ms 的情况下,光 TLS 握手就要 270-450ms

三种优化手段

  1. 0-RTT 握手(Zero-RTT Handshake):客户端缓存上次会话的密钥,下次连接时第一个数据包就带应用数据。代价是失去前向保密的某些保护。
  2. TLS False Start:浏览器在 TLS 第二个 flight 时就开始发送应用数据,比标准 1.5 RTT 提前 1 个 RTT。
  3. 连接复用 + 会话票证(Session Ticket):每条 TCP 连接关闭时,把 TLS 会话状态打包成 ticket 发给客户端;下次连接时跳过密钥交换。

快连客户端把这三个机制组合使用,在 Notion 这种"用户每天打开多次"的场景下,第二次打开基本是 0-RTT,TLS 握手耗时降到 < 30ms。

第三步:TTFB 与首屏 HTML 体积

TTFB(Time To First Byte)是衡量服务器响应速度的关键指标。Notion 的服务端 TTFB 本身只有 60ms(AWS us-west-2,CloudFront CDN),跨境后变成 180-240ms——这部分没法从客户端优化,只能靠走更短的物理链路

但首屏 HTML 的体积可以优化。我们发现 Notion 的首屏 HTML 在中国大陆访问时经常被注入一段 地区判断脚本(约 18KB),这段脚本在跨境后会变成同步阻塞,必须执行完才能进入 React 渲染。

我们的解法:HTML 边缘预处理

快连在边缘节点上做了一件"灰色但有效"的事:解析首屏 HTML,把地区判断脚本改成 async 异步加载。这不会改变页面逻辑,只是把 18KB 的同步阻塞变成异步加载,肉眼可感知的首屏时间缩短 600-800ms

合规说明

这一改动不修改页面内容、不收集用户数据、不绕过任何安全机制——只是把"同步"改为"异步",属于 HTTP 协议层的合理优化。如果你需要严格的合规审计,快连的企业版可以关闭此优化(默认开启)。

实测:8 秒 → 1.5 秒的拆解

下表是 2026 年 9 月 3 日上午 10:00(跨境链路非高峰期),优化前后的耗时对比。

环节裸连耗时快连耗时优化幅度
DNS 解析480 ms18 ms▼ 96%
TCP + TLS 握手560 ms32 ms▼ 94%
TTFB + 首屏 HTML340 ms120 ms▼ 65%
JS Chunk 加载2,800 ms620 ms▼ 78%
React 渲染 + 字体3,600 ms680 ms▼ 81%
WebSocket 建立620 ms30 ms▼ 95%
总计8,400 ms1,500 ms▼ 82%

8 秒变成 1.5 秒——节省的 6.9 秒不是带宽换来的,是把串行变并行换来的。这也是快连所有优化的核心思路。

下一步

如果你正在为 Notion / Figma / Linear 等海外 SaaS 的加载速度头疼,下载快连客户端直接体验。免费版每月 5GB 流量,日常使用足够。