侧边栏壁纸

WordPress访问太慢和卡怎么利用代码进行优化加速呢?

  • 小妖精资源 2024年06月17日 234阅读 0评论
  • 介绍:通过代码优化来加速 WordPress 是一种非常有效的方式。前端优化包括延迟加载资源和移动非关键 CSS;后台优化可以限制心跳 API 和禁用未使用的 REST API 端点;数据库优化涉及清理冗余数据和优化查询;总体性能优化则包括禁用不必要的功能和调整心跳频率。另外,延迟加载 WooCommerce 和第三方脚本也是提升网站性能的有效措施。这些优化技巧有助于改善用户体验、减少服务器负担,提高网站加载速度和响应性能。

    通过代码优化来加速 WordPress 是一种非常有效的方式,可以帮助减轻对插件的依赖,并实现更深层次的性能提升。以下是一些关键的代码优化措施,涵盖前端、后台、数据库和整体性能的各个方面。

    前端优化

    1.1 延迟加载资源
    延迟加载脚本和样式:通过将脚本和样式延迟加载,减少初始页面加载时间。

    // functions.php
    function defer_parsing_of_js($url) {
        if (is_user_logged_in()) return $url; // 不延迟登录用户的脚本加载
        if (false === strpos($url, '.js')) return $url; // 只延迟 JS 文件
        return str_replace(' src', ' defer="defer" src', $url);
    }
    add_filter('script_loader_tag', 'defer_parsing_of_js', 10);

    异步加载 JavaScript:

    // functions.php
    function add_async_attribute($tag, $handle) {
        if (is_admin()) return $tag; // 不影响管理员区域
        return str_replace('<script ', '<script async ', $tag);
    }
    add_filter('script_loader_tag', 'add_async_attribute', 10, 2);

    1.2 移动非关键 CSS
    将非关键 CSS 移动到页面底部,减少初始渲染时间。

    // functions.php
    function move_non_critical_css() {
        // 把所有非关键 CSS 文件在底部加载
        if (!is_admin()) {
            remove_action('wp_enqueue_scripts', 'wp_enqueue_styles');
            add_action('wp_footer', 'wp_enqueue_styles');
        }
    }
    add_action('wp_enqueue_scripts', 'move_non_critical_css', 1);

    2. 后台优化

    2.1 限制心跳 API
    WordPress 的心跳 API 控制后台自动保存和其他 AJAX 操作,可以通过减少心跳频率降低服务器压力。

    // functions.php
    function modify_heartbeat_settings($settings) {
        $settings['interval'] = 60; // 每 60 秒触发一次心跳
        return $settings;
    }
    add_filter('heartbeat_settings', 'modify_heartbeat_settings');

    2.2 禁用未使用的 REST API 端点
    禁用未使用的 REST API 端点减少不必要的后台负载。

    // functions.php
    function disable_unused_rest_endpoints($endpoints) {
        if (is_user_logged_in()) return $endpoints; // 保留登录用户的端点
        unset($endpoints['/wp/v2/users']);
        unset($endpoints['/wp/v2/comments']);
        // 添加更多需要禁用的端点
        return $endpoints;
    }
    add_filter('rest_endpoints', 'disable_unused_rest_endpoints');

    3. 数据库优化

    3.1 优化数据库查询
    减少 WordPress 中的无效或冗余查询。例如,移除不必要的自动草稿。

    // functions.php
    function clean_up_database() {
        global $wpdb;
        $wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'revision'");
        $wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'auto-draft'");
    }
    add_action('wp_scheduled_cleanup', 'clean_up_database');

    3.2 使用 WP_Query 高效查询
    使用 WP_Query 优化复杂查询,以减少数据库负载。

    // example.php
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => 10,
        'meta_query' => array(
            array(
                'key' => 'meta_key',
                'value' => 'meta_value',
                'compare' => 'LIKE'
            )
        )
    );
    $query = new WP_Query($args);

    4. 总体性能优化

    4.1 禁用不必要的功能
    禁用 WordPress 的默认功能(如 Embeds、Emoji),减少前端和后台的开销。

    // functions.php
    // 禁用 Embeds
    function disable_embeds_code_init() {
        remove_action('rest_api_init', 'wp_oembed_register_route');
        add_filter('embed_oembed_discover', '__return_false');
        remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
        remove_action('wp_head', 'wp_oembed_add_discovery_links');
        remove_action('wp_head', 'wp_oembed_add_host_js');
    }
    add_action('init', 'disable_embeds_code_init', 9999);
    
    // 禁用 Emoji
    remove_action('wp_head', 'print_emoji_detection_script', 7);
    remove_action('wp_print_styles', 'print_emoji_styles');

    4.2 调整 WordPress 心跳频率
    减少心跳频率可减轻服务器负担,特别是在大量并发用户情况下。

    // functions.php
    add_filter('heartbeat_settings', function($settings) {
        $settings['interval'] = 60; // 每 60 秒心跳一次
        return $settings;
    });

    4.3 使用对象缓存
    对象缓存可以减少数据库查询次数,特别适用于大型和高流量网站。

    // functions.php
    function cache_query_results($posts) {
        if (is_admin()) return $posts; // 不缓存后台查询
        $cache_key = 'my_custom_cache_key';
        $cache_group = 'my_cache_group';
        $cached_posts = wp_cache_get($cache_key, $cache_group);
    
        if ($cached_posts === false) {
            $cached_posts = $posts; // 获取查询结果
            wp_cache_set($cache_key, $cached_posts, $cache_group, 3600); // 缓存查询结果一小时
        }
    
        return $cached_posts;
    }
    add_filter('posts_results', 'cache_query_results', 10, 2);

    4.4 优化分页
    如果网站使用分页,确保分页查询是高效的。

    // functions.php
    function custom_pagination($query) {
        if ($query->is_main_query() && !is_admin()) {
            $query->set('no_found_rows', true); // 禁用总行数查询
            $query->set('update_post_meta_cache', false); // 禁用元数据缓存
            $query->set('update_post_term_cache', false); // 禁用分类缓存
        }
    }
    add_action('pre_get_posts', 'custom_pagination');

    5. 其他优化措施

    5.1 延迟加载 WooCommerce 脚本
    如果使用 WooCommerce,可以通过仅在需要时加载脚本来减少负载。

    // functions.php
    function conditional_woocommerce_assets() {
        if (!is_woocommerce() && !is_cart() && !is_checkout()) {
            wp_dequeue_script('wc-cart');
            wp_dequeue_style('woocommerce-general');
            // 添加更多 WooCommerce 资源
        }
    }
    add_action('wp_enqueue_scripts', 'conditional_woocommerce_assets', 99);

    5.2 延迟加载第三方脚本
    仅在特定页面或条件下加载第三方脚本。

    // functions.php
    function conditionally_load_third_party_scripts() {
        if (is_page('contact')) {
            // 仅在联系页面加载 Google Maps 脚本
            wp_enqueue_script('google-maps', 'https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY', null, null, true);
        }
    }
    add_action('wp_enqueue_scripts', 'conditionally_load_third_party_scripts');

    总结

    通过上述代码优化措施,你可以显著改善 WordPress 网站的加载速度和响应性能:

    前端优化:延迟加载资源和移动非关键 CSS。
    后台优化:限制心跳 API 和禁用未使用的 REST API 端点。
    数据库优化:清理冗余数据和优化查询。
    总体性能优化:禁用不必要的功能和调整心跳频率。
    其他措施:延迟加载 WooCommerce 和第三方脚本。
    这些代码优化技巧有助于减少服务器负担,提高用户体验,并使网站更快、更响应。根据实际需求和网站架构,选择适合的优化方法并定期监控和调整,以维持最佳性能。

    0

    —— 评论区 ——

    昵称
    邮箱
    网址
    取消
    博主栏壁纸
    1,101 文章数
    11 标签数
    2,452 评论量
    舔狗日记