Support » Plugin: Speed Up - JavaScript To Footer » Duplicate file load due to preload

  • Hi,

    I noticed an issue with the preload feature.

    GTMetrix reports the error:

    Serve resources from a consistent URL
    
    The following resources have identical contents, but are served from different URLs. Serve these resources from a consistent URL to save 1 request(s) and 6.9KiB.
    
    https://cdn.sovereignman.com/wp-content/plugins/lazy-loading-responsive-images/js/lazysizes.min.js
    https://cdn.sovereignman.com/wp-content/plugins/lazy-loading-responsive-images/js/lazysizes.min.js?ver=5.2.4
    

    The issue is that when loading scripts WP adds the version of the plugin, but your plugin doesn’t add the versiomn to the preload tag.

    So the browser ends up downloading two versions of all scripts.

    I tried solving it with this code:

    
        public function preload_scripts(){
        	$wp_scripts = wp_scripts();
        	
        	foreach( $wp_scripts->queue as $handle ){
    			if( !empty($wp_scripts->registered[$handle]->src) ){
    				
    				if( isset($wp_scripts->registered[$handle]->extra['conditional']) ){
    					echo '<!--[if '.$wp_scripts->registered[$handle]->extra['conditional'].'>'."\r\n";
    				}
    
                    $obj = $wp_scripts->registered[ $handle ];
                    $src = $obj->src;
    
                    if ( null === $obj->ver ) {
                        $ver = '';
                    } else {
                        $ver = $obj->ver ? $obj->ver : '';
                    }
                 
                    if ( isset( $wp_scripts->args[ $handle ] ) ) {
                        $ver = $ver ? $ver . '&' . $wp_scripts->args[ $handle ] : $wp_scripts->args[ $handle ];
                    }
                    
                    /**
                    * Filters the script loader source.
                    *
                    * @since 2.2.0
                    *
                    * @param string $src    Script loader source path.
                    * @param string $handle Script handle.
                    */
    
                    $srce = apply_filters( 'script_loader_src', $src, $handle );
    
                    if ( ! empty( $ver ) ) {
                        $srce = add_query_arg( 'ver', $ver, $srce );
                    }
    
    //    			echo '<link rel="preload" href="'.$srce.'" as="script">'."\r\n";
        			
        			if( isset($wp_scripts->registered[$handle]->extra['conditional']) ){
        				echo '<![endif]-->'."\r\n";
        			}
    			}
        	}
        }
    }
    
    

    This is based on the source of wp_scirpts->do_item:
    https://core.trac.wordpress.org/browser/tags/5.3/src/wp-includes/class.wp-scripts.php#L257

    It worked for most scripts, but not all of them. In particular this plugin still loaded two versions:
    https://wordpress.org/plugins/lazy-loading-responsive-images/

    But I don’t have time to properly debug this. So I disabled the preloading completely for now in my version.

    Perhaps you can look into it.

    • This topic was modified 2 years, 4 months ago by Kimcha.
Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)
  • The topic ‘Duplicate file load due to preload’ is closed to new replies.