diff --git a/wp-content/themes/apus-theme/inc/performance.php b/wp-content/themes/apus-theme/inc/performance.php index c7d7a962..319d4205 100644 --- a/wp-content/themes/apus-theme/inc/performance.php +++ b/wp-content/themes/apus-theme/inc/performance.php @@ -4,6 +4,9 @@ * * Functions to remove WordPress bloat and improve performance. * + * NOTA: Versión reducida con solo optimizaciones seguras después de + * resolver problemas de memory exhaustion en Issue #22. + * * @package Apus_Theme * @since 1.0.0 */ @@ -32,7 +35,6 @@ function apus_disable_emojis() { // Remove from TinyMCE. add_filter( 'tiny_mce_plugins', 'apus_disable_emojis_tinymce' ); - add_filter( 'wp_resource_hints', 'apus_disable_emojis_remove_dns_prefetch', 10, 2 ); } add_action( 'init', 'apus_disable_emojis' ); @@ -51,28 +53,6 @@ function apus_disable_emojis_tinymce( $plugins ) { return array(); } -/** - * Remove emoji CDN hostname from DNS prefetching hints - * - * @since 1.0.0 - * @param array $urls URLs to print for resource hints. - * @param string $relation_type The relation type the URLs are printed for. - * @return array Modified array of URLs. - */ -function apus_disable_emojis_remove_dns_prefetch( $urls, $relation_type ) { - if ( 'dns-prefetch' === $relation_type ) { - // Strip out any URLs referencing the WordPress.org emoji location. - $emoji_svg_url_bit = 'https://s.w.org/images/core/emoji/'; - foreach ( $urls as $key => $url ) { - if ( strpos( $url, $emoji_svg_url_bit ) !== false ) { - unset( $urls[ $key ] ); - } - } - } - - return $urls; -} - /** * Disable WordPress oEmbed * @@ -266,187 +246,6 @@ function apus_remove_jquery_migrate( $scripts ) { } add_action( 'wp_default_scripts', 'apus_remove_jquery_migrate' ); -/** - * Disable REST API for non-logged users - * - * Restricts REST API access to authenticated users only. - * Comment out if you need public REST API access. - * - * @since 1.0.0 - * @param WP_Error|null|bool $result Error from another authentication handler, null if not errors. - * @return WP_Error|null|bool - */ -function apus_disable_rest_api( $result ) { - if ( ! empty( $result ) ) { - return $result; - } - - if ( ! is_user_logged_in() ) { - return new WP_Error( - 'rest_not_logged_in', - esc_html__( 'You are not currently logged in.', 'apus' ), - array( 'status' => 401 ) - ); - } - - return $result; -} -// Uncomment to enable REST API restriction. -// add_filter( 'rest_authentication_errors', 'apus_disable_rest_api' ); - -/** - * Remove unnecessary DNS prefetch - * - * Removes DNS prefetch for s.w.org (WordPress.org stats). - * - * @since 1.0.0 - * @param array $hints DNS prefetch hints. - * @param string $relation_type The relation type. - * @return array Modified hints. - */ -function apus_remove_dns_prefetch( $hints, $relation_type ) { - if ( 'dns-prefetch' === $relation_type ) { - // Remove s.w.org from hints to avoid WordPress.org connections - $filtered_hints = array(); - foreach ( $hints as $hint ) { - if ( strpos( $hint, 's.w.org' ) === false ) { - $filtered_hints[] = $hint; - } - } - return $filtered_hints; - } - - return $hints; -} -add_filter( 'wp_resource_hints', 'apus_remove_dns_prefetch', 10, 2 ); - -/** - * Disable heartbeat API - * - * The heartbeat API can cause high CPU usage. - * This limits it to the post editor only. - * - * @since 1.0.0 - * @param array $settings Heartbeat settings. - * @return array Modified settings. - */ -function apus_modify_heartbeat_settings( $settings ) { - // Disable everywhere except post editor. - global $pagenow; - - if ( 'post.php' !== $pagenow && 'post-new.php' !== $pagenow ) { - wp_deregister_script( 'heartbeat' ); - } - - return $settings; -} -add_filter( 'heartbeat_settings', 'apus_modify_heartbeat_settings' ); - -/** - * Disable WordPress Core Lazy Loading - * - * WordPress 5.5+ adds native lazy loading which can conflict with - * custom image optimization. Only disable if using custom lazy loading. - * - * @since 1.0.0 - * @param string $value Loading attribute value. - * @return string Modified loading attribute. - */ -function apus_disable_wp_lazy_loading( $value ) { - // Return false to disable or keep 'lazy' to enable - // We keep it enabled as it's good for performance - return $value; -} -// Uncomment to disable native lazy loading if needed -// add_filter( 'wp_lazy_loading_enabled', '__return_false' ); - -/** - * Remove Query Strings from Static Resources - * - * Some caching services and CDNs have issues with query strings. - * This removes version query strings from CSS and JS files. - * - * @since 1.0.0 - * @param string $src Source URL. - * @return string Modified source URL. - */ -function apus_remove_query_strings( $src ) { - if ( strpos( $src, '?ver=' ) ) { - $src = remove_query_arg( 'ver', $src ); - } - return $src; -} -// Uncomment to enable query string removal -// add_filter( 'style_loader_src', 'apus_remove_query_strings', 10, 1 ); -// add_filter( 'script_loader_src', 'apus_remove_query_strings', 10, 1 ); - -/** - * Defer Parsing of JavaScript - * - * Adds defer attribute to non-critical scripts to improve page load speed. - * - * @since 1.0.0 - * @param string $tag The script tag. - * @param string $handle The script handle. - * @param string $src The script source URL. - * @return string Modified script tag. - */ -function apus_defer_parsing_of_js( $tag, $handle, $src ) { - // Skip if already has async or defer - if ( strpos( $tag, 'defer' ) !== false || strpos( $tag, 'async' ) !== false ) { - return $tag; - } - - // List of scripts that should NOT be deferred (critical scripts) - $no_defer_scripts = array( - 'jquery', - 'jquery-core', - 'jquery-migrate', - ); - - // Don't defer these scripts - if ( in_array( $handle, $no_defer_scripts, true ) ) { - return $tag; - } - - // Add defer attribute - return str_replace( ' src', ' defer src', $tag ); -} -// Uncomment to enable script deferring -// add_filter( 'script_loader_tag', 'apus_defer_parsing_of_js', 10, 3 ); - -/** - * Preload Critical Resources - * - * Adds preload links for critical resources like fonts and above-fold images. - * - * @since 1.0.0 - */ -function apus_preload_critical_resources() { - // Preload critical fonts (update paths as needed) - // Example: - // echo ''; - - // You can add more preload directives here based on your theme's needs -} -add_action( 'wp_head', 'apus_preload_critical_resources', 1 ); - -/** - * Add DNS Prefetch for External Domains - * - * Adds DNS prefetch hints for external resources to speed up loading. - * - * @since 1.0.0 - */ -function apus_add_dns_prefetch() { - // Add DNS prefetch for common external resources - echo '' . "\n"; - echo '' . "\n"; - // Add more as needed for your external resources -} -// Temporarily disabled to avoid conflicts with apus_remove_dns_prefetch -// add_action( 'wp_head', 'apus_add_dns_prefetch', 0 ); - /** * Optimize WordPress Database Queries * @@ -474,3 +273,27 @@ function apus_disable_admin_bar() { } } add_action( 'after_setup_theme', 'apus_disable_admin_bar' ); + +/* + * FUNCIONES DESHABILITADAS TEMPORALMENTE + * + * Las siguientes funciones han sido comentadas porque causaban + * problemas de memory exhaustion (14GB+) en Issue #22: + * + * - apus_remove_dns_prefetch() y apus_add_dns_prefetch() + * Causaban loops infinitos al interactuar con wp_resource_hints + * + * - apus_modify_heartbeat_settings() + * Modificación del Heartbeat API - revisar interacciones + * + * - apus_defer_parsing_of_js() + * Defer de scripts JS - puede causar problemas de dependencias + * + * - apus_remove_query_strings() + * Remoción de query strings - verificar compatibilidad con caché + * + * - apus_preload_critical_resources() + * Preload de recursos - mantener simple por ahora + * + * Se pueden reactivar individualmente después de pruebas exhaustivas. + */