

Elementor Mixpanel HTTP API 远程请求调用,导致网页加载出现 0.5-1.4 秒的卡顿。本文进行了详细的代码分析,并给出了经过测试确认有效果的代码。
问题背景
最近在努力优化网站性能,一直在找网页加载慢的原因,终于还是被我找到了。
即使在没有任何 Elementor 内容,也没有使用 Elementor 小工具的文章详情页上,禁用 Elementor 插件后也能让页面加载速度提升 0.8 秒左右(发文截图时这个请求时间出现了浮动,最低0.5s,最高就是截图里的1.4s)!本来我都想彻底放弃使用 Elementor 了,但转念一想这实在是不合理,于是通过 Query Monitor 成功把问题锁定到了一个 HTTP API 调用上面。下面是分析过程和解决办法。
⚠️ 初步分析
问题:Elementor 在每次页面加载时都会调用远程 Mixpanel API:
- API 地址:
https://assets.elementor.com/mixpanel/v1/mixpanel.json - 调用位置:
Elementor\C\C\M\E\Module::get_remote_mixpanel_config() - 耗时:0.88 秒(阻塞式调用)
- 影响:这是导致页面加载慢的主要原因之一
原因:
- 这个调用是同步阻塞的,会等待远程服务器响应
- 即使页面不使用 Elementor,也会执行这个调用
- 即使禁用了实验性功能和跟踪,仍然会调用(设计缺陷)
- 如果网络延迟高或服务器响应慢,会严重影响页面加载速度
🎯 深度分析
根本原因(经过深度代码分析):
App::get_init_settings()无条件调用Events_Manager::get_editor_events_config()get_editor_events_config()中,get_remote_mixpanel_config()在$can_send_events判断之后执行- 即使禁用了实验性功能和跟踪,远程 API 仍然会被调用(设计缺陷)
- 这个 API 返回的是远程功能标志(Feature Flags)配置,而不是用户数据收集
- 返回的数据包含:
sessionReplays(会话回放功能开关)和flags(功能标志开关)
解决方案:
- ✅ 使用
pre_http_request过滤器拦截(已验证有效) - ❌ 禁用实验性功能无效(静态方法仍然会被调用)
- ❌ 禁用跟踪无效(远程 API 调用在判断之后)
代码:
add_filter('pre_http_request', function($preempt, $parsed_args, $url) {
if (is_string($url) && strpos(strtolower($url), 'assets.elementor.com/mixpanel') !== false) {
return array(
'headers' => array(),
'body' => json_encode(array('mixpanel' => array())),
'response' => array('code' => 200, 'message' => 'OK'),
'cookies' => array(),
'filename' => null
);
}
return $preempt;
}, 9999, 3);
效果:
- ✅ 立即减少约 0.88 秒的页面加载时间
- ✅ 完全消除阻塞式远程 API 调用
- ✅ 不影响 Elementor 的正常功能
🔍 深度代码分析
调用链分析
基于 Elementor 源代码的完整调用链:
wp_enqueue_scripts (WordPress 钩子)
↓
App::register_scripts() (core/common/app.php:41)
↓
App::print_config() (core/base/app.php:31)
↓
App::get_init_settings() (core/common/app.php:274) ⚠️ 无条件调用
↓
Events_Manager::get_editor_events_config() (module.php:26) ⚠️ 无条件调用
↓
Events_Manager::get_remote_mixpanel_config() (module.php:88) ⚠️ 无条件调用
↓
wp_remote_get('https://assets.elementor.com/mixpanel/v1/mixpanel.json') ⚠️ 阻塞调用(0.88秒)
关键代码问题
文件:wp-content/plugins/elementor/core/common/modules/events-manager/module.php
问题代码(第 26-32 行):
public static function get_editor_events_config() {
// 第 27-30 行:检查是否可以发送事件
$can_send_events = ! empty( ELEMENTOR_EDITOR_EVENTS_MIXPANEL_TOKEN ) &&
Tracker::is_allow_track() &&
! Tracker::has_terms_changed( '2025-07-07' ) &&
Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME );
// 第 32 行:⚠️ 即使 $can_send_events 为 false,仍然会调用远程 API
$mixpanel_config = self::get_remote_mixpanel_config(); // ← 无条件调用
// ...
}
根本原因:
App::get_init_settings()无条件调用get_editor_events_config()(不检查实验性功能)get_remote_mixpanel_config()在$can_send_events判断之后执行。
相关研究早已表明,网页每慢 0.1 秒都会产生真实的用户流失,而这类隐藏在初始化阶段的 0.5–1.4 秒阻塞,已经算是相当严重的问题了,而且是最容易被忽视、却最昂贵的那一类问题。我又仔细看了下,这个问题是 3.34.0 新出现的,该版本发布已有两周时间,目前,项目仓库中依然未修复该问题,看下个版本能否修复吧,不能话就去提交个报告。

声明:1、本站大部分资源均为网络采集所得,仅供用来学习研究,请于下载后的24h内自行删除,正式商用请购买正版。2、所有汉化类文件和个别标注了“原创”的产品均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。3、如若本站内容侵犯了原著者的合法权益,请携带相关版权文件联系我们进行下架或删除。4、虚拟下载类资源具有可复制性,一经下载后本站有权拒绝退款或更换其他商品!

评论0 注意:评论区不审核也不处理售后问题!如有售后问题请前往用户中心提交工单以详细说明!