所有分类
  • 所有分类
  • 站长推荐
  • WP主题
  • WP插件
  • WP教程
  • WP模板库
  • 前端模板
  • PHP源码
  • 延伸阅读

Elementor 致使网页加载缓慢的原因被我找到了!

Elementor 致使网页加载缓慢的原因被我找到了!插图-WP资源海
Elementor 致使网页加载缓慢的原因被我找到了!插图1-WP资源海

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,也会执行这个调用
  • 即使禁用了实验性功能和跟踪,仍然会调用(设计缺陷)
  • 如果网络延迟高或服务器响应慢,会严重影响页面加载速度

🎯 深度分析

根本原因(经过深度代码分析):

  1. App::get_init_settings() 无条件调用 Events_Manager::get_editor_events_config()
  2. get_editor_events_config() 中,get_remote_mixpanel_config() 在 $can_send_events 判断之后执行
  3. 即使禁用了实验性功能和跟踪,远程 API 仍然会被调用(设计缺陷
  4. 这个 API 返回的是远程功能标志(Feature Flags)配置,而不是用户数据收集
  5. 返回的数据包含: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();  // ← 无条件调用
    // ...
}

根本原因

  1. App::get_init_settings() 无条件调用 get_editor_events_config()(不检查实验性功能)
  2. get_remote_mixpanel_config() 在 $can_send_events 判断之后执行。

相关研究早已表明,网页每慢 0.1 秒都会产生真实的用户流失,而这类隐藏在初始化阶段的 0.5–1.4 秒阻塞,已经算是相当严重的问题了,而且是最容易被忽视、却最昂贵的那一类问题。我又仔细看了下,这个问题是 3.34.0 新出现的,该版本发布已有两周时间,目前,项目仓库中依然未修复该问题,看下个版本能否修复吧,不能话就去提交个报告。

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

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

请先
显示验证码
没有账号?注册  忘记密码?