WordPress Statnive 插件 · Parhum Khoshbakht

WordPress 分析插件性能:一次压力测试对比

我们在并发负载且无页面缓存下对 8 款 WordPress 分析插件做了压力测试。Statnive 拥有最低的 LCP 开销。这是方法论、数字以及诚实的局限说明。

每一款分析插件都有性能成本

给您的 WordPress 网站加一个分析插件,意味着给每一次页面加载都加上一些工作。一些插件会增加在浏览器中下载、解析并执行的 JavaScript。另一些会增加在您服务器上运行的 PHP。在带页面缓存的轻负载下,多数插件之间的差异看起来很小。在合成压力测试下 — 并发用户、无缓存、每个请求都打 PHP — 架构差异就显现出来。

我们在 8 款流行的 WordPress 分析插件上跑了那种压力测试。下面的结果显示了每个插件的架构如何处理并发负载的方向性差异。它们不是生产保证 — 我们会准确说明它们意味着什么和不意味着什么,包括末尾一段坦诚的方法论局限说明。如果您只记一件事:在我们单次压力测试中 Statnive 拥有最低的 LCP 开销,但任何这些插件在配置良好缓存的生产 WordPress 网站上的表现都会比这些数字暗示的好得多。

我们如何测试:合成负载下的真实浏览器

我们搭建了一个自动化测试框架,将每个分析插件隔离开来。流程:

  1. 通过 WordPress REST API 停用所有分析插件
  2. 在每次配置之前用相同的预热预热 OPcache 和 MySQL
  3. 一次激活一个插件
  4. 跑约 150 次真实 Chromium 浏览器页面加载,覆盖 4 种页面类型(首页、文章、产品、商店),同时 50 个并发 HTTP 用户给服务器加压
  5. 通过 PerformanceObserver 收集 Core Web Vitals(TTFB、FCP、LCP、CLS、INP)
  6. 对每个插件重复,然后测试 8 个插件全部启用的组合

基线测量在零分析插件激活时进行。每个插件的开销以相对该基线的差值衡量。

测试环境: Local by Flywheel(macOS)上的 WordPress 6.9.4,PHP 8.2,带 20 个示例产品的 WooCommerce,k6 v1.6.1 加 Chromium 浏览器模块,每个配置 10 个浏览器 VU + 50 个协议 VU。没有安装任何页面缓存插件 — 每个请求都跑完整的 WordPress PHP 路径。这不是生产 WordPress 网站通常的运行方式。多数生产网站使用 W3TC、WP Rocket,或绕过缓存页面 PHP 的 CDN。

压力测试结果:8 款插件在并发负载下

下表显示在我们单次压力测试中每个插件相对基线增加的开销。所有数值都是毫秒差值 — 每个插件相对无分析基线为 Time to First Byte、First Contentful Paint 和 Largest Contentful Paint 各自增加了多少。Impact 列是一个综合得分(0 = 无影响,100 = 最大)。越低越好。

排名插件LCP ΔTTFB ΔFCP ΔImpact
1Statnive+260ms+290ms+256ms6.7
2Independent Analytics+566ms+568ms+574ms14.2
3Jetpack Stats+776ms+785ms+784ms19.5
4MonsterInsights (GA4)+964ms+963ms+964ms24.1
5WP Slimstat+1030ms+1005ms+1010ms25.4
6WP Statistics+1424ms+1446ms+1432ms35.9
7Koko Analytics+2278ms+2229ms+2238ms56.3
8Burst Statistics+3592ms+3572ms+3576ms89.6
全部 8 款合用+4002ms+3924ms+4010ms99.5
基线(无分析,负载下)3038ms2927ms3030ms

在我们的压力测试中,Statnive 拥有最低的 LCP 开销。对具体倍数请抱有谨慎态度 — 单台机器上无缓存的单次运行可能会被顺序效应、离群请求以及插件特定怪异(如 WP-Cron 批处理)影响。Koko Analytics 和 Burst Statistics 的数值尤其大,我们怀疑这反映的是在我们合成负载下特定的服务器端写入串行化问题,而不是稳态开销。请先在自己的网站上调研它们的行为,再下结论。

逐插件分析

Statnive(在我们测试中排名 #1:+260ms LCP)

Statnive 的两阶段加载架构旨在保持关键渲染路径畅通。一个 1.1KB 的内联核心 tracker 在任何外部资源加载之前通过 navigator.sendBeacon() 触发页面浏览。完整约 4KB 的 tracker 通过 WordPress 6.3+ 的 strategy: 'async' 参数异步加载,并在不阻塞渲染的情况下处理互动追踪、事件和同意管理。服务器端处理是每位访客一次轻量级 REST 端点写入。

最适合: 任何关心性能与隐私的 WordPress 网站。自托管数据、零 Cookie、不需要同意横幅。

Independent Analytics(在我们测试中排名 #2:+566ms LCP)

Independent Analytics 使用服务器端 PHP 钩子,而不是客户端 JavaScript。这种方式完全消除了 JS 解析时间,对解析成本比桌面高 2–5 倍的移动端有帮助。代价是每请求更多的 PHP 工作,这就是它在我们合成负载测试中位于 Statnive 之后的原因。

最适合: JavaScript 执行是顾虑的网站(重广告配置、许多第三方脚本)。

Jetpack Stats(在我们测试中排名 #3:+776ms LCP)

Jetpack 把追踪数据发送到 WordPress.com 的远程服务器。这种架构选择把分析处理移出您的服务器,但 tracker 仍会增加显著的本地开销 — Jetpack 模块在统计代码旁会加载相当多的 JavaScript。

最适合: 已经在使用 Jetpack 生态、可以接受将访客数据发往 WordPress.com 的网站。

MonsterInsights / Google Analytics(排名 #4:+964ms LCP)

MonsterInsights 把 WordPress 连接到 Google Analytics 4。GA4 标签(压缩后 134KB)增加显著的前端重量。实际分析处理发生在 Google 的云中,但仅加载 gtag.js 就比多数自托管 tracker 的负担更大。

最适合: 必须使用 Google Analytics 并接受性能取舍的网站。

WP Slimstat(排名 #5:+1030ms LCP)

Slimstat 提供包括实时视图在内的详细访客追踪。JS tracker 加上基于 REST 的传输和大量每请求 PHP 处理,在负载下增加了大约 1 秒的 LCP 开销。

最适合: 比起原始页面速度更优先详尽逐访客追踪的网站。

WP Statistics(排名 #6:+1424ms LCP)

WP Statistics 完全自托管,功能集成熟。它的 tracker 使用 admin-ajax 来传输数据,比 REST 端点或 Beacon API 调用更重。在并发负载下,admin-ajax 成为瓶颈,因为每次上报都要走完整的 WordPress 后台启动流程。

最适合: 需要全面自托管分析、并能接受显著性能开销的网站。

Koko Analytics(在我们测试中排名 #7:+2278ms LCP)

Koko Analytics 有一份惊人小的 468 字节内联 tracker — 在架构上是最轻的自托管选项之一。但在我们的压力测试中,它以非常大的 LCP 差值排名第 7。我们怀疑这反映的是我们特定合成负载下的服务器端写入竞争而不是稳态开销:Koko 在每次页面浏览时都写数据库,没有任何缓存层时 50 个并发写入者会造成病态竞争,这是真实带页面缓存的生产网站永远不会经历的。这一数字很可能是测试产物 — 我们建议您在自己网站上评估 Koko 后再下结论。

最适合: 低流量网站,以及任何看重架构极简的人。

Burst Statistics(在我们测试中排名 #8:+3592ms LCP)

Burst 用 async 属性加载它的 tracker,并用 Beacon API 传输数据 — 都是好选择。压力测试中非常大的 LCP 差值很可能反映了并发负载下的 Beacon API 端点写入串行化,或者可能是 WP-Cron 批处理在测试窗口期内启动。与 Koko 类似,我们怀疑这一数字被我们的特定测试条件夸大了,并不代表真实世界的开销。请做您自己的测试。

最适合: 想要带成熟功能集的隐私优先分析选项的网站。

试试 Statnive:快速、私密、自托管的分析

Statnive 让您兼得轻量级 tracker 的性能与完整分析套件的功能。所有数据都留在您的服务器上。没有 Cookie,不需要同意横幅。从 WordPress.org 免费安装

详细对比:对您的网站什么重要

按服务器响应速度(TTFB 开销)

Time to First Byte 测量您的服务器多快做出响应。差值越低意味着您的主机资源越没被分析处理消耗。

插件TTFB Δ服务器影响
Statnive+290ms极小
Independent Analytics+568ms低(服务器端追踪)
Jetpack Stats+785ms中等(本地 JS + 远程处理)
MonsterInsights+963ms中等(加载 gtag.js)
WP Slimstat+1005ms较高
WP Statistics+1446ms较高(admin-ajax)
Koko Analytics+2229ms负载下较高(每次上报 DB 写入)
Burst Statistics+3572ms负载下最差(写入背压)

按前端绘制速度(LCP 开销)

Largest Contentful Paint 测量您主要内容何时变得可见。这是 Google 在 Core Web Vitals 排名中最重视的指标。

插件LCP Δ渲染影响
Statnive+260ms极低(内联核心 + 异步完整)
Independent Analytics+566ms低(无客户端 JS)
Jetpack Stats+776ms中等
MonsterInsights+964ms较高(134KB gtag.js)
WP Slimstat+1030ms较高
WP Statistics+1424ms较高(admin-ajax 阻塞)
Koko Analytics+2278ms负载下高
Burst Statistics+3592ms负载下最差

按隐私模型

插件数据位置Cookie是否需要同意
Statnive您的服务器不需要
Koko Analytics您的服务器可选不需要
WP Statistics您的服务器不需要
Burst Statistics您的服务器可选视情况
Independent Analytics您的服务器不需要
WP Slimstat您的服务器会话视情况
Jetpack StatsWordPress.com需要
MonsterInsightsGoogle 服务器需要

哪一款插件最适合您的网站?

隐私优先网站的最佳选择

Statnive。完全自托管、零 Cookie、不需要同意横幅,并且在我们基准测试中以很大优势是最快的插件。它比极简 tracker 提供更多功能(互动追踪、自定义事件、WooCommerce 收入),同时在架构上保持轻量。

高流量 WordPress 网站的最佳选择

Statnive。在 50 个并发用户下 260ms 的 LCP 开销是我们测得的最低值 — 比次优插件少 2.2 倍。它的内联核心 tracker 在任何服务器端工作开始之前就触发页面浏览,REST 端点也是为并发写入规模而设计的。

新手最佳选择

Statnive。激活即可工作,无需任何配置,包含实时仪表盘和来源归因,且不会拖慢您的网站。

WooCommerce 商店最佳选择

Statnive(Professional 层)追踪每访客收益、产品浏览和购物车事件。MonsterInsights 也支持 WooCommerce,但要求 Google Analytics,并且性能开销大约高 3.7 倍。

方法论局限(请阅读)

一份基准的可信度只与其方法论一样高。下面是这次测试不控制内容的诚实清单:

单次运行、单台机器。 我们通过 Local by Flywheel 在一台 MacBook 上跑了重负载测试一次。规范的基准会以随机顺序跑 3–5 次,并报告中位数加四分位距。第二次运行可能会改变排名。

没有页面缓存。 每个请求都打到完整的 WordPress PHP 路径。多数生产 WordPress 网站使用 W3TC、WP Rocket 或绕过缓存页面 PHP 的 CDN。启用缓存后,多数插件之间的差距会大幅缩小,因为分析写入只在缓存未命中或通过异步 JavaScript 时发生。

没有对象缓存。 没有 Redis,没有 Memcached。一个带对象缓存的生产网站具有非常不同的数据库竞争特征。

合成负载模式。 50 个并发 HTTP VU 是粗糙的。真实流量有到达峰值、会话方差,并且大多是缓存页面。我们的负载更像 DDoS 而不是周一早晨。

未控制的顺序效应。 插件按固定顺序测试。服务器状态(MySQL 连接池、PHP 内存、OPcache)在约 50 分钟运行中漂移,可能惩罚后面的配置。

样本数有差异。 快插件每个配置约获得 156 个样本;慢插件由于迭代超时少到只有 117 个。样本越少 = 方差越大 = 中位数越不可信。

离群嫌疑者。 Koko Analytics(+2278ms)和 Burst Statistics(+3592ms)的结果非常大。我们没有独立验证它们不是由 WP-Cron 批处理、并发负载下的特定插件 bug 或卡住的数据库写入造成。把它们当作「在我们测试中这个插件出了点不好的事情」,而不是「这就是您在自己网站上会经历的情况」。

自我测试偏差。 我们搭了框架,我们也写了 Statnive。即使本意良好,偏差也可能潜入页面选择、指标选择和测试结构。独立验证比我们发布的任何东西都更可信。 框架是开源的 — 请您自己跑一遍。

测试确实显示了什么

尽管有局限,测试确实有意义地揭示了架构模式

  • 把 JavaScript 或服务器工作放进关键渲染路径的插件,在任何负载下都会增加可测量的 LCP 开销
  • 每请求做数据库写入的插件,在这些写入无法被缓存时会急剧退化
  • 内联核心 + 异步 tracker 架构(Statnive、Koko 的极简内联、Burst 的异步加载)保持关键路径畅通
  • 远程处理插件(Jetpack、MonsterInsights)即使处理在站外,仍会增加本地 JavaScript 重量

这些模式与 Google、WordPress Core 和 web.dev 的已发表研究一致。我们测试中的具体数字应被视为一个数据点,而不是权威排名。

常见问题

我的分析插件真的会影响 SEO 吗?

原则上是的。Google 把 Core Web Vitals(包括 LCP)作为排名信号。一个增加显著 JavaScript 解析时间或阻塞渲染的插件可以把您的页面从「good」推到「needs improvement」。在实践中,如果您配置了页面缓存,这种影响大部分会消失,因为缓存页面根本不会运行插件的 PHP 代码。

我可以同时运行多款分析插件吗?

技术上可以,但累积起来。每多一款插件都会增加要解析的 JavaScript 和每请求的服务器端工作。我们「全部插件合用」的测试显示了非常高的开销,符合预期。如果您需要多个数据源,请合并到一款设计良好的自托管插件,并在可能的情况下从服务器端集成其他工具。

我应该多频繁地基准测试我网站的性能?

在任何插件更新、主题变更或 WordPress 核心升级之后。使用 Google PageSpeed Insights 获取真实数据、使用 Chrome DevTools 做按脚本剖析,并使用类似我们的合成基准做对比测试。

自托管分析真的比 Google Analytics 快吗?

在我们的合成测试中,是的。134KB 的 gtag.js 库无论如何都是一份显著的解析成本。自托管 tracker 可以小得多(Statnive 约 5KB,Koko 在 1KB 以下)。在真实带缓存的生产网站上,差异仍存在但绝对值更小。

Statnive 具体的性能成本是多少?

在我们的压力测试中,Statnive 拥有最低的 LCP 开销,相对基线为 +260ms。在装了页面缓存的真实生产网站上,大部分这种开销会消失,因为缓存页面根本不会执行 Statnive 的 PHP 代码 — 您剩下的只是异步加载的约 5KB 客户端 JavaScript。

我应该相信这些具体数字吗?

作为方向性指标,是。作为对您网站性能的精确预测,否。 数字来自一次没有缓存的合成运行。您带缓存的生产网站、在您具体的主机上,会产生不同的绝对数字。可推广的是架构模式(内联核心 vs 阻塞 JS、异步 vs 同步、同源 vs 远程)— 具体的毫秒数不会。

方法论与可复现性

所有测试均使用我们开源的 perf-impact 测试框架运行。测试脚本(perf-impact-runner.sh)自动化插件切换、缓存预热、预热以及 k6 浏览器测试。结果以 JSON 保存以便历史对比。

要在您自己的 WordPress 安装上重现这些结果:

cd statnive
./tests/perf/run.sh perf-impact heavy

原始数据文件位于 tests/perf/results/perf-impact/

要深入分析单个竞品,请查看我们的对比页:Statnive vs Google AnalyticsStatnive vs MonsterInsightsStatnive vs Jetpack StatsStatnive vs WP Statistics 以及 Statnive vs Plausible。阅读我们优化背后的工程故事或探索全部 Statnive 功能

免费获取 Statnive