一个在你办公室里一秒就能打开的网站,对地球另一端的访客来说可能要四秒。距离、响应请求的 CDN 边缘节点、本地 DNS 以及特定地区的脚本,都会改变各个市场的实际体验,而在自己工位上跑一次测速,这些都看不出来。如果你在多个国家销售产品或争取排名,那么从这些国家进行测试就是 SEO 监控的一部分,而不是可有可无的附加项。
本指南介绍如何从不同地点测试网站速度:哪些工具分别测量什么,为什么仅靠 PageSpeed Insights 不够,如何确认 CDN 在每个市场的表现一致,以及一套每周都能重复执行的简单流程。
为什么速度因国家而异
同一个 URL 在不同地方并不是同一个页面。不同市场之间主要有五个变量:
- 距离。 访客与服务器之间的每一次往返都要耗费时间,而一个页面需要多次往返(DNS、TCP、TLS,然后才是请求本身)。距离越远,每次往返付出的代价越高。
- CDN 边缘节点。 如果 CDN 在访客所在地区设有节点,就会由离访客最近的节点响应。一个由两个国家之外的节点服务的市场,与拥有本地节点的市场表现截然不同。
- 缓存状态。 每个边缘节点都有独立的缓存。你的主要市场能让页面保持热缓存;较小的市场则可能出现缓存未命中,只能等待源站响应。
- DNS 路由。 地理 DNS 可能把某个国家的流量引向不同的源站,甚至完全不同的 CDN。
- 特定地区的内容。 欧洲的 Cookie 同意横幅、本地支付组件、翻译后的页面以及特定国家的第三方标签,都会增加你本国版本从未加载过的页面负担。
Google 的 Core Web Vitals 基于真实访问进行测量,因此即使你自己的测试结果完美,速度慢的市场也会拉低你的真实用户数据。
实验室数据与真实用户数据
速度数据分为两类,两者缺一不可。
真实用户数据来自真实的 Chrome 用户。PageSpeed Insights 和 Search Console 会展示来自 Chrome 用户体验报告(CrUX)的数据,但只是针对你的页面或源站的一个全球汇总数值。CrUX 确实在其公开的 BigQuery 数据集中发布了国家级数据,这是回答“我们在巴西有多快?”最真实的依据。该数据按月更新,而且需要来自该国家的流量足够多才会出现。
实验室数据是按需运行的受控测试。PageSpeed Insights 中的 Lighthouse 测试是从 Google 数据中心运行的,而不是从你的访客所在国家,因此它的实验室评分无法反映某个特定市场的体验。用它来发现页面本身的问题,而不是用来比较不同地区。
如果要按地点进行实验室测试,请使用在多个地点部署了真实测试节点的工具,例如 WebPageTest,你可以为每次测试选择地点、浏览器和网络速度。商业化的合成监控服务也能按计划完成同样的工作。
测试每个国家实际收到的内容
测速工具能告诉你页面加载花了多长时间,却不一定能告诉你为什么某个国家更慢。要弄清原因,你需要看到该国家访客实际收到的响应:哪个边缘节点作出响应、是否命中缓存、是否多了一次重定向,以及页面有多大。
通过目标国家的住宅代理发送请求,就能看到这些信息,因为请求来自该市场的家庭网络连接,与真实访客完全相同。CDN 和地理 DNS 会像对待你的客户一样对它进行路由。
用 curl 做一次简单检查,就能输出耗时明细和关键响应头:
curl -s -o /dev/null -D - \
-x http://customer-USERNAME-country-de:PASSWORD@p.shifter.io:443 \
-w "dns:%{time_namelookup} connect:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} total:%{time_total} size:%{size_download}\n" \
https://www.example.com/
把 country-de 换成你关注的每个市场,例如 country-br 或 country-jp,然后进行比较。重点查看:
- 缓存状态响应头,例如
cf-cache-status、x-cache或x-vercel-cache。如果主要市场显示HIT,其他地区显示MISS,说明那些边缘节点提供的是冷缓存页面。 - 边缘节点标识。 Cloudflare 的
cf-ray以响应数据中心的机场代码结尾;CloudFront 会返回x-amz-cf-pop;Fastly 会返回x-served-by。如果德国访客的请求由另一个大洲的节点响应,你就找到问题所在了。 Age,显示缓存副本在该边缘节点上已存放多久。- 重定向和页面大小。 针对特定国家的重定向或更重的本地化页面,会表现为额外的跳转和更多的字节数。
需要注意一点:经过代理的请求还要穿过代理网络,因此其绝对耗时会高于本地访客。代理测试适合用来横向比较各个国家、查看实际下发的内容,绝对加载时间则应以 WebPageTest 或真实用户数据为准。如果只是想快速直观地从另一个国家查看页面,无需任何配置,使用免费网页代理就足够了。
测试 CDN 性能和边缘缓存
大多数地区性的速度问题,最终都是 CDN 问题,而不是服务器问题。请针对每个市场进行以下检查:
边缘节点覆盖。 确认每个国家由哪个边缘节点响应。服务商会公布其节点列表,但唯一可靠的证据是从该国家内部发出的请求所返回的边缘节点响应头,例如从德国或日本发出的请求。
按地区的缓存命中率。 从每个国家对同一 URL 请求两到三次。第一次请求可能未命中,第二次应该命中。如果一直未命中,说明该响应在那里很可能无法被缓存。
缓存键碎片化。 基于 Cookie 或用户代理的 Vary 响应头,或者首次访问时设置的地理 Cookie,都可能把一个页面拆分成许多缓存条目。这样一来,小市场几乎永远命中不了热缓存。
清除缓存后的传播。 部署或清除缓存后,从多个国家检查新版本是否已在所有地方生效,而不只是在离你最近的边缘节点。
源站屏蔽(Origin Shield)。 如果在遥远市场中缓存未命中的请求很慢,源站屏蔽或区域分层缓存可以让边缘节点从附近的缓存获取内容,而不必回源。
一套可重复的流程
- 选定你的市场,依据 Search Console 和分析数据:带来流量或收入的国家,加上你正在努力拓展的国家。
- 每月查看一次各国家的真实用户数据,数据来自 CrUX BigQuery 数据集。
- 运行实验室测试,在 WebPageTest 中从每个市场测试你的关键页面模板,每次使用相同的浏览器和网络条件。
- 检查实际下发的内容,按国家通过代理发送请求:边缘节点、缓存状态、重定向和页面大小。
- 修复并重新测试数据或响应头异常的市场。
同样的按国家检查方法也适用于排名和内容。我们关于地理网格排名跟踪和大规模本地化质量检查的指南介绍了这些检查。
常见问题
如何从另一个国家测试我的网站速度?
如果要测量加载时间,请使用在该国家设有测试节点的实验室工具,例如 WebPageTest。如果要查看该国家实际收到的内容(CDN 边缘节点、缓存状态、重定向),请通过位于该国家的住宅代理发送请求。
PageSpeed Insights 会从我的访客所在地进行测试吗?
不会。它的实验室测试从 Google 数据中心运行,真实用户数据也只是一个全球汇总数值。国家级的真实用户数据可以在 CrUX BigQuery 数据集中获取。
为什么我的网站在某些国家更慢?
通常是因为附近没有 CDN 边缘节点、边缘节点处于冷缓存状态、地理 DNS 将该国家路由到遥远的源站,或者本地化页面加载了额外的脚本。
应该多久按国家测试一次速度?
每周对关键页面模板进行一次合成检查,每月查看一次真实用户数据,并在每次重大部署或 CDN 变更后额外检查一次。
总结
速度是本地化的。用真实用户数据了解每个国家的真实情况,用多地点实验室工具获取可比较的加载时间,再通过从目标国家内部发出的请求查看由哪个边缘节点响应、是否提供热缓存。大多数地区性的速度问题都归结于 CDN,只要你能从访客所在的地方看到问题,修复起来就很容易。